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

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

Remoteproc 框架分为两部分：

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

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

有关 Qualcomm Linux 用于管理其他核心的标准框架的更多信息，请参阅[远程处理器框架](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="9.03414in" height="6.6177in" viewbox="0 0 650.458 476.474" xml:space="preserve" color-interpolation-filters="sRGB" class="st19" aria-label="../_images/remoteproc-framework.svg"><v:documentproperties v:langid="1033" v:viewmarkup="false"></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: Microsoft YaHei UI; 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: Microsoft YaHei UI; font-size: 1.16666em }
.svg-1 .st10 { font-size: 1em }
.svg-1 .st11 { font-family: Microsoft YaHei UI; 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-80"); 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-80"); marker-start: url("#mrkr4-105"); 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-80" 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-105" 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">	<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>	<g id="shape1-1" v:mid="1" v:groupcontext="shape" transform="translate(1,-1)">		<title>Sheet.1</title>		<path d="M0 472.47 A4.00009 4.00009 -180 0 0 4 476.47 L644 476.47 A4.00009 4.00009 -180 0 0 648 472.47 L648 6 A4.00009					 4.00009 -180 0 0 644 2 L4 2 A4.00009 4.00009 -180 0 0 -0 6 L0 472.47 Z" class="st1"></path>	</g>	<g id="shape3-3" v:mid="3" v:groupcontext="shape" v:layermember="0" transform="translate(160.304,-70.1074)">		<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 476.47 L463.7 476.47 L463.7 281.1 L0 281.1 L0 476.47 Z" class="st2"></path>	</g>	<g id="shape4-5" v:mid="4" v:groupcontext="shape" v:layermember="0" transform="translate(56.4571,-403.884)">		<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 472.47 A4.00009 4.00009 -180 0 0 4 476.47 L143.23 476.47 A4.00009 4.00009 -180 0 0 147.23 472.47 L147.23					 433.88 A4.00009 4.00009 -180 0 0 143.23 429.88 L4 429.88 A4.00009 4.00009 -180 0 0 0 433.88 L0 472.47 Z" class="st3"></path>	</g>	<g id="shape5-7" v:mid="5" v:groupcontext="shape" v:layermember="0" transform="translate(306.742,-403.884)">		<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 472.47 A4.00009 4.00009 -180 0 0 4 476.47 L143.23 476.47 A4.00009 4.00009 -180 0 0 147.23 472.47 L147.23					 433.88 A4.00009 4.00009 -180 0 0 143.23 429.88 L4 429.88 A4.00009 4.00009 -180 0 0 0 433.88 L0 472.47 Z" class="st3"></path>	</g>	<g id="shape6-9" v:mid="6" v:groupcontext="shape" transform="translate(76.0868,-419.829)">		<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="469.675" width="107.98" height="13.5991"></v:textrect>		<rect x="0" y="462.875" width="107.966" height="13.5991" class="st4"></rect>		<text x="4.98" y="473.88" class="st5" v:langid="2052"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>用户空间客户端</text>		</g>	<g id="shape7-12" v:mid="7" v:groupcontext="shape" transform="translate(316.557,-417.342)">		<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="467.408" width="127.61" height="18.1322"></v:textrect>		<rect x="0" y="458.342" width="127.596" height="18.1322" class="st4"></rect>		<text x="28.8" y="471.61" class="st5" v:langid="2052"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>外设管理器</text>		</g>	<g id="shape8-15" v:mid="8" v:groupcontext="shape" v:layermember="0" transform="translate(19.4966,-321.585)">		<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 472.47 A4.00009 4.00009 -180 0 0 4 476.47 L236.83 476.47 A4.00009 4.00009 -180 0 0 240.83 472.47 L240.83					 439.26 A4.00009 4.00009 -180 0 0 236.83 435.26 L4 435.26 A4.00009 4.00009 -180 0 0 -0 439.26 L0 472.47 Z" class="st3"></path>	</g>	<g id="shape9-17" v:mid="9" v:groupcontext="shape" transform="translate(27.0387,-330.237)">		<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="465.141" width="225.76" height="22.6674"></v:textrect>		<rect x="0" y="453.807" width="225.747" height="22.6674" class="st4"></rect>		<text x="8.93" y="469.34" 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-20" v:mid="10" v:groupcontext="shape" v:layermember="1;2" transform="translate(2.4814,-342.194)">		<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 476.47 L17.02 476.47 L0 476.47 Z" class="st7"></path>		<path d="M0 476.47 L17.02 476.47" class="st8"></path>	</g>	<g id="shape11-23" v:mid="11" v:groupcontext="shape" v:layermember="1;2" transform="translate(261.563,-342.192) 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 476.47 L46.41 476.47 L0 476.47 Z" class="st7"></path>		<path d="M0 476.47 L46.41 476.47" class="st8"></path>	</g>	<g id="shape12-26" v:mid="12" v:groupcontext="shape" v:layermember="0" transform="translate(306.742,-321.465)">		<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 472.47 A4.00009 4.00009 -180 0 0 4 476.47 L143.23 476.47 A4.00009 4.00009 -180 0 0 147.23 472.47 L147.23					 439.26 A4.00009 4.00009 -180 0 0 143.23 435.26 L4 435.26 A4.00009 4.00009 -180 0 0 0 439.26 L0 472.47 Z" class="st3"></path>	</g>	<g id="shape13-28" v:mid="13" v:groupcontext="shape" v:layermember="1;2" transform="translate(455.968,-342.074)">		<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 476.47 L193.74 476.47 L0 476.47 Z" class="st7"></path>		<path d="M0 476.47 L193.74 476.47" class="st8"></path>	</g>	<g id="shape14-31" v:mid="14" v:groupcontext="shape" transform="translate(553.475,-346.261)">		<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="465.76" width="75.07" height="21.429"></v:textrect>		<rect x="0" y="455.045" width="75.0507" height="21.429" class="st4"></rect>		<text x="15.06" y="469.96" class="st9" v:langid="2052"><v:paragraph v:horizalign="2"></v:paragraph><v:tablist></v:tablist>用户空间</text>		</g>	<g id="shape15-34" v:mid="15" v:groupcontext="shape" transform="translate(311.352,-333.004)">		<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="467.408" width="137.72" height="18.1322"></v:textrect>		<rect x="0" y="458.342" width="137.708" height="18.1322" class="st4"></rect>		<text x="15.83" y="471.61" class="st6" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>/dev/remoteproc*</text>		</g>	<g id="shape16-37" v:mid="16" v:groupcontext="shape" transform="translate(580.026,-319.842)">		<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="467.408" width="48.52" height="18.1322"></v:textrect>		<rect x="0" y="458.342" width="48.5" height="18.1322" class="st4"></rect>		<text x="16.5" y="471.61" class="st9" v:langid="2052"><v:paragraph v:horizalign="2"></v:paragraph><v:tablist></v:tablist>内核</text>		</g>	<g id="shape17-40" v:mid="17" v:groupcontext="shape" v:layermember="0" transform="translate(174.169,-208.474)">		<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 472.47 A4.00009 4.00009 -180 0 0 4 476.47 L236.83 476.47 A4.00009 4.00009 -180 0 0 240.83 472.47 L240.83					 439.26 A4.00009 4.00009 -180 0 0 236.83 435.26 L4 435.26 A4.00009 4.00009 -180 0 0 0 439.26 L0 472.47 Z" class="st3"></path>	</g>	<g id="shape18-42" v:mid="18" v:groupcontext="shape" v:layermember="0" transform="translate(448.514,-208.474)">		<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 472.47 A4.00009 4.00009 -180 0 0 4 476.47 L155.49 476.47 A4.00009 4.00009 -180 0 0 159.49 472.47 L159.49					 439.26 A4.00009 4.00009 -180 0 0 155.49 435.26 L4 435.26 A4.00009 4.00009 -180 0 0 0 439.26 L0 472.47 Z" class="st3"></path>	</g>	<g id="shape19-44" v:mid="19" v:groupcontext="shape" v:layermember="0" transform="translate(449,-126.822)">		<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="455.87" width="159.5" height="41.2095"></v:textrect>		<path d="M0 472.47 A4.00009 4.00009 -180 0 0 4 476.47 L155.49 476.47 A4.00009 4.00009 -180 0 0 159.49 472.47 L159.49					 439.26 A4.00009 4.00009 -180 0 0 155.49 435.26 L4 435.26 A4.00009 4.00009 -180 0 0 0 439.26 L0 472.47 Z" class="st3"></path>		<text x="44.64" y="450.75" 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-49" v:mid="20" v:groupcontext="shape" v:layermember="0" transform="translate(179.077,-86.2295)">		<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 474.47 A2.00005 2.00005 -180 0 0 2 476.47 L231.98 476.47 A2.00005 2.00005 -180 0 0 233.98 474.47 L233.98					 396.67 A2.00005 2.00005 -180 0 0 231.98 394.67 L2 394.67 A2.00005 2.00005 -180 0 0 0 396.67 L0 474.47 Z" class="st12"></path>	</g>	<g id="shape21-51" v:mid="21" v:groupcontext="shape" v:layermember="0" transform="translate(184.975,-117.449)">		<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 474.47 A2.00005 2.00005 -180 0 0 2 476.47 L69.58 476.47 A2.00005 2.00005 -180 0 0 71.58 474.47 L71.58 433.95					 A2.00005 2.00005 -180 0 0 69.58 431.95 L2 431.95 A2.00005 2.00005 -180 0 0 0 433.95 L0 474.47 Z" class="st3"></path>	</g>	<g id="shape22-53" v:mid="22" v:groupcontext="shape" v:layermember="0" transform="translate(259,-117.449)">		<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 474.47 A2.00005 2.00005 -180 0 0 2 476.47 L51.4 476.47 A2.00005 2.00005 -180 0 0 53.4 474.47 L53.4 433.95					 A2.00005 2.00005 -180 0 0 51.4 431.95 L2 431.95 A2.00005 2.00005 -180 0 0 0 433.95 L0 474.47 Z" class="st3"></path>	</g>	<g id="shape23-55" v:mid="23" v:groupcontext="shape" v:layermember="0" transform="translate(314.693,-117.449)">		<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 474.47 A2.00005 2.00005 -180 0 0 2 476.47 L90.4 476.47 A2.00005 2.00005 -180 0 0 92.4 474.47 L92.4 433.95					 A2.00005 2.00005 -180 0 0 90.4 431.95 L2 431.95 A2.00005 2.00005 -180 0 0 -0 433.95 L0 474.47 Z" class="st3"></path>	</g>	<g id="shape24-57" v:mid="24" v:groupcontext="shape" transform="translate(192.752,-219.955)">		<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="467.408" width="205.01" height="18.1322"></v:textrect>		<rect x="0" y="458.342" width="204.991" height="18.1322" class="st4"></rect>		<text x="51.75" y="472.07" 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-61" v:mid="25" v:groupcontext="shape" transform="translate(465.554,-212.32)">		<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="459.715" width="127.61" height="33.5186"></v:textrect>		<rect x="0" y="442.956" width="127.596" height="33.5186" class="st4"></rect>		<text x="28.63" y="455.51" 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-65" v:mid="26" v:groupcontext="shape" transform="translate(191,-132.695)">		<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="469.128" width="58.16" height="14.6933"></v:textrect>		<rect x="0" y="461.781" width="58.1409" height="14.6933" class="st4"></rect>		<text x="7.47" y="473.33" class="st6" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>sysmon</text>		</g>	<g id="shape27-68" v:mid="27" v:groupcontext="shape" transform="translate(264.662,-132.695)">		<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="469.128" width="41.55" height="14.6933"></v:textrect>		<rect x="0" y="461.781" width="41.5357" height="14.6933" class="st4"></rect>		<text x="6.28" y="473.33" class="st6" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Glink</text>		</g>	<g id="shape28-71" v:mid="28" v:groupcontext="shape" transform="translate(321.454,-125.237)">		<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="461.67" width="78.97" height="29.6091"></v:textrect>		<rect x="0" y="446.865" width="78.9537" height="29.6091" class="st4"></rect>		<text x="13.66" y="466.33" 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-75" v:mid="29" v:groupcontext="shape" transform="translate(606.548,72.5906) rotate(90)">		<title>Sheet.29</title>		<path d="M0 476.47 L33.61 476.47 L33.61 476.47" class="st13"></path>	</g>	<g id="shape30-81" v:mid="30" v:groupcontext="shape" transform="translate(675.184,155.01) rotate(90)">		<title>Sheet.30</title>		<path d="M0 476.47 L64.24 476.47 L64.24 476.47" class="st13"></path>	</g>	<g id="shape31-86" v:mid="31" v:groupcontext="shape" transform="translate(856.832,72.5906) rotate(90)">		<title>Sheet.31</title>		<path d="M0 476.47 L33.61 476.47 L33.61 476.47" class="st13"></path>	</g>	<g id="shape32-91" v:mid="32" v:groupcontext="shape" transform="translate(856.832,155.01) rotate(90)">		<title>Sheet.32</title>		<path d="M0 476.47 L64.24 476.47 L64.24 476.47" class="st13"></path>	</g>	<g id="shape33-96" v:mid="33" v:groupcontext="shape" v:layermember="0" transform="translate(21,-208.474)">		<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="455.87" width="119.71" height="41.2095"></v:textrect>		<path d="M0 472.47 A4.00009 4.00009 -180 0 0 4 476.47 L115.7 476.47 A4.00009 4.00009 -180 0 0 119.7 472.47 L119.7 439.26					 A4.00009 4.00009 -180 0 0 115.7 435.26 L4 435.26 A4.00009 4.00009 -180 0 0 -0 439.26 L0 472.47 Z" class="st3"></path>		<text x="24.85" y="460.07" class="st5" v:langid="2052"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>内核客户端</text>		</g>	<g id="shape34-99" v:mid="34" v:groupcontext="shape" transform="translate(139.816,-229.082)">		<title>Sheet.34</title>		<path d="M0 476.47 L7.24 476.47 L7.6 476.47 L20.85 476.47 L26.08 476.47 L26.08 476.47" class="st15"></path>	</g>	<g id="shape35-107" v:mid="35" v:groupcontext="shape" transform="translate(771.062,268) rotate(90)">		<title>Sheet.35</title>		<path d="M0 476.47 L31.7 476.47 L31.7 476.47" class="st13"></path>	</g>	<g id="shape36-112" v:mid="36" v:groupcontext="shape" transform="translate(189.351,-91.8834)">		<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="466.679" width="216.02" height="19.591"></v:textrect>		<rect x="0" y="456.883" width="216" height="19.591" class="st4"></rect>		<text x="50.25" y="471.34" 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-116" v:mid="37" v:groupcontext="shape" transform="translate(415.7,-229.082)">		<title>Sheet.37</title>		<path d="M0 476.47 L7.24 476.47 L7.6 476.47 L23.62 476.47 L25.2 476.47 L25.2 476.47" class="st15"></path>	</g>	<g id="shape38-123" v:mid="38" v:groupcontext="shape" transform="translate(534.351,-14.4998)">		<title>Sheet.38</title>		<path d="M0 474.47 A2.00005 2.00005 -180 0 0 2 476.47 L17.5 476.47 A2.00005 2.00005 -180 0 0 19.5 474.47 L19.5 459.64					 A2.00005 2.00005 -180 0 0 17.5 457.64 L2 457.64 A2.00005 2.00005 -180 0 0 -0 459.64 L0 474.47 Z" class="st17"></path>	</g>	<g id="shape39-125" v:mid="39" v:groupcontext="shape" transform="translate(545.552,-14.9901)">		<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="467.549" width="78.46" height="17.85"></v:textrect>		<rect x="0" y="458.624" width="78.452" height="17.85" class="st18"></rect>		<text x="18.45" y="471.75" 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="10.6875in" height="1.21886in" viewbox="0 0 769.499 87.7579" xml:space="preserve" color-interpolation-filters="sRGB" class="st8" aria-label="../_images/Remoteproc-recovery.svg"><v:documentproperties v:langid="1033" v:viewmarkup="false"></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: Microsoft YaHei UI; 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">	<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(1.25,-1.25)" 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 83.76 A4.0001 4.0001 -180 0 0 4 87.76 L763 87.76 A4.0001 4.0001 -180 0 0 767 83.76 L767 6.5 A4.0001 4.0001						 -180 0 0 763 2.5 L4 2.5 A4.0001 4.0001 -180 0 0 -0 6.5 L0 83.76 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 87.76 L35.21 87.76 L35.21 87.76" 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 87.76 L34.44 87.76 L34.44 87.76" 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 87.76 L30.96 87.76 L30.96 87.76" 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.459497,-0.820729) 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 83.76 A4.0001 4.0001 -180 0 0 4 87.76 L152.98 87.76 A4.0001 4.0001 -180 0 0 156.98 83.76 L156.98								 29.47 A4.0001 4.0001 -180 0 0 152.98 25.47 L4 25.47 A4.0001 4.0001 -180 0 0 -0 29.47 L0 83.76								 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="68.6299" width="115.11" height="38.257"></v:textrect>					<path d="M0 83.76 A4.0001 4.0001 -180 0 0 4 87.76 L111.1 87.76 A4.0001 4.0001 -180 0 0 115.1 83.76 L115.1								 53.5 A4.0001 4.0001 -180 0 0 111.1 49.5 L4 49.5 A4.0001 4.0001 -180 0 0 0 53.5 L0 83.76 Z" class="st4"></path>					<text x="5.32" y="64.48" class="st5" v:langid="2052"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>启动 <tspan class="st6" v:langid="1033">remoteproc<v:lf></v:lf></tspan><tspan x="43.55" dy="1.204em" class="st7">实例</tspan></text>					</g>			</g>			<g id="group10-29" transform="translate(390.857,-5.68434E-14)" v:mid="10" v:groupcontext="group">				<title>Sheet.10</title>				<g id="shape11-30" v:mid="11" v:groupcontext="shape" transform="translate(0.459497,-0.820729) 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 83.76 A4.0001 4.0001 -180 0 0 4 87.76 L152.98 87.76 A4.0001 4.0001 -180 0 0 156.98 83.76 L156.98								 29.47 A4.0001 4.0001 -180 0 0 152.98 25.47 L4 25.47 A4.0001 4.0001 -180 0 0 -0 29.47 L0 83.76								 Z" class="st4"></path>				</g>				<g id="shape12-32" 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="77.2288" width="109.61" height="21.0581"></v:textrect>					<path d="M0 83.76 A4.0001 4.0001 -180 0 0 4 87.76 L105.6 87.76 A4.0001 4.0001 -180 0 0 109.6 83.76 L109.6								 70.7 A4.0001 4.0001 -180 0 0 105.6 66.7 L4 66.7 A4.0001 4.0001 -180 0 0 -0 70.7 L0 83.76 Z" class="st4"></path>					<text x="12.8" y="81.43" class="st5" v:langid="2052"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>重新加载固件</text>					</g>			</g>			<g id="group13-35" transform="translate(195.429,-5.68434E-14)" v:mid="13" v:groupcontext="group">				<title>Sheet.13</title>				<g id="shape14-36" v:mid="14" v:groupcontext="shape" transform="translate(0.459497,-0.820729) 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 83.76 A4.0001 4.0001 -180 0 0 4 87.76 L152.98 87.76 A4.0001 4.0001 -180 0 0 156.98 83.76 L156.98								 29.47 A4.0001 4.0001 -180 0 0 152.98 25.47 L4 25.47 A4.0001 4.0001 -180 0 0 -0 29.47 L0 83.76								 Z" class="st4"></path>				</g>				<g id="shape15-38" 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="68.6299" width="126.55" height="38.257"></v:textrect>					<path d="M0 83.76 A4.0001 4.0001 -180 0 0 4 87.76 L122.54 87.76 A4.0001 4.0001 -180 0 0 126.54 83.76 L126.54								 53.5 A4.0001 4.0001 -180 0 0 122.54 49.5 L4 49.5 A4.0001 4.0001 -180 0 0 0 53.5 L0 83.76 Z" class="st4"></path>					<text x="15.59" y="64.48" class="st5" v:langid="2052"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>调用 <tspan class="st6" v:langid="1033">coredump<v:lf></v:lf></tspan><tspan x="42.27" dy="1.204em" class="st7">生成器</tspan></text>					</g>			</g>			<g id="group16-43" v:mid="16" v:groupcontext="group">				<title>Sheet.16</title>				<g id="shape17-44" v:mid="17" v:groupcontext="shape" transform="translate(0.459497,-0.820729) 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 83.76 A4.0001 4.0001 -180 0 0 4 87.76 L152.98 87.76 A4.0001 4.0001 -180 0 0 156.98 83.76 L156.98								 29.47 A4.0001 4.0001 -180 0 0 152.98 25.47 L4 25.47 A4.0001 4.0001 -180 0 0 -0 29.47 L0 83.76								 Z" class="st4"></path>				</g>				<g id="shape18-46" 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="68.6299" width="115.11" height="38.257"></v:textrect>					<path d="M0 83.76 A4.0001 4.0001 -180 0 0 4 87.76 L111.1 87.76 A4.0001 4.0001 -180 0 0 115.1 83.76 L115.1								 53.5 A4.0001 4.0001 -180 0 0 111.1 49.5 L4 49.5 A4.0001 4.0001 -180 0 0 0 53.5 L0 83.76 Z" class="st4"></path>					<text x="5.32" y="64.48" class="st5" v:langid="2052"><v:paragraph v:horizalign="1" v:bulletsize="0.166667"></v:paragraph><v:tablist></v:tablist>停止 <tspan class="st6" v:langid="1033">remoteproc<v:lf></v:lf></tspan><tspan x="43.55" dy="1.204em" 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

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

当子系统崩溃时，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 禁用时，才会启用内核 panic 模式。

仅当为子系统启用了核心 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-70020-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: Jul 22, 2025

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