# 配置远程处理器 (remoteproc) 子系统

remoteproc 框架用于将固件加载到 Qualcomm 平台上的其他子系统中，例如音频数字信号处理器 (aDSP) 和计算数字信号处理器 (cDSP)。

Remoteproc 框架分为两部分：

- 核心框架：核心框架包含了共同的逻辑。核心框架用于加载固件并启动或停止远程处理器。
- Remoteproc 驱动程序：驱动程序包含管理相应核心的平台特定操作。Remoteproc 驱动程序向核心框架注册一个 remoteproc 实例和一组操作。

在非对称多处理 (ASMP) 配置中，SoC 上存在多个异构远程处理器。远程处理器运行不同的固件（或操作系统）实例。

有关 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、modem 外设子系统 (MPSS) 和无线处理器子系统 (WPSS) 等。基于 QCS6490 的电路板和 Dragonwing™ RB3 Gen 2 开发套件上支持的协处理器包括 aDSP、cDSP 和 WPSS。

Note

支持的远程处理器子系统列表取决于正在使用的 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.103 557.773" xml:space="preserve" color-interpolation-filters="sRGB" class="st19" aria-label="Qualcomm remoteproc 框架的表示。"><v:documentproperties v:langid="1033">	<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: #007884; stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-opacity: 0; stroke-width: 2 }
.svg-1 .st4 { fill: none; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-1 .st5 { fill: #ffffff; font-family: SimHei; font-size: 1.16666em }
.svg-1 .st6 { fill: #ffffff; font-family: Calibri; font-size: 1.16666em }
.svg-1 .st7 { fill: none }
.svg-1 .st8 { stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.5 }
.svg-1 .st9 { fill: #000000; font-family: SimHei; font-size: 1.16666em }
.svg-1 .st10 { font-size: 1em }
.svg-1 .st11 { font-family: SimHei; font-size: 1em }
.svg-1 .st12 { fill: none; stroke: #6280cc; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.5 }
.svg-1 .st13 { marker-end: url("#mrkr4-81"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-1 .st14 { fill: #000000; fill-opacity: 1; stroke: #000000; stroke-opacity: 1; stroke-width: 0.52631587886755 }
.svg-1 .st15 { marker-end: url("#mrkr4-81"); marker-start: url("#mrkr4-106"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-1 .st16 { fill: #000000; font-family: Calibri; font-size: 1.16666em }
.svg-1 .st17 { fill: #007884; stroke: #000000; stroke-opacity: 0; stroke-width: 2 }
.svg-1 .st18 { fill: none; stroke: none; stroke-width: 0.25 }
.svg-1 .st19 { 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-81" class="st14" v:arrowtype="4" v:arrowsize="1" v:setback="3.8" refx="-3.7999993545764" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend4" transform="scale(-1.8999996772882,-1.8999996772882) "></use>	</marker>	<marker id="mrkr4-106" class="st14" v:arrowtype="4" v:arrowsize="1" v:setback="0" refx="0" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend4" transform="scale(1.8999996772882) "></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="shape1-1" v:mid="1" v:groupcontext="shape" transform="translate(41.6487,-42.7626)">		<title>Sheet.1</title>		<path d="M0 553.77 A4.00009 4.00009 -180 0 0 4 557.77 L644 557.77 A4.00009 4.00009 -180 0 0 648 553.77 L648 87.3 A4.00009					 4.00009 -180 0 0 644 83.3 L4 83.3 A4.00009 4.00009 -180 0 0 -0 87.3 L0 553.77 Z" class="st1"></path>	</g>	<g id="group2-3" v:mid="2" v:groupcontext="group">		<title>Sheet.2</title>	</g>	<g id="shape3-4" v:mid="3" v:groupcontext="shape" v:layermember="0" transform="translate(200.953,-111.87)">		<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="shape4-6" v:mid="4" v:groupcontext="shape" v:layermember="0" transform="translate(97.1058,-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>		<path d="M0 553.77 A4.00009 4.00009 -180 0 0 4 557.77 L143.23 557.77 A4.00009 4.00009 -180 0 0 147.23 553.77 L147.23					 515.18 A4.00009 4.00009 -180 0 0 143.23 511.18 L4 511.18 A4.00009 4.00009 -180 0 0 0 515.18 L0 553.77 Z" class="st3"></path>	</g>	<g id="shape5-8" v:mid="5" v:groupcontext="shape" v:layermember="0" transform="translate(347.391,-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>		<path d="M0 553.77 A4.00009 4.00009 -180 0 0 4 557.77 L143.23 557.77 A4.00009 4.00009 -180 0 0 147.23 553.77 L147.23					 515.18 A4.00009 4.00009 -180 0 0 143.23 511.18 L4 511.18 A4.00009 4.00009 -180 0 0 0 515.18 L0 553.77 Z" class="st3"></path>	</g>	<g id="shape6-10" v:mid="6" v:groupcontext="shape" transform="translate(116.736,-461.592)">		<title>Sheet.6</title>		<desc>User space clients</desc>		<v:userdefs></v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="53.9825" cy="550.974" width="107.98" height="13.5991"></v:textrect>		<rect x="0" y="544.174" width="107.966" height="13.5991" class="st4"></rect>		<text x="4.98" y="555.17" class="st5" v:langid="2052"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>用户空间客户端</text>		</g>	<g id="shape7-13" v:mid="7" v:groupcontext="shape" transform="translate(357.206,-459.105)">		<title>Sheet.7</title>		<desc>Peripheral manager</desc>		<v:userdefs></v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="63.7976" cy="548.707" width="127.61" height="18.1322"></v:textrect>		<rect x="0" y="539.641" width="127.596" height="18.1322" class="st4"></rect>		<text x="28.8" y="552.91" class="st5" v:langid="2052"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>外设管理器</text>		</g>	<g id="shape8-16" v:mid="8" v:groupcontext="shape" v:layermember="0" transform="translate(60.1453,-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>		<path d="M0 553.77 A4.00009 4.00009 -180 0 0 4 557.77 L236.83 557.77 A4.00009 4.00009 -180 0 0 240.83 553.77 L240.83					 520.56 A4.00009 4.00009 -180 0 0 236.83 516.56 L4 516.56 A4.00009 4.00009 -180 0 0 -0 520.56 L0 553.77 Z" class="st3"></path>	</g>	<g id="shape9-18" v:mid="9" v:groupcontext="shape" transform="translate(67.6874,-372)">		<title>Sheet.9</title>		<desc>/sys/class/remoteproc/remoteproc*</desc>		<v:userdefs></v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="112.873" cy="546.44" width="225.76" height="22.6674"></v:textrect>		<rect x="0" y="535.106" width="225.747" height="22.6674" class="st4"></rect>		<text x="8.93" y="550.64" class="st6" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>/sys/class/remoteproc/remoteproc*</text>		</g>	<g id="shape10-21" v:mid="10" v:groupcontext="shape" v:layermember="1;2" transform="translate(43.1301,-383.956)">		<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 L0 557.77 Z" class="st7"></path>		<path d="M0 557.77 L17.02 557.77" class="st8"></path>	</g>	<g id="shape11-24" v:mid="11" v:groupcontext="shape" v:layermember="1;2" transform="translate(302.423,-383.954) 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 L0 557.77 Z" class="st7"></path>		<path d="M0 557.77 L46.41 557.77" class="st8"></path>	</g>	<g id="shape12-27" v:mid="12" v:groupcontext="shape" v:layermember="0" transform="translate(347.391,-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>		<path d="M0 553.77 A4.00009 4.00009 -180 0 0 4 557.77 L143.23 557.77 A4.00009 4.00009 -180 0 0 147.23 553.77 L147.23					 520.56 A4.00009 4.00009 -180 0 0 143.23 516.56 L4 516.56 A4.00009 4.00009 -180 0 0 0 520.56 L0 553.77 Z" class="st3"></path>	</g>	<g id="shape13-29" v:mid="13" v:groupcontext="shape" v:layermember="1;2" transform="translate(496.617,-383.836)">		<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 L0 557.77 Z" class="st7"></path>		<path d="M0 557.77 L193.74 557.77" class="st8"></path>	</g>	<g id="shape14-32" v:mid="14" v:groupcontext="shape" transform="translate(594.124,-388.023)">		<title>Sheet.14</title>		<desc>Userspace</desc>		<v:userdefs></v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="37.5249" cy="547.059" width="75.07" height="21.429"></v:textrect>		<rect x="0" y="536.344" width="75.0507" height="21.429" class="st4"></rect>		<text x="15.06" y="551.26" class="st9" v:langid="2052"><v:paragraph v:horizalign="2"></v:paragraph><v:tablist></v:tablist>用户空间</text>		</g>	<g id="shape15-35" v:mid="15" v:groupcontext="shape" transform="translate(352.001,-374.767)">		<title>Sheet.15</title>		<desc>/dev/remoteproc*</desc>		<v:userdefs></v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="68.8537" cy="548.707" width="137.72" height="18.1322"></v:textrect>		<rect x="0" y="539.641" width="137.708" height="18.1322" class="st4"></rect>		<text x="15.83" 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="shape16-38" v:mid="16" v:groupcontext="shape" transform="translate(620.675,-361.605)">		<title>Sheet.16</title>		<desc>Kernel</desc>		<v:userdefs></v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="24.2495" cy="548.707" width="48.52" height="18.1322"></v:textrect>		<rect x="0" y="539.641" width="48.5" height="18.1322" class="st4"></rect>		<text x="16.5" y="552.91" class="st9" v:langid="2052"><v:paragraph v:horizalign="2"></v:paragraph><v:tablist></v:tablist>内核</text>		</g>	<g id="shape17-41" v:mid="17" v:groupcontext="shape" v:layermember="0" transform="translate(214.818,-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>		<path d="M-0 553.77 A4.00009 4.00009 -180 0 0 4 557.77 L236.83 557.77 A4.00009 4.00009 -180 0 0 240.83 553.77 L240.83					 520.56 A4.00009 4.00009 -180 0 0 236.83 516.56 L4 516.56 A4.00009 4.00009 -180 0 0 0 520.56 L0 553.77 Z" class="st3"></path>	</g>	<g id="shape18-43" v:mid="18" v:groupcontext="shape" v:layermember="0" transform="translate(489.163,-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>		<path d="M0 553.77 A4.00009 4.00009 -180 0 0 4 557.77 L155.49 557.77 A4.00009 4.00009 -180 0 0 159.49 553.77 L159.49					 520.56 A4.00009 4.00009 -180 0 0 155.49 516.56 L4 516.56 A4.00009 4.00009 -180 0 0 0 520.56 L0 553.77 Z" class="st3"></path>	</g>	<g id="shape19-45" v:mid="19" v:groupcontext="shape" v:layermember="0" transform="translate(489.649,-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.7426" cy="537.169" width="159.5" height="41.2095"></v:textrect>		<path d="M0 553.77 A4.00009 4.00009 -180 0 0 4 557.77 L155.49 557.77 A4.00009 4.00009 -180 0 0 159.49 553.77 L159.49					 520.56 A4.00009 4.00009 -180 0 0 155.49 516.56 L4 516.56 A4.00009 4.00009 -180 0 0 0 520.56 L0 553.77 Z" class="st3"></path>		<text x="44.64" y="532.05" class="st6" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Mdt-loader/<v:lf></v:lf><tspan x="37.23" dy="1.298em" class="st10">SCM </tspan><tspan class="st11" v:langid="2052">驱动程序</tspan></text>		</g>	<g id="shape20-50" v:mid="20" v:groupcontext="shape" v:layermember="0" transform="translate(219.726,-127.992)">		<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>		<path d="M0 555.77 A2.00005 2.00005 -180 0 0 2 557.77 L231.98 557.77 A2.00005 2.00005 -180 0 0 233.98 555.77 L233.98					 477.97 A2.00005 2.00005 -180 0 0 231.98 475.97 L2 475.97 A2.00005 2.00005 -180 0 0 0 477.97 L0 555.77 Z" class="st12"></path>	</g>	<g id="shape21-52" v:mid="21" v:groupcontext="shape" v:layermember="0" transform="translate(225.624,-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>		<path d="M-0 555.77 A2.00005 2.00005 -180 0 0 2 557.77 L69.58 557.77 A2.00005 2.00005 -180 0 0 71.58 555.77 L71.58 515.25					 A2.00005 2.00005 -180 0 0 69.58 513.25 L2 513.25 A2.00005 2.00005 -180 0 0 0 515.25 L0 555.77 Z" class="st3"></path>	</g>	<g id="shape22-54" v:mid="22" v:groupcontext="shape" v:layermember="0" transform="translate(299.649,-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>		<path d="M0 555.77 A2.00005 2.00005 -180 0 0 2 557.77 L51.4 557.77 A2.00005 2.00005 -180 0 0 53.4 555.77 L53.4 515.25					 A2.00005 2.00005 -180 0 0 51.4 513.25 L2 513.25 A2.00005 2.00005 -180 0 0 0 515.25 L0 555.77 Z" class="st3"></path>	</g>	<g id="shape23-56" v:mid="23" v:groupcontext="shape" v:layermember="0" transform="translate(355.342,-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>		<path d="M0 555.77 A2.00005 2.00005 -180 0 0 2 557.77 L90.4 557.77 A2.00005 2.00005 -180 0 0 92.4 555.77 L92.4 515.25					 A2.00005 2.00005 -180 0 0 90.4 513.25 L2 513.25 A2.00005 2.00005 -180 0 0 -0 515.25 L0 555.77 Z" class="st3"></path>	</g>	<g id="shape24-58" v:mid="24" v:groupcontext="shape" transform="translate(233.401,-261.718)">		<title>Sheet.24</title>		<desc>Remoteproc core</desc>		<v:userdefs></v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="102.496" cy="548.707" width="205.01" height="18.1322"></v:textrect>		<rect x="0" y="539.641" width="204.991" height="18.1322" class="st4"></rect>		<text x="51.75" y="553.37" class="st6" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Remoteproc <tspan class="st11" v:langid="2052">核心</tspan></text>		</g>	<g id="shape25-62" v:mid="25" v:groupcontext="shape" transform="translate(506.203,-254.082)">		<title>Sheet.25</title>		<desc>Remoteproc platform device</desc>		<v:userdefs></v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="63.7976" cy="541.014" width="127.61" height="33.5186"></v:textrect>		<rect x="0" y="524.255" width="127.596" height="33.5186" class="st4"></rect>		<text x="28.63" y="536.81" class="st6" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Remoteproc<v:lf></v:lf><tspan x="35.8" dy="1.2em" class="st11" v:langid="2052">平台设备</tspan></text>		</g>	<g id="shape26-66" v:mid="26" v:groupcontext="shape" transform="translate(231.649,-174.458)">		<title>Sheet.26</title>		<desc>sysmon</desc>		<v:userdefs></v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="29.0699" cy="550.427" width="58.16" height="14.6933"></v:textrect>		<rect x="0" y="543.08" width="58.1409" height="14.6933" class="st4"></rect>		<text x="7.47" y="554.63" class="st6" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>sysmon</text>		</g>	<g id="shape27-69" v:mid="27" v:groupcontext="shape" transform="translate(305.311,-174.458)">		<title>Sheet.27</title>		<desc>Glink</desc>		<v:userdefs></v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="20.7673" cy="550.427" width="41.55" height="14.6933"></v:textrect>		<rect x="0" y="543.08" width="41.5357" height="14.6933" class="st4"></rect>		<text x="6.28" y="554.63" class="st6" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Glink</text>		</g>	<g id="shape28-72" v:mid="28" v:groupcontext="shape" transform="translate(362.103,-167)">		<title>Sheet.28</title>		<desc>SSR notification</desc>		<v:userdefs></v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="39.4763" cy="542.969" width="78.97" height="29.6091"></v:textrect>		<rect x="0" y="528.164" width="78.9537" height="29.6091" class="st4"></rect>		<text x="13.66" y="547.63" class="st6" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>SSR <tspan class="st11" v:langid="2052">通知</tspan></text>		</g>	<g id="shape29-76" v:mid="29" v:groupcontext="shape" transform="translate(728.496,112.127) rotate(90)">		<title>Sheet.29</title>		<path d="M0 557.77 L33.61 557.77 L33.61 557.77" class="st13"></path>	</g>	<g id="shape30-82" v:mid="30" v:groupcontext="shape" transform="translate(797.132,194.546) rotate(90)">		<title>Sheet.30</title>		<path d="M0 557.77 L64.24 557.77 L64.24 557.77" class="st13"></path>	</g>	<g id="shape31-87" v:mid="31" v:groupcontext="shape" transform="translate(978.78,112.127) rotate(90)">		<title>Sheet.31</title>		<path d="M0 557.77 L33.61 557.77 L33.61 557.77" class="st13"></path>	</g>	<g id="shape32-92" v:mid="32" v:groupcontext="shape" transform="translate(978.78,194.546) rotate(90)">		<title>Sheet.32</title>		<path d="M0 557.77 L64.24 557.77 L64.24 557.77" class="st13"></path>	</g>	<g id="shape33-97" v:mid="33" v:groupcontext="shape" v:layermember="0" transform="translate(61.6487,-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.8494" cy="537.169" width="119.71" height="41.2095"></v:textrect>		<path d="M0 553.77 A4.00009 4.00009 -180 0 0 4 557.77 L115.7 557.77 A4.00009 4.00009 -180 0 0 119.7 553.77 L119.7 520.56					 A4.00009 4.00009 -180 0 0 115.7 516.56 L4 516.56 A4.00009 4.00009 -180 0 0 -0 520.56 L0 553.77 Z" class="st3"></path>		<text x="24.85" y="541.37" class="st5" v:langid="2052"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>内核客户端</text>		</g>	<g id="shape34-100" v:mid="34" v:groupcontext="shape" transform="translate(180.465,-270.845)">		<title>Sheet.34</title>		<path d="M0 557.77 L7.24 557.77 L7.6 557.77 L20.85 557.77 L26.08 557.77 L26.08 557.77" class="st15"></path>	</g>	<g id="shape35-108" v:mid="35" v:groupcontext="shape" transform="translate(893.01,307.536) rotate(90)">		<title>Sheet.35</title>		<path d="M0 557.77 L31.7 557.77 L31.7 557.77" class="st13"></path>	</g>	<g id="shape36-113" v:mid="36" v:groupcontext="shape" transform="translate(230,-133.646)">		<title>Sheet.36</title>		<desc>Remoteproc subdevices</desc>		<v:userdefs></v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="107.999" cy="547.978" width="216.02" height="19.591"></v:textrect>		<rect x="0" y="538.182" width="216" height="19.591" class="st4"></rect>		<text x="50.25" y="552.64" class="st16" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Remoteproc <tspan class="st11" v:langid="2052">子设备</tspan></text>		</g>	<g id="shape37-117" v:mid="37" v:groupcontext="shape" transform="translate(456.349,-270.845)">		<title>Sheet.37</title>		<path d="M0 557.77 L7.24 557.77 L7.6 557.77 L23.62 557.77 L25.2 557.77 L25.2 557.77" class="st15"></path>	</g>	<g id="shape38-124" v:mid="38" v:groupcontext="shape" transform="translate(575,-56.2624)">		<title>Sheet.38</title>		<path d="M0 555.77 A2.00005 2.00005 -180 0 0 2 557.77 L17.5 557.77 A2.00005 2.00005 -180 0 0 19.5 555.77 L19.5 540.94					 A2.00005 2.00005 -180 0 0 17.5 538.94 L2 538.94 A2.00005 2.00005 -180 0 0 -0 540.94 L0 555.77 Z" class="st17"></path>	</g>	<g id="shape39-126" v:mid="39" v:groupcontext="shape" transform="translate(586.201,-56.7527)">		<title>Sheet.39</title>		<desc>Open source</desc>		<v:userdefs></v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="39.2256" cy="548.848" width="78.46" height="17.85"></v:textrect>		<rect x="0" y="539.923" width="78.452" height="17.85" class="st18"></rect>		<text x="18.45" y="553.05" class="st9" v:langid="2052"><v:paragraph v:horizalign="2"></v:paragraph><v:tablist></v:tablist>开源代码</text>		</g></g>
</svg>

**图：Remoteproc 支持**

## 配置 remoteproc 恢复和子系统重启

Remoteproc 子设备负责管理远程处理器子系统崩溃和恢复场景中的通信环境。

通信环境等实体必须确定远程处理器何时启动或关闭。每个子设备都有两个操作：

- `probe()`，在 remoteproc `start()` 之后调用
- `remove()`，在 `stop()` 之前调用

当远程处理器发生致命错误时，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 803.002 153.002" xml:space="preserve" color-interpolation-filters="sRGB" class="st8" aria-label="remoteproc 崩溃恢复的表示。"><v:documentproperties v:langid="1033">	<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.33156521850386 }
.svg-2 .st4 { fill: #6280cc; stroke: #c8c8c8; stroke-opacity: 0; stroke-width: 1.25 }
.svg-2 .st5 { fill: #ffffff; font-family: SimHei; font-size: 1.16666em }
.svg-2 .st6 { font-family: Roboto; font-size: 1em }
.svg-2 .st7 { font-size: 1em }
.svg-2 .st8 { 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.0319957835889" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend4" transform="scale(-3.0159978917945,-3.0159978917945) "></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.00001" v:shadowoffsety="-9.00001"></v:pageproperties>	<g id="group1-1" transform="translate(18.003,-32.1842)" v:mid="1" v:groupcontext="group">		<title>Sheet.1</title>		<g id="shape2-2" v:mid="2" v:groupcontext="shape">			<title>Rectangle</title>			<v:userdefs>				<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			</v:userdefs>			<path d="M0 149 A4.0001 4.0001 -180 0 0 4 153 L763 153 A4.0001 4.0001 -180 0 0 767 149 L767 71.74 A4.0001 4.0001						 -180 0 0 763 67.74 L4 67.74 A4.0001 4.0001 -180 0 0 -0 71.74 L0 149 Z" class="st1"></path>		</g>		<g id="group3-4" transform="translate(11.7053,-11.0733)" v:mid="3" v:groupcontext="group">			<title>Sheet.3</title>			<g id="shape4-5" v:mid="4" v:groupcontext="shape" transform="translate(152.789,-32.0846)">				<title>Sheet.4</title>				<path d="M0 153 L35.21 153 L35.21 153" class="st2"></path>			</g>			<g id="shape5-11" v:mid="5" v:groupcontext="shape" transform="translate(349.008,-32.0846)">				<title>Sheet.5</title>				<path d="M0 153 L34.44 153 L34.44 153" class="st2"></path>			</g>			<g id="shape6-16" v:mid="6" v:groupcontext="shape" transform="translate(547.984,-32.0846)">				<title>Sheet.6</title>				<path d="M0 153 L30.96 153 L30.96 153" class="st2"></path>			</g>			<g id="group7-21" transform="translate(586.287,-5.68434E-14)" v:mid="7" v:groupcontext="group">				<title>Sheet.7</title>				<g id="shape8-22" v:mid="8" v:groupcontext="shape" transform="translate(0.801114,-0.819835) rotate(0.3)">					<title>Rectangle.1012</title>					<v:userdefs>						<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>					</v:userdefs>					<path d="M0 149 A4.0001 4.0001 -180 0 0 4 153 L152.98 153 A4.0001 4.0001 -180 0 0 156.98 149 L156.98 94.71								 A4.0001 4.0001 -180 0 0 152.98 90.71 L4 90.71 A4.0001 4.0001 -180 0 0 -0 94.71 L0 149 Z" class="st4"></path>				</g>				<g id="shape9-24" v:mid="9" v:groupcontext="shape" transform="translate(21.1031,-12.9561)">					<title>Sheet.9</title>					<desc>Start remoteproc instance</desc>					<v:userdefs></v:userdefs>					<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>					<v:textrect cx="57.5466" cy="133.874" width="115.11" height="38.257"></v:textrect>					<path d="M0 149 A4.0001 4.0001 -180 0 0 4 153 L111.1 153 A4.0001 4.0001 -180 0 0 115.1 149 L115.1 118.75								 A4.0001 4.0001 -180 0 0 111.1 114.75 L4 114.75 A4.0001 4.0001 -180 0 0 0 118.75 L0 149 Z" class="st4"></path>					<text x="5.66" y="130.13" class="st5" v:langid="2052"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>启动<tspan class="st6"> </tspan><tspan class="st6" v:langid="1033">remoteproc<v:lf></v:lf></tspan><tspan x="43.55" dy="1.233em" class="st7">实例</tspan></text>					</g>			</g>			<g id="group10-30" transform="translate(390.857,-5.68434E-14)" v:mid="10" v:groupcontext="group">				<title>Sheet.10</title>				<g id="shape11-31" v:mid="11" v:groupcontext="shape" transform="translate(0.801114,-0.819835) rotate(0.3)">					<title>Rectangle.1006</title>					<v:userdefs>						<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>					</v:userdefs>					<path d="M0 149 A4.0001 4.0001 -180 0 0 4 153 L152.98 153 A4.0001 4.0001 -180 0 0 156.98 149 L156.98 94.71								 A4.0001 4.0001 -180 0 0 152.98 90.71 L4 90.71 A4.0001 4.0001 -180 0 0 -0 94.71 L0 149 Z" class="st4"></path>				</g>				<g id="shape12-33" v:mid="12" v:groupcontext="shape" transform="translate(23.852,-21.5556)">					<title>Sheet.12</title>					<desc>Reload firmware</desc>					<v:userdefs></v:userdefs>					<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>					<v:textrect cx="54.7977" cy="142.473" width="109.61" height="21.0581"></v:textrect>					<path d="M0 149 A4.0001 4.0001 -180 0 0 4 153 L105.6 153 A4.0001 4.0001 -180 0 0 109.6 149 L109.6 135.94								 A4.0001 4.0001 -180 0 0 105.6 131.94 L4 131.94 A4.0001 4.0001 -180 0 0 -0 135.94 L0 149 Z" class="st4"></path>					<text x="12.8" y="146.67" class="st5" v:langid="2052"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>重新加载固件</text>					</g>			</g>			<g id="group13-36" transform="translate(195.429,-5.68434E-14)" v:mid="13" v:groupcontext="group">				<title>Sheet.13</title>				<g id="shape14-37" v:mid="14" v:groupcontext="shape" transform="translate(0.801114,-0.819835) rotate(0.3)">					<title>Rectangle.1005</title>					<v:userdefs>						<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>					</v:userdefs>					<path d="M0 149 A4.0001 4.0001 -180 0 0 4 153 L152.98 153 A4.0001 4.0001 -180 0 0 156.98 149 L156.98 94.71								 A4.0001 4.0001 -180 0 0 152.98 90.71 L4 90.71 A4.0001 4.0001 -180 0 0 -0 94.71 L0 149 Z" class="st4"></path>				</g>				<g id="shape15-39" v:mid="15" v:groupcontext="shape" transform="translate(16.3706,-12.9561)">					<title>Sheet.15</title>					<desc>Invoke coredump generator</desc>					<v:userdefs></v:userdefs>					<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>					<v:textrect cx="63.2662" cy="133.874" width="126.55" height="38.257"></v:textrect>					<path d="M0 149 A4.0001 4.0001 -180 0 0 4 153 L122.54 153 A4.0001 4.0001 -180 0 0 126.54 149 L126.54 118.75								 A4.0001 4.0001 -180 0 0 122.54 114.75 L4 114.75 A4.0001 4.0001 -180 0 0 0 118.75 L0 149 Z" class="st4"></path>					<text x="15.93" y="130.13" class="st5" v:langid="2052"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>调用<tspan class="st6"> </tspan><tspan class="st6" v:langid="1033">coredump<v:lf></v:lf></tspan><tspan x="42.27" dy="1.233em" class="st7">生成器</tspan></text>					</g>			</g>			<g id="group16-45" v:mid="16" v:groupcontext="group">				<title>Sheet.16</title>				<g id="shape17-46" v:mid="17" v:groupcontext="shape" transform="translate(0.801114,-0.819835) rotate(0.3)">					<title>Rectangle.1001</title>					<v:userdefs>						<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>					</v:userdefs>					<path d="M0 149 A4.0001 4.0001 -180 0 0 4 153 L152.98 153 A4.0001 4.0001 -180 0 0 156.98 149 L156.98 94.71								 A4.0001 4.0001 -180 0 0 152.98 90.71 L4 90.71 A4.0001 4.0001 -180 0 0 -0 94.71 L0 149 Z" class="st4"></path>				</g>				<g id="shape18-48" v:mid="18" v:groupcontext="shape" transform="translate(21.1031,-12.9561)">					<title>Sheet.18</title>					<desc>Stop remoteproc instance</desc>					<v:userdefs></v:userdefs>					<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>					<v:textrect cx="57.5466" cy="133.874" width="115.11" height="38.257"></v:textrect>					<path d="M0 149 A4.0001 4.0001 -180 0 0 4 153 L111.1 153 A4.0001 4.0001 -180 0 0 115.1 149 L115.1 118.75								 A4.0001 4.0001 -180 0 0 111.1 114.75 L4 114.75 A4.0001 4.0001 -180 0 0 0 118.75 L0 149 Z" class="st4"></path>					<text x="5.66" y="130.13" class="st5" v:langid="2052"><v:paragraph v:horizalign="1" v:bulletsize="0.166667"></v:paragraph><v:tablist></v:tablist>停止<tspan class="st6"> </tspan><tspan class="st6" v:langid="1033">remoteproc<v:lf></v:lf></tspan><tspan x="43.55" dy="1.233em" class="st7">实例</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

## 启用或禁用核心 dump

支持远程处理器核心 dump，可利用 Qualcomm Linux 内核 devcoredump 功能调试子系统崩溃问题。

当子系统崩溃时，devcoredump 会将正在恢复的 remoteproc 的内存拍照呈现在 `/sys/class/devcoredump/devcdN/data` 节点中，同时将相关的崩溃 `uevent` 发送到用户空间。读取 sysfs 节点时，sysfs 会通过 ELF 容器提供内存段；对该节点进行写入操作时，会释放相关资源并销毁 devcoredump 实例。

已呈现 debugfs 节点，可从用户空间启用和禁用核心 dump。

# 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

Note

Qualcomm SoC 在 remoteproc 崩溃（远程处理器上的致命错误）时会触发内核 panic，以便收集完整的 RAM dump 文件，用于进行崩溃分析。仅当核心 dump 禁用时，才会启用内核异常模式。

仅当为子系统启用核心 dump 时，才会在子系统崩溃时创建 devcoredump `/sys/class/devcoredump/devcdN/data` 节点。要启用核心 dump，请运行 `echo enabled > /sys/kernel/debug/remoteproc/remoteprocN/coredump` 命令。`devcdN/data` 节点是临时的，超时后会被删除。要调试问题，请使用 `copy` 命令将 `devcdN/data` 节点复制到本地设备以便安全使用。删除超时在 `base/devcoredump.c` 中定义。

以下是复制核心 dump 的示例命令：

# 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

要将核心 dump 文件传输到主机设备并调试问题，请使用 Qualcomm Crash Analysis Portal (QCAP)。

Note

有关 QCAP 的更多信息，请参阅 [Parse RAM dumps using QCAP](https://docs.qualcomm.com/bundle/resource/topics/80-70022-12A/debugging_linux_kernel.html#parse_ram_dumps_using_qcap)。

## 在 DT 中配置 remoteproc 节点和固件加载

Remoteproc 设备使用 DT 绑定在相应的设备树文件中进行配置。根据 `Documentation/devicetree/bindings/remoteproc/` 目录中的 DT 绑定，该配置包括兼容的设备名称、内存区域、中断设置和时钟参考。

以下示例显示了 `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 设备树配置文件。

Note

要获取所有 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: Nov 04, 2025

[Previous Topic
开发内核](https://docs.qualcomm.com/bundle/publicresource/80-70022-3SC/topics/kernel-development.md) [Next Topic
配置和管理内存](https://docs.qualcomm.com/bundle/publicresource/80-70022-3SC/topics/memory.md)