# 配置遠端處理器 (remoteproc) 子系統

remoteproc 框架用來將韌體載入至其他子系統，例如 Qualcomm 平台上的音訊數位訊號處理器 (aDSP) 和運算數位訊號處理器 (cDSP)。

remoteproc 框架分成兩部分：

- 核心框架：核心框架包含通用邏輯。它會載入韌體並啟動或停止遠端處理器。
- Remoteproc 驅動程式：驅動程式包含平台操作以管理對應的核心。remoteproc 驅動程式向核心框架登錄 remoteproc 執行個體和操作集合。

非對稱多處理 (ASMP) 配置中的 SoC 上存在多個異質遠端處理器。遠端處理器執行不同的韌體或 OS 執行個體。

欲深入瞭解 Qualcomm Linux 用來管理其他核心的標準框架，請參閱 [Remote Processor Framework](https://www.kernel.org/doc/html/next/staging/remoteproc.html)。

## Qualcomm remoteproc 支援

Qualcomm 已加強 remoteproc 框架，使用上游 PAS 驅動程式進行周邊韌體驗證。

Qualcomm Linux 中的 Remoteproc 驅動程式實作周邊驗證服務 (PAS) 驅動程式，它是以 TrustZone 為基礎的周邊映像載入器，用於 Qualcomm SoC 裝置上的遠端處理器。

如需更多資訊，請參閱 [qcom_q6v5_pas.c](https://github.com/torvalds/linux/blob/master/drivers/remoteproc/qcom_q6v5_pas.c)。

遠端處理器用來管理各種協同處理器的生命週期，例如 aDSP、cDSP、數據機周邊子系統 (MPSS) 和無線處理器子系統 (WPSS)。以 QCS6490 為基礎的機板和 Dragonwing™ RB3 Gen 2 開發套件支援的協同處理器包括 aDSP、cDSP 和 WPSS。

備註

支援的遠端處理器子系統清單取決於使用的 SoC。

**使用者介面：** remoteproc 框架追蹤已登錄的 remoteproc 裝置並提供使用者介面以啟動和關閉裝置。使用者空間可使用以下 `sysfs` 介面查詢和變更 remoteproc 的目前狀態：

remoteproc user space interface
    # start remoteproc:
      echo "start" > /sys/class/remoteproc/remoteprocN/state
    
    # stop remoteproc:
      echo "stop" > /sys/class/remoteproc/remoteprocN/state
    Copy to clipboard

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by Microsoft Visio, SVG Export remoteproc-framework.svg Page-1 -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="10.1681in" height="7.74685in" viewbox="0 0 732.102 557.773" xml:space="preserve" color-interpolation-filters="sRGB" class="st16" aria-label="../_images/remoteproc-framework.svg"><v:documentproperties v:langid="1033" v:viewmarkup="false">	<v:userdefs>		<v:ud v:nameu="msvNoAutoConnect" v:val="VT0(1):26"></v:ud>	</v:userdefs></v:documentproperties>
<style>.svg-1 .st1 { fill: #fafafa; stroke: #d2d7e1; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-1 .st2 { fill: none; stroke: #6280cc; stroke-dasharray: 10.5, 7.5; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.5 }
.svg-1 .st3 { fill: #6280cc; fill-opacity: 1; stroke: #6280cc; stroke-opacity: 1; stroke-width: 0.37313432835821 }
.svg-1 .st4 { fill: #007884; stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-opacity: 0; stroke-width: 2 }
.svg-1 .st5 { fill: none; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-1 .st6 { fill: #ffffff; font-family: Roboto Flex, Qualcomm-Next, sans-serif; font-size: 1.16666em }
.svg-1 .st7 { font-size: 1em }
.svg-1 .st8 { stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.5 }
.svg-1 .st9 { fill: #000000; font-family: Roboto Flex, Qualcomm-Next, sans-serif; font-size: 1.16666em }
.svg-1 .st10 { fill: none; stroke: #6280cc; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.5 }
.svg-1 .st11 { marker-end: url("#mrkr4-85"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-1 .st12 { fill: #000000; fill-opacity: 1; stroke: #000000; stroke-opacity: 1; stroke-width: 0.52631578947368 }
.svg-1 .st13 { marker-end: url("#mrkr4-85"); marker-start: url("#mrkr4-110"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-1 .st14 { fill: #007884; stroke: #000000; stroke-opacity: 0; stroke-width: 2 }
.svg-1 .st15 { fill: none; stroke: none; stroke-width: 0.25 }
.svg-1 .st16 { fill: none; fill-rule: evenodd; font-size: 12px; overflow: visible; stroke-linecap: square; stroke-miterlimit: 3 }</style>
<defs id="Markers">	<g id="lend5">		<path d="M 2 1 L 0 0 L 1.98117 -0.993387 C 1.67173 -0.364515 1.67301 0.372641 1.98465 1.00043 " style="stroke:none"></path>	</g>	<marker id="mrkr5-7" class="st3" v:arrowtype="5" v:arrowsize="2" v:setback="4.69" refx="4.69" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend5" transform="scale(2.68) "></use>	</marker>	<marker id="mrkr5-9" class="st3" v:arrowtype="5" v:arrowsize="2" v:setback="4.69" refx="-4.69" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend5" transform="scale(-2.68,-2.68) "></use>	</marker>	<g id="lend4">		<path d="M 2 1 L 0 0 L 2 -1 L 2 1 " style="stroke:none"></path>	</g>	<marker id="mrkr4-85" class="st12" v:arrowtype="4" v:arrowsize="1" v:setback="3.8" refx="-3.8" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend4" transform="scale(-1.9,-1.9) "></use>	</marker>	<marker id="mrkr4-110" class="st12" v:arrowtype="4" v:arrowsize="1" v:setback="3.62" refx="3.62" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend4" transform="scale(1.9) "></use>	</marker></defs><g v:mid="0" v:index="1" v:groupcontext="foregroundPage">	<v:userdefs>		<v:ud v:nameu="OrgChartStyle" v:prompt="" v:val="VT0(1):26"></v:ud>	</v:userdefs>	<title>Page-1</title>	<v:pageproperties v:drawingscale="0.0138889" v:pagescale="0.0138889" v:drawingunits="29" v:shadowoffsetx="9" v:shadowoffsety="-9"></v:pageproperties>	<v:layer v:name="Flowchart" v:index="0"></v:layer>	<v:layer v:name="Irrigation System" v:index="1"></v:layer>	<v:layer v:name="Flow Segment" v:index="2"></v:layer>	<v:layer v:name="Connector" v:index="3"></v:layer>	<g id="shape1031-1" v:mid="1031" v:groupcontext="shape" transform="translate(41.6482,-42.7629)">		<title>Sheet.1031</title>		<rect x="0" y="83.2993" width="648" height="474.474" rx="4" ry="4" class="st1"></rect>	</g>	<g id="group1020-3" transform="translate(18,-18)" v:mid="1020" v:groupcontext="group">		<title>Sheet.1020</title>	</g>	<g id="shape1001-4" v:mid="1001" v:groupcontext="shape" v:layermember="0" transform="translate(200.952,-111.867)">		<title>Process.1001</title>		<v:custprops>			<v:cp v:nameu="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>			<v:cp v:nameu="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Status" v:lbl="Status" v:prompt="" v:type="4" v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>		</v:custprops>		<v:userdefs>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="DefaultWidth" v:prompt="" v:val="VT0(1):0"></v:ud>			<v:ud v:nameu="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"></v:ud>			<v:ud v:nameu="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"></v:ud>		</v:userdefs>		<path d="M0 557.77 L463.7 557.77 L463.7 362.4 L0 362.4 L0 557.77 Z" class="st2"></path>	</g>	<g id="shape1-10" v:mid="1" v:groupcontext="shape" v:layermember="0" transform="translate(97.1053,-445.647)">		<title>Process</title>		<v:custprops>			<v:cp v:nameu="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>			<v:cp v:nameu="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Status" v:lbl="Status" v:prompt="" v:type="4" v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>		</v:custprops>		<v:userdefs>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="DefaultWidth" v:prompt="" v:val="VT0(1):0"></v:ud>			<v:ud v:nameu="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"></v:ud>			<v:ud v:nameu="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"></v:ud>		</v:userdefs>		<rect x="0" y="511.183" width="147.226" height="46.5902" rx="4" ry="4" class="st4"></rect>	</g>	<g id="shape5-12" v:mid="5" v:groupcontext="shape" v:layermember="0" transform="translate(347.39,-445.647)">		<title>Process.5</title>		<v:custprops>			<v:cp v:nameu="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>			<v:cp v:nameu="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Status" v:lbl="Status" v:prompt="" v:type="4" v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>		</v:custprops>		<v:userdefs>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="DefaultWidth" v:prompt="" v:val="VT0(1):0"></v:ud>			<v:ud v:nameu="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"></v:ud>			<v:ud v:nameu="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"></v:ud>		</v:userdefs>		<rect x="0" y="511.183" width="147.226" height="46.5902" rx="4" ry="4" class="st4"></rect>	</g>	<g id="shape6-14" v:mid="6" v:groupcontext="shape" transform="translate(116.735,-461.592)">		<title>Sheet.6</title>		<desc>User space clients</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="53.9829" cy="550.974" width="107.97" height="13.5991"></v:textrect>		<rect x="0" y="544.174" width="107.966" height="13.5991" class="st5"></rect>		<text x="19.31" y="546.77" class="st6" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>User space <tspan x="33.45" dy="1.2em" class="st7">clients</tspan></text>		</g>	<g id="shape7-18" v:mid="7" v:groupcontext="shape" transform="translate(357.205,-459.105)">		<title>Sheet.7</title>		<desc>Peripheral manager</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="63.798" cy="548.707" width="127.6" height="18.1322"></v:textrect>		<rect x="0" y="539.641" width="127.596" height="18.1322" class="st5"></rect>		<text x="32.24" y="544.51" class="st6" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Peripheral <tspan x="36.18" dy="1.2em" class="st7">manager</tspan></text>		</g>	<g id="shape11-22" v:mid="11" v:groupcontext="shape" v:layermember="0" transform="translate(60.1448,-363.348)">		<title>Process.11</title>		<v:custprops>			<v:cp v:nameu="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>			<v:cp v:nameu="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Status" v:lbl="Status" v:prompt="" v:type="4" v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>		</v:custprops>		<v:userdefs>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="DefaultWidth" v:prompt="" v:val="VT0(1):0"></v:ud>			<v:ud v:nameu="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"></v:ud>			<v:ud v:nameu="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"></v:ud>		</v:userdefs>		<rect x="0" y="516.564" width="240.831" height="41.2095" rx="4" ry="4" class="st4"></rect>	</g>	<g id="shape13-24" v:mid="13" v:groupcontext="shape" transform="translate(67.6869,-372)">		<title>Sheet.13</title>		<desc>/sys/class/remoteproc/remoteproc*</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="112.873" cy="546.44" width="225.75" height="22.6674"></v:textrect>		<rect x="0" y="535.106" width="225.747" height="22.6674" class="st5"></rect>		<text x="38.26" y="542.24" class="st6" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>/sys/class/remoteproc/<tspan x="73.71" dy="1.2em" class="st7">remoteproc*</tspan></text>		</g>	<g id="shape15-28" v:mid="15" v:groupcontext="shape" v:layermember="1;2" transform="translate(43.1296,-383.953)">		<title>Lateral line</title>		<v:custprops>			<v:cp v:nameu="ShapeClass" v:lbl="Shape class" v:invis="true" v:langid="1033" v:val="VT4(Building Component)"></v:cp>			<v:cp v:nameu="ShapeType" v:lbl="Shape type" v:invis="true" v:langid="1033" v:val="VT4(Flow Segment)"></v:cp>			<v:cp v:nameu="SubShapeType" v:lbl="Subshape type" v:invis="true" v:langid="1033" v:val="VT4(Pipe Segment)"></v:cp>			<v:cp v:nameu="BaseElevation" v:lbl="Base elevation" v:type="2" v:langid="1033"></v:cp>		</v:custprops>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="SolSH" v:val="VT4({5D50005D-537C-4738-9C46-130C74335A6D})"></v:ud>			<v:ud v:nameu="ShapeClass" v:prompt="Building Component" v:val="VT0(3):26"></v:ud>			<v:ud v:nameu="ShapeType" v:prompt="Flow Segment" v:val="VT0(19):26"></v:ud>			<v:ud v:nameu="SubShapeType" v:prompt="Pipe Segment" v:val="VT0(56):26"></v:ud>		</v:userdefs>		<path d="M0 557.77 L17.02 557.77" class="st8"></path>	</g>	<g id="shape27-31" v:mid="27" v:groupcontext="shape" v:layermember="1;2" transform="translate(302.422,-383.951) rotate(0.148518)">		<title>Lateral line.27</title>		<v:custprops>			<v:cp v:nameu="ShapeClass" v:lbl="Shape class" v:invis="true" v:langid="1033" v:val="VT4(Building Component)"></v:cp>			<v:cp v:nameu="ShapeType" v:lbl="Shape type" v:invis="true" v:langid="1033" v:val="VT4(Flow Segment)"></v:cp>			<v:cp v:nameu="SubShapeType" v:lbl="Subshape type" v:invis="true" v:langid="1033" v:val="VT4(Pipe Segment)"></v:cp>			<v:cp v:nameu="BaseElevation" v:lbl="Base elevation" v:type="2" v:langid="1033"></v:cp>		</v:custprops>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="SolSH" v:val="VT4({5D50005D-537C-4738-9C46-130C74335A6D})"></v:ud>			<v:ud v:nameu="ShapeClass" v:prompt="Building Component" v:val="VT0(3):26"></v:ud>			<v:ud v:nameu="ShapeType" v:prompt="Flow Segment" v:val="VT0(19):26"></v:ud>			<v:ud v:nameu="SubShapeType" v:prompt="Pipe Segment" v:val="VT0(56):26"></v:ud>		</v:userdefs>		<path d="M0 557.77 L46.41 557.77" class="st8"></path>	</g>	<g id="shape28-34" v:mid="28" v:groupcontext="shape" v:layermember="0" transform="translate(347.39,-363.228)">		<title>Process.28</title>		<v:custprops>			<v:cp v:nameu="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>			<v:cp v:nameu="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Status" v:lbl="Status" v:prompt="" v:type="4" v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>		</v:custprops>		<v:userdefs>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="DefaultWidth" v:prompt="" v:val="VT0(1):0"></v:ud>			<v:ud v:nameu="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"></v:ud>			<v:ud v:nameu="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"></v:ud>		</v:userdefs>		<rect x="0" y="516.564" width="147.226" height="41.2095" rx="4" ry="4" class="st4"></rect>	</g>	<g id="shape29-36" v:mid="29" v:groupcontext="shape" v:layermember="1;2" transform="translate(496.616,-383.833)">		<title>Lateral line.29</title>		<v:custprops>			<v:cp v:nameu="ShapeClass" v:lbl="Shape class" v:invis="true" v:langid="1033" v:val="VT4(Building Component)"></v:cp>			<v:cp v:nameu="ShapeType" v:lbl="Shape type" v:invis="true" v:langid="1033" v:val="VT4(Flow Segment)"></v:cp>			<v:cp v:nameu="SubShapeType" v:lbl="Subshape type" v:invis="true" v:langid="1033" v:val="VT4(Pipe Segment)"></v:cp>			<v:cp v:nameu="BaseElevation" v:lbl="Base elevation" v:type="2" v:langid="1033"></v:cp>		</v:custprops>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="SolSH" v:val="VT4({5D50005D-537C-4738-9C46-130C74335A6D})"></v:ud>			<v:ud v:nameu="ShapeClass" v:prompt="Building Component" v:val="VT0(3):26"></v:ud>			<v:ud v:nameu="ShapeType" v:prompt="Flow Segment" v:val="VT0(19):26"></v:ud>			<v:ud v:nameu="SubShapeType" v:prompt="Pipe Segment" v:val="VT0(56):26"></v:ud>		</v:userdefs>		<path d="M0 557.77 L193.74 557.77" class="st8"></path>	</g>	<g id="shape30-39" v:mid="30" v:groupcontext="shape" transform="translate(594.123,-388.023)">		<title>Sheet.30</title>		<desc>Userspace</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="37.5254" cy="547.059" width="75.06" height="21.429"></v:textrect>		<rect x="0" y="536.344" width="75.0507" height="21.429" class="st5"></rect>		<text x="4.58" y="551.26" class="st9" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Userspace</text>		</g>	<g id="shape31-42" v:mid="31" v:groupcontext="shape" transform="translate(352,-374.767)">		<title>Sheet.31</title>		<desc>/dev/remoteproc*</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="68.8541" cy="548.707" width="137.71" height="18.1322"></v:textrect>		<rect x="0" y="539.641" width="137.708" height="18.1322" class="st5"></rect>		<text x="12.87" y="552.91" class="st6" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>/dev/remoteproc*</text>		</g>	<g id="shape1000-45" v:mid="1000" v:groupcontext="shape" transform="translate(620.674,-361.605)">		<title>Sheet.1000</title>		<desc>Kernel</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="24.25" cy="548.707" width="48.51" height="18.1322"></v:textrect>		<rect x="0" y="539.641" width="48.5" height="18.1322" class="st5"></rect>		<text x="4.51" y="552.91" class="st9" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Kernel</text>		</g>	<g id="shape1002-48" v:mid="1002" v:groupcontext="shape" v:layermember="0" transform="translate(214.817,-250.237)">		<title>Process.1002</title>		<v:custprops>			<v:cp v:nameu="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>			<v:cp v:nameu="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Status" v:lbl="Status" v:prompt="" v:type="4" v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>		</v:custprops>		<v:userdefs>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="DefaultWidth" v:prompt="" v:val="VT0(1):0"></v:ud>			<v:ud v:nameu="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"></v:ud>			<v:ud v:nameu="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"></v:ud>		</v:userdefs>		<rect x="0" y="516.564" width="240.831" height="41.2095" rx="4" ry="4" class="st4"></rect>	</g>	<g id="shape1003-50" v:mid="1003" v:groupcontext="shape" v:layermember="0" transform="translate(489.162,-250.237)">		<title>Process.1003</title>		<v:custprops>			<v:cp v:nameu="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>			<v:cp v:nameu="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Status" v:lbl="Status" v:prompt="" v:type="4" v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>		</v:custprops>		<v:userdefs>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="DefaultWidth" v:prompt="" v:val="VT0(1):0"></v:ud>			<v:ud v:nameu="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"></v:ud>			<v:ud v:nameu="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"></v:ud>		</v:userdefs>		<rect x="0" y="516.564" width="159.486" height="41.2095" rx="4" ry="4" class="st4"></rect>	</g>	<g id="shape1004-52" v:mid="1004" v:groupcontext="shape" v:layermember="0" transform="translate(489.648,-168.585)">		<title>Process.1004</title>		<desc>Mdt-loader/SCM driver</desc>		<v:custprops>			<v:cp v:nameu="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>			<v:cp v:nameu="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Status" v:lbl="Status" v:prompt="" v:type="4" v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>		</v:custprops>		<v:userdefs>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="DefaultWidth" v:prompt="" v:val="VT0(1):0"></v:ud>			<v:ud v:nameu="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"></v:ud>			<v:ud v:nameu="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="79.743" cy="537.169" width="159.49" height="41.2095"></v:textrect>		<rect x="0" y="516.564" width="159.486" height="41.2095" rx="4" ry="4" class="st4"></rect>		<text x="9.02" y="541.37" class="st6" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Mdt-loader/SCM driver</text>		</g>	<g id="shape1005-55" v:mid="1005" v:groupcontext="shape" v:layermember="0" transform="translate(219.725,-127.993)">		<title>Process.1005</title>		<v:custprops>			<v:cp v:nameu="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>			<v:cp v:nameu="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Status" v:lbl="Status" v:prompt="" v:type="4" v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>		</v:custprops>		<v:userdefs>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="DefaultWidth" v:prompt="" v:val="VT0(1):0"></v:ud>			<v:ud v:nameu="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"></v:ud>			<v:ud v:nameu="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"></v:ud>		</v:userdefs>		<rect x="0" y="475.973" width="233.979" height="81.8009" rx="2" ry="2" class="st10"></rect>	</g>	<g id="shape1006-57" v:mid="1006" v:groupcontext="shape" v:layermember="0" transform="translate(225.623,-159.212)">		<title>Process.1006</title>		<v:custprops>			<v:cp v:nameu="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>			<v:cp v:nameu="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Status" v:lbl="Status" v:prompt="" v:type="4" v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>		</v:custprops>		<v:userdefs>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="DefaultWidth" v:prompt="" v:val="VT0(1):0"></v:ud>			<v:ud v:nameu="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"></v:ud>			<v:ud v:nameu="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"></v:ud>		</v:userdefs>		<rect x="0" y="513.248" width="71.582" height="44.525" rx="2" ry="2" class="st4"></rect>	</g>	<g id="shape1007-59" v:mid="1007" v:groupcontext="shape" v:layermember="0" transform="translate(299.648,-159.212)">		<title>Process.1007</title>		<v:custprops>			<v:cp v:nameu="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>			<v:cp v:nameu="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Status" v:lbl="Status" v:prompt="" v:type="4" v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>		</v:custprops>		<v:userdefs>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="DefaultWidth" v:prompt="" v:val="VT0(1):0"></v:ud>			<v:ud v:nameu="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"></v:ud>			<v:ud v:nameu="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"></v:ud>		</v:userdefs>		<rect x="0" y="513.248" width="53.4" height="44.525" rx="2" ry="2" class="st4"></rect>	</g>	<g id="shape1008-61" v:mid="1008" v:groupcontext="shape" v:layermember="0" transform="translate(355.341,-159.212)">		<title>Process.1008</title>		<v:custprops>			<v:cp v:nameu="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>			<v:cp v:nameu="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Status" v:lbl="Status" v:prompt="" v:type="4" v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>		</v:custprops>		<v:userdefs>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="DefaultWidth" v:prompt="" v:val="VT0(1):0"></v:ud>			<v:ud v:nameu="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"></v:ud>			<v:ud v:nameu="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"></v:ud>		</v:userdefs>		<rect x="0" y="513.248" width="92.4" height="44.525" rx="2" ry="2" class="st4"></rect>	</g>	<g id="shape1011-63" v:mid="1011" v:groupcontext="shape" transform="translate(233.4,-261.718)">		<title>Sheet.1011</title>		<desc>Remoteproc core</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="102.496" cy="548.707" width="205" height="18.1322"></v:textrect>		<rect x="0" y="539.641" width="204.991" height="18.1322" class="st5"></rect>		<text x="48.94" y="552.91" class="st6" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Remoteproc core</text>		</g>	<g id="shape1012-66" v:mid="1012" v:groupcontext="shape" transform="translate(506.202,-254.083)">		<title>Sheet.1012</title>		<desc>Remoteproc platform device</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="63.798" cy="541.014" width="127.6" height="33.5186"></v:textrect>		<rect x="0" y="524.255" width="127.596" height="33.5186" class="st5"></rect>		<text x="25.7" y="536.81" class="st6" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Remoteproc <tspan x="15.3" dy="1.2em" class="st7">platform device</tspan></text>		</g>	<g id="shape1013-70" v:mid="1013" v:groupcontext="shape" transform="translate(231.648,-174.458)">		<title>Sheet.1013</title>		<desc>sysmon</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="29.0704" cy="550.427" width="58.15" height="14.6933"></v:textrect>		<rect x="0" y="543.08" width="58.1409" height="14.6933" class="st5"></rect>		<text x="4.55" y="554.63" class="st6" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>sysmon</text>		</g>	<g id="shape1014-73" v:mid="1014" v:groupcontext="shape" transform="translate(305.31,-174.458)">		<title>Sheet.1014</title>		<desc>Glink</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="20.7678" cy="550.427" width="41.54" height="14.6933"></v:textrect>		<rect x="0" y="543.08" width="41.5357" height="14.6933" class="st5"></rect>		<text x="5.19" y="554.63" class="st6" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Glink</text>		</g>	<g id="shape1015-76" v:mid="1015" v:groupcontext="shape" transform="translate(362.102,-167)">		<title>Sheet.1015</title>		<desc>SSR notification</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="39.4768" cy="542.969" width="78.96" height="29.6091"></v:textrect>		<rect x="0" y="528.164" width="78.9537" height="29.6091" class="st5"></rect>		<text x="26.86" y="538.77" class="st6" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>SSR <tspan x="4.2" dy="1.2em" class="st7">notification</tspan></text>		</g>	<g id="shape1022-80" v:mid="1022" v:groupcontext="shape" transform="translate(728.492,112.127) rotate(90)">		<title>Sheet.1022</title>		<path d="M0 557.77 L33.61 557.77" class="st11"></path>	</g>	<g id="shape1023-86" v:mid="1023" v:groupcontext="shape" transform="translate(797.128,194.546) rotate(90)">		<title>Sheet.1023</title>		<path d="M0 557.77 L64.24 557.77" class="st11"></path>	</g>	<g id="shape1024-91" v:mid="1024" v:groupcontext="shape" transform="translate(978.776,112.127) rotate(90)">		<title>Sheet.1024</title>		<path d="M0 557.77 L33.61 557.77" class="st11"></path>	</g>	<g id="shape1025-96" v:mid="1025" v:groupcontext="shape" transform="translate(978.776,194.546) rotate(90)">		<title>Sheet.1025</title>		<path d="M0 557.77 L64.24 557.77" class="st11"></path>	</g>	<g id="shape1026-101" v:mid="1026" v:groupcontext="shape" v:layermember="0" transform="translate(61.6482,-250.237)">		<title>Process.1026</title>		<desc>Kernel clients</desc>		<v:custprops>			<v:cp v:nameu="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>			<v:cp v:nameu="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0"></v:cp>			<v:cp v:nameu="Status" v:lbl="Status" v:prompt="" v:type="4" v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortkey="" v:invis="false" v:ask="false" v:langid="1033" v:cal="0" v:val="VT4()"></v:cp>		</v:custprops>		<v:userdefs>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="DefaultWidth" v:prompt="" v:val="VT0(1):0"></v:ud>			<v:ud v:nameu="DefaultHeight" v:prompt="" v:val="VT0(0.75):0"></v:ud>			<v:ud v:nameu="ResizeTxtHeight" v:prompt="" v:val="VT0(0.75):0"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="59.8498" cy="537.169" width="119.7" height="41.2095"></v:textrect>		<rect x="0" y="516.564" width="119.7" height="41.2095" rx="4" ry="4" class="st4"></rect>		<text x="17.85" y="541.37" class="st6" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Kernel clients</text>		</g>	<g id="shape1027-104" v:mid="1027" v:groupcontext="shape" transform="translate(180.464,-270.842)">		<title>Sheet.1027</title>		<path d="M7.24 557.77 L7.6 557.77 L20.85 557.77 L26.08 557.77" class="st13"></path>	</g>	<g id="shape1028-112" v:mid="1028" v:groupcontext="shape" transform="translate(893.006,307.536) rotate(90)">		<title>Sheet.1028</title>		<path d="M0 557.77 L31.7 557.77" class="st11"></path>	</g>	<g id="shape1029-117" v:mid="1029" v:groupcontext="shape" transform="translate(232.81,-133.646)">		<title>Sheet.1029</title>		<desc>Remoteproc subdevices</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="100.745" cy="547.978" width="201.5" height="19.591"></v:textrect>		<rect x="0" y="538.182" width="201.49" height="19.591" class="st5"></rect>		<text x="25.8" y="552.18" class="st9" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Remoteproc subdevices</text>		</g>	<g id="shape1030-120" v:mid="1030" v:groupcontext="shape" transform="translate(456.348,-270.842)">		<title>Sheet.1030</title>		<path d="M7.24 557.77 L7.6 557.77 L23.62 557.77 L25.2 557.77" class="st13"></path>	</g>	<g id="shape1034-127" v:mid="1034" v:groupcontext="shape" transform="translate(565.737,-56.2629)">		<title>Sheet.1034</title>		<rect x="0" y="538.943" width="19.5" height="18.8305" rx="2" ry="2" class="st14"></rect>	</g>	<g id="shape1035-129" v:mid="1035" v:groupcontext="shape" transform="translate(586.2,-56.7532)">		<title>Sheet.1035</title>		<desc>Open source</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="44.9" cy="548.848" width="89.8" height="17.85"></v:textrect>		<rect x="0" y="539.923" width="89.8" height="17.85" class="st15"></rect>		<text x="5.66" y="553.05" class="st9" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Open source</text>		</g></g>
</svg>

**圖：Remoteproc 支援**

## 配置 remoteproc 復原和子系統重新啟動

remoteproc 子裝置為遠端處理器子系統崩潰和復原情境管理通訊脈絡。

實體 (例如通訊脈絡) 必須確定遠端處理器何時啟動或關閉。每個子裝置都有兩個操作：

- 在 `start()` 之後呼叫 `probe()`
- 在 `stop()` 之前呼叫 `remove()`

遠端處理器發生嚴重錯誤時，remoteproc 驅動程式會加以處理並調用 `rproc_report_crash()`，觸發故障遠端處理器的復原。

復原處理常式執行以下操作：

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by Microsoft Visio, SVG Export Remoteproc-recovery.svg Page-1 -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="11.1528in" height="2.12503in" viewbox="0 0 802.998 153.002" xml:space="preserve" color-interpolation-filters="sRGB" class="st7" aria-label="../_images/Remoteproc-recovery.svg"><v:documentproperties v:langid="1033" v:viewmarkup="false">	<v:userdefs>		<v:ud v:nameu="msvSubprocessMaster" v:prompt="" v:val="VT4(Rectangle)"></v:ud>		<v:ud v:nameu="msvNoAutoConnect" v:val="VT0(1):26"></v:ud>	</v:userdefs></v:documentproperties>
<style>.svg-2 .st1 { fill: #fafafa; stroke: #c7c8c8; stroke-width: 1.25 }
.svg-2 .st2 { marker-end: url("#mrkr4-10"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.25 }
.svg-2 .st3 { fill: #000000; fill-opacity: 1; stroke: #000000; stroke-opacity: 1; stroke-width: 0.3315649867374 }
.svg-2 .st4 { fill: #6280cc; stroke: #c8c8c8; stroke-opacity: 0; stroke-width: 1.25 }
.svg-2 .st5 { fill: #ffffff; font-family: Roboto Flex, Qualcomm-Next, sans-serif; font-size: 1.16666em }
.svg-2 .st6 { font-size: 1em }
.svg-2 .st7 { fill: none; fill-rule: evenodd; font-size: 12px; overflow: visible; stroke-linecap: square; stroke-miterlimit: 3 }</style>
<defs id="Markers">	<g id="lend4">		<path d="M 2 1 L 0 0 L 2 -1 L 2 1 " style="stroke:none"></path>	</g>	<marker id="mrkr4-10" class="st3" v:arrowtype="4" v:arrowsize="2" v:setback="6.032" refx="-6.032" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend4" transform="scale(-3.016,-3.016) "></use>	</marker></defs><g v:mid="0" v:index="1" v:groupcontext="foregroundPage">	<v:userdefs>		<v:ud v:nameu="msvThemeOrder" v:val="VT0(0):26"></v:ud>	</v:userdefs>	<title>Page-1</title>	<v:pageproperties v:drawingscale="1" v:pagescale="1" v:drawingunits="0" v:shadowoffsetx="9" v:shadowoffsety="-9"></v:pageproperties>	<g id="group1018-1" transform="translate(18.0016,-32.1846)" v:mid="1018" v:groupcontext="group">		<title>Sheet.1018</title>		<g id="shape1017-2" v:mid="1017" v:groupcontext="shape">			<title>Rectangle</title>			<v:userdefs>				<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			</v:userdefs>			<rect x="0" y="67.7446" width="766.998" height="85.2578" rx="4" ry="4" class="st1"></rect>		</g>		<g id="group1016-4" transform="translate(11.7053,-11.0733)" v:mid="1016" v:groupcontext="group">			<title>Sheet.1016</title>			<g id="shape1009-5" v:mid="1009" v:groupcontext="shape" transform="translate(152.789,-31.6638)">				<title>Sheet.1009</title>				<path d="M0 153 L35.21 153" class="st2"></path>			</g>			<g id="shape1010-11" v:mid="1010" v:groupcontext="shape" transform="translate(349.008,-31.5557)">				<title>Sheet.1010</title>				<path d="M0 153 L34.44 153" class="st2"></path>			</g>			<g id="shape1011-16" v:mid="1011" v:groupcontext="shape" transform="translate(547.983,-31.5363)">				<title>Sheet.1011</title>				<path d="M0 153 L30.96 153" class="st2"></path>			</g>			<g id="group1012-21" transform="translate(586.286,0)" v:mid="1012" v:groupcontext="group">				<title>Sheet.1012</title>				<g id="shape1004-22" v:mid="1004" v:groupcontext="shape" transform="translate(0.801115,-0.819834) rotate(0.3)">					<title>Rectangle.1012</title>					<v:userdefs>						<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>					</v:userdefs>					<rect x="0" y="90.7121" width="156.978" height="62.2903" rx="4" ry="4" class="st4"></rect>				</g>				<g id="shape1005-24" v:mid="1005" v:groupcontext="shape" transform="translate(21.1031,-12.9557)">					<title>Sheet.1005</title>					<desc>Start remoteproc instance</desc>					<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>					<v:textrect cx="57.5479" cy="133.874" width="115.1" height="38.257"></v:textrect>					<rect x="0" y="114.745" width="115.096" height="38.257" rx="4" ry="4" class="st4"></rect>					<text x="4.76" y="129.67" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Start remoteproc <tspan x="31.05" dy="1.2em" class="st6">instance</tspan></text>					</g>			</g>			<g id="group1013-28" transform="translate(390.857,0)" v:mid="1013" v:groupcontext="group">				<title>Sheet.1013</title>				<g id="shape1003-29" v:mid="1003" v:groupcontext="shape" transform="translate(0.801115,-0.819834) rotate(0.3)">					<title>Rectangle.1006</title>					<v:userdefs>						<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>					</v:userdefs>					<rect x="0" y="90.7121" width="156.978" height="62.2903" rx="4" ry="4" class="st4"></rect>				</g>				<g id="shape1006-31" v:mid="1006" v:groupcontext="shape" transform="translate(23.852,-21.9169)">					<title>Sheet.1006</title>					<desc>Reload firmware</desc>					<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>					<v:textrect cx="54.799" cy="142.473" width="109.6" height="21.0581"></v:textrect>					<rect x="0" y="131.944" width="109.598" height="21.0581" rx="4" ry="4" class="st4"></rect>					<text x="33.33" y="138.27" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Reload <tspan x="27.02" dy="1.2em" class="st6">firmware</tspan></text>					</g>			</g>			<g id="group1014-35" transform="translate(195.429,0)" v:mid="1014" v:groupcontext="group">				<title>Sheet.1014</title>				<g id="shape1002-36" v:mid="1002" v:groupcontext="shape" transform="translate(0.801115,-0.819834) rotate(0.3)">					<title>Rectangle.1005</title>					<v:userdefs>						<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>					</v:userdefs>					<rect x="0" y="90.7121" width="156.978" height="62.2903" rx="4" ry="4" class="st4"></rect>				</g>				<g id="shape1007-38" v:mid="1007" v:groupcontext="shape" transform="translate(16.3706,-12.4272)">					<title>Sheet.1007</title>					<desc>Invoke coredump generator</desc>					<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>					<v:textrect cx="63.2675" cy="133.874" width="126.54" height="38.257"></v:textrect>					<rect x="0" y="114.745" width="126.535" height="38.257" rx="4" ry="4" class="st4"></rect>					<text x="9.53" y="129.67" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Invoke coredump <tspan x="33.24" dy="1.2em" class="st6">generator</tspan></text>					</g>			</g>			<g id="group1015-42" v:mid="1015" v:groupcontext="group">				<title>Sheet.1015</title>				<g id="shape1001-43" v:mid="1001" v:groupcontext="shape" transform="translate(0.801115,-0.819834) rotate(0.3)">					<title>Rectangle.1001</title>					<v:userdefs>						<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>					</v:userdefs>					<rect x="0" y="90.7121" width="156.978" height="62.2903" rx="4" ry="4" class="st4"></rect>				</g>				<g id="shape1008-45" v:mid="1008" v:groupcontext="shape" transform="translate(21.1031,-12.0944)">					<title>Sheet.1008</title>					<desc>Stop remoteproc instance</desc>					<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>					<v:textrect cx="57.5479" cy="133.874" width="115.1" height="38.257"></v:textrect>					<rect x="0" y="114.745" width="115.096" height="38.257" rx="4" ry="4" class="st4"></rect>					<text x="5.3" y="129.67" class="st5" v:langid="1033"><v:paragraph v:horizalign="1" v:bulletsize="0.166667"></v:paragraph><v:tablist></v:tablist>Stop remoteproc <tspan x="31.05" dy="1.2em" class="st6">instance</tspan></text>					</g>			</g>		</g>	</g></g>
</svg>

**圖：Remoteproc 崩潰順序**

若要從使用者空間使用復原 `debugfs` 節點啟用和停用復原，請執行以下操作：

mount -t debugfs nodev /sys/kernel/debug
    echo disabled > /sys/kernel/debug/remoteproc/remoteprocN/recovery
    Copy to clipboard

## 啟用或停用核心傾印

支援遠端處理器核心傾印，以使用 Qualcomm Linux 核心 devcoredump 功能對子系統崩潰問題進行除錯。

發生子系統崩潰時，devcoredump 會在 `/sys/class/devcoredump/devcdN/data` 節點中公開復原 remoteproc 的記憶體快照，並將相關的崩潰 `uevent` 傳送至使用者空間。讀取 sysfs 節點時，sysfs 會在 ELF 容器中提供區段，而寫入操作會釋放資源並銷毀 devcoredump 執行個體。

透過 debugfs 節點，使用者空間可以啟用或停用核心傾印功能。

# Disable core dumps:
      echo disabled > /sys/kernel/debug/remoteproc/remoteprocN/coredump
    
    # Enable core dumps:
      echo enabled > /sys/kernel/debug/remoteproc/remoteprocN/coredump
    #
    # N represents the index number of the remote processor.
    Copy to clipboard

備註

為了收集完整的 RAM 傾印以進行崩潰分析，Qualcomm SoC 會在 remoteproc 崩潰 (遠端處理器發生嚴重錯誤) 時觸發核心恐慌。只有在停用核心傾印時，才會啟用核心恐慌模式。

只有在針對子系統啟用核心傾印的情況下，才會在子系統崩潰時建立 devcoredump `/sys/class/devcoredump/devcdN/data` 節點。若要啟用核心傾印，請執行 `echo enabled > /sys/kernel/debug/remoteproc/remoteprocN/coredump` 命令。`devcdN/data` 節點屬於暫時性，逾時後會被移除。若要對問題進行除錯，請使用 `copy` 命令將 `devcdN/data` 節點複製到本機裝置以安全使用。在 `base/devcoredump.c` 中定義刪除逾時。

以下是複製核心傾印的範例命令：

# Copy Core dump to a local device
      cp /sys/class/devcoredump/devcdN/data > /var/spool/crash/dump_file.elf
    #
    # N represents the index of core dump. It is incremented each time a new core dump is generated.
    Copy to clipboard

若要將核心傾印檔案傳輸至主機裝置並對問題進行除錯，請使用 Qualcomm Crash Analysis Portal (QCAP)。

備註

欲深入瞭解 QCAP，請參閱 [使用 QCAP 剖析 RAM 傾印](https://docs.qualcomm.com/bundle/resource/topics/80-70020-12A/debugging_linux_kernel.html#parse_ram_dumps_using_qcap)。

## 在 DT 中配置 remoteproc 節點和韌體載入

使用 DT 繫結在各個裝置樹檔案中配置 remoteproc 裝置。組態包含相容的裝置名稱、記憶體區域、中斷設定和時脈參考，根據 DT 繫結，位於 `Documentation/devicetree/bindings/remoteproc/` 目錄中。

以下範例呈現 `arch/arm64/boot/dts/qcom/qcs6490.dtsi` 檔案中的 QCS6490 aDSP remoteproc 裝置樹組態：

remoteproc_adsp: remoteproc@3000000 {
              compatible = "qcom,sc7280-adsp-pas";
              reg = <0x0 0x03000000 0x0 0x100>;
    
              interrupts-extended = <&pdc 6 IRQ_TYPE_EDGE_RISING>,
                                      <&adsp_smp2p_in 0 IRQ_TYPE_EDGE_RISING>,
                                      <&adsp_smp2p_in 1 IRQ_TYPE_EDGE_RISING>,
                                      <&adsp_smp2p_in 2 IRQ_TYPE_EDGE_RISING>,
                                      <&adsp_smp2p_in 3 IRQ_TYPE_EDGE_RISING>,
                                      <&adsp_smp2p_in 7 IRQ_TYPE_EDGE_RISING>;
              interrupt-names = "wdog", "fatal", "ready", "handover",
                              "stop-ack", "shutdown-ack";
    
              clocks = <&rpmhcc RPMH_CXO_CLK>;
              clock-names = "xo";
              <snip>
     };
    Copy to clipboard

檢查 `arch/arm64/boot/dts/qcom/sa8775p.dtsi` 路徑中的 IQ-9075 裝置樹組態檔。

備註

若要取得所有 Qualcomm SoC 的裝置樹組態檔，請參閱對應的平台 DTSI 檔案。

所有韌體檔案都位於 `rootfs` 中的 `/lib/firmware` 目錄中，在對應的機板裝置樹 `arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts` 檔案中進行相關配置。關於其他 Qualcomm 硬體 SoC，請參考 `arch/arm64/boot/dts/qcom/<SoC>-<board>.dts` 檔案。

以下範例呈現 remoteproc DT 組態：

&remoteproc_adsp {
    firmware-name = "qcom/qcs6490/adsp.mdt";
    status = "okay";
    };
    Copy to clipboard

### Remoteproc 參考紀錄

remoteproc 啟動成功時，會顯示以下紀錄：

**
    \# remoteproc success**
    "remoteproc remoteproc1: remote processor 4080000.remoteproc is now up"
    Copy to clipboard

remoteproc 韌體載入失敗時，會顯示以下紀錄：

**
    \# remoteproc failure**
    Error log: "remoteproc remoteproc0: Direct firmware load for qcom/qcs6490/modem.mdt failed with error -2"
    
    # Caused by: error loading firmware.
    # Solution: ensure that the modem firmware is copied to /lib/firmware/qcom/qcs6490 in rootfs.
    Copy to clipboard

Last Published: Jan 01, 2026

[Previous Topic
開發核心](https://docs.qualcomm.com/bundle/publicresource/80-70020-3TC/topics/kernel-development.md) [Next Topic
配置和管理記憶體](https://docs.qualcomm.com/bundle/publicresource/80-70020-3TC/topics/memory.md)