jetson-customize-fan
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseModify nvfancontrol Fan Profile (BSP-side)
修改nvfancontrol风扇配置文件(BSP侧)
Purpose
目的
Edit the per-board nvfancontrol configuration so the device boots
with the desired fan curve / control mode / governor / default
profile. BSP-side only — all writes land in the overlay tracker,
the upstream copy is read-only.
bsp_imageThis skill handles BSP-side edits to the per-board nvfancontrol configuration file: adding profiles, removing profiles, editing the temp → PWM / RPM curves, changing the boot default profile / control mode / governor, and listing defined profiles. Applies on Jetson / Tegra platforms (T234 Orin, T264 Thor).
编辑每个板卡的nvfancontrol配置,使设备启动时使用所需的风扇曲线/控制模式/调控器/默认配置文件。仅限BSP侧操作——所有写入操作都记录在覆盖跟踪器中,上游的副本为只读状态。
bsp_image本技能负责处理BSP侧对板卡专属nvfancontrol配置文件的编辑操作:添加配置文件、删除配置文件、编辑温度→PWM/RPM曲线、更改启动默认配置文件/控制模式/调控器,以及列出已定义的配置文件。适用于Jetson/Tegra平台(T234 Orin、T264 Thor)。
File format (canonical, per the BSP file header)
文件格式(标准格式,来自BSP文件头部)
POLLING_INTERVAL <seconds>
<FAN <index>>
TMARGIN <ENABLED|DISABLED>
FAN_GOVERNOR <type> {
STEP_SIZE <int>
}
FAN_CONTROL <close_loop|open_loop> {
RPM_TOLERANCE <rpm>
}
FAN_PROFILE <name> {
# TEMP HYST PWM RPM
<T0> <H0> <P0> <R0>
...
}
FAN_PROFILE <name> { ... } # one or more profiles
THERMAL_GROUP <id> {
GROUP_MAX_TEMP <C>
# zone-name <coeffs csv> <max-temp>
<zone> <coeffs> <max-temp>
...
}
FAN_DEFAULT_CONTROL <close_loop|open_loop>
FAN_DEFAULT_PROFILE <name>
FAN_DEFAULT_GOVERNOR <type>
KICKSTART_PWM <0..255>Rules:
- Profile curve tuples are 4-column: . Sort points by ascending
TEMP HYST PWM RPM; the daemon interpolates between them.TEMP - is
PWM(8-bit duty cycle);0..255is the close-loop target speed. A trailingRPMrow at the high end pins the fan off above0 0.GROUP_MAX_TEMP - is hysteresis (°C) at that point — the controller waits
HYSTdegrees of cooling before stepping the curve down.HYST - must reference an existing
FAN_DEFAULT_PROFILEblock in the sameFAN_PROFILE. nvfancontrol fails to start if the default names a missing profile.<FAN N> - =
FAN_DEFAULT_CONTROL(drives toward target RPM, requires tach) orclose_loop(writes PWM directly).open_loop - =
FAN_DEFAULT_GOVERNOR(continuous interpolation) and other family-specific values; copy verbatim from existing per-board files when introducing one.cont - maps thermal zones to the controller's input. Coefficients are a 20-element CSV — copy verbatim from existing entries; values vary by chip family and zone.
THERMAL_GROUP - is one block per fan index (typical:
<FAN N>). Block boundaries<FAN 1>and<...>are strict; preserve indentation matching neighboring lines.{...} - Curves are characterised, not invented. Add or edit curves from real thermal-acoustic data for the platform; do not interpolate from neighbouring profiles or copy across chip families.
POLLING_INTERVAL <seconds>
<FAN <index>>
TMARGIN <ENABLED|DISABLED>
FAN_GOVERNOR <type> {
STEP_SIZE <int>
}
FAN_CONTROL <close_loop|open_loop> {
RPM_TOLERANCE <rpm>
}
FAN_PROFILE <name> {
# TEMP HYST PWM RPM
<T0> <H0> <P0> <R0>
...
}
FAN_PROFILE <name> { ... } # 一个或多个配置文件
THERMAL_GROUP <id> {
GROUP_MAX_TEMP <C>
# zone-name <coeffs csv> <max-temp>
<zone> <coeffs> <max-temp>
...
}
FAN_DEFAULT_CONTROL <close_loop|open_loop>
FAN_DEFAULT_PROFILE <name>
FAN_DEFAULT_GOVERNOR <type>
KICKSTART_PWM <0..255>规则:
- 配置曲线元组为4列:。按
TEMP HYST PWM RPM升序排列数据点;守护进程会在这些点之间进行插值计算。TEMP - 取值范围为
PWM(8位占空比);**0..255**是闭环控制的目标转速。在高温端添加一行RPM可使风扇在超过0 0时停止运转。GROUP_MAX_TEMP - ****是该点的滞后值(°C)——控制器会等待温度降低
HYST摄氏度后,才会降低风扇转速。HYST - ****必须引用同一
FAN_DEFAULT_PROFILE块中已存在的<FAN N>块。如果默认配置文件名称指向不存在的配置,nvfancontrol将无法启动。FAN_PROFILE - ****可选值为
FAN_DEFAULT_CONTROL(向目标转速调整,需要转速计)或close_loop(直接写入PWM值)。open_loop - ****可选值包括
FAN_DEFAULT_GOVERNOR(连续插值)以及其他平台专属值;修改时请直接复制现有板卡文件中的值。cont - ****将热区映射到控制器的输入。系数为20元素的CSV——直接复制现有条目即可;数值因芯片系列和热区而异。
THERMAL_GROUP - ****对应每个风扇索引的配置块(通常为
<FAN N>)。块边界<FAN 1>和<...>格式严格;请保持与相邻行一致的缩进。{...} - 曲线需基于实测数据,而非凭空生成。添加或编辑曲线时,请使用平台实际的热声学数据;请勿从相邻配置文件插值或跨芯片系列复制曲线。
Prerequisites
前提条件
Resolve the active profile per
.
Refuse and route in these cases:
../../context/target-platform-contract.md| Condition | Refuse with |
|---|---|
No active profile, or | Route to |
Profile lacks | Route to |
| Route to |
| Route to |
Resolve paths:
- from
<bsp_image.root_path>if present, elsebsp_image.root_path:.<workspace>/Image - from
<source.root_path>if present, elsesource.root_path:.<workspace>/Source
<bsp_image.root_path><source.root_path>../../context/bsp-customization-workflow.md#workflow-invariants/jetson-promote-image根据确定当前激活的配置文件。在以下情况下拒绝操作并引导至对应流程:
../../context/target-platform-contract.md| 条件 | 拒绝提示并引导至 |
|---|---|
无激活配置文件,或 | 引导至 |
配置文件缺少 | 引导至 |
| 引导至 |
| 引导至 |
解析路径:
- :若存在
<bsp_image.root_path>则使用该值,否则使用bsp_image.root_path:。<workspace>/Image - :若存在
<source.root_path>则使用该值,否则使用source.root_path:。<workspace>/Source
<bsp_image.root_path><source.root_path>../../context/bsp-customization-workflow.md#workflow-invariants/jetson-promote-imageThe per-board file
板卡专属文件
The conf this skill edits has the relative path:
Linux_for_Tegra/rootfs/etc/nvpower/nvfancontrol/nvfancontrol_<active-sku>.confIt lives in two roots; the skill walks both:
| Role | Location | Skill writes? |
|---|---|---|
| Detection + pristine source | | no — read-only |
| Overlay edit target + git commit | | yes |
Subsequent sections refer to the per-board file to mean the overlay copy
under . Operations 1–4 all read, edit, and save against
that overlay copy. The copy is read once during the
"Resolving " detection step and once during the
Overlay edit recipe's
pristine-import step, then never touched again.
<source.root_path><bsp_image.root_path><active-sku>本技能编辑的配置文件相对路径为:
Linux_for_Tegra/rootfs/etc/nvpower/nvfancontrol/nvfancontrol_<active-sku>.conf该文件存在于两个根目录中;本技能会遍历这两个目录:
| 角色 | 位置 | 技能是否写入? |
|---|---|---|
| 检测+原始源文件 | | 否——只读 |
| 覆盖编辑目标+git提交 | | 是 |
后续章节中提到的板卡专属文件均指下的覆盖副本。操作1-4均针对该覆盖副本进行读取、编辑和保存。下的副本仅在"解析"检测步骤和覆盖编辑流程的原始导入步骤中读取一次,之后不再触碰。
<source.root_path><bsp_image.root_path><active-sku>Resolving <active-sku>
— which file to edit
<active-sku>解析<active-sku>
——确定要编辑的文件
<active-sku>Filename conventions vary per product family:
- — most Orin parts (e.g.
nvfancontrol_<module.id>_<module.sku>.conf,nvfancontrol_p3767_0000.conf).nvfancontrol_p3701_0008.conf - — Thor variants where the carrier disambiguates (e.g.
nvfancontrol_<module.id>_<module.sku>_<carrier.id>_<carrier.sku>.conf).nvfancontrol_p3834_0008_p4071_0000.conf - — IGX revision variants (e.g.
nvfancontrol_<carrier>_<sku>_<rev>.conf).nvfancontrol_p3740_0002_b01.conf
The nvfancontrol daemon resolves the right file at startup based on the booted hardware's DT compatible plus board IDs (no helper script — it's done inside the binary). To map BSP-side without a running target, against :
<bsp_image.root_path>- List .
<bsp_image.root_path>/Linux_for_Tegra/rootfs/etc/nvpower/nvfancontrol/ - Filter to filenames that contain from the active profile.
<module.id>_<module.sku> - If multiple candidates remain, refine with and (when relevant) the carrier revision tag.
<carrier.id>_<carrier.sku> - If still ambiguous, run the per-board flash conf dispatch chain to read the kernel DTB's and pick the file whose name aligns with the resolved board / carrier.
compatible - Verify the chosen file actually exists under .
<bsp_image.root_path>/Linux_for_Tegra/rootfs/etc/nvpower/nvfancontrol/
Don't blindly compose a filename — the naming convention varies by product family.
文件名规则因产品系列而异:
- ——大多数Orin型号(例如
nvfancontrol_<module.id>_<module.sku>.conf、nvfancontrol_p3767_0000.conf)。nvfancontrol_p3701_0008.conf - ——Thor变体(需要通过载板区分,例如
nvfancontrol_<module.id>_<module.sku>_<carrier.id>_<carrier.sku>.conf)。nvfancontrol_p3834_0008_p4071_0000.conf - ——IGX修订版变体(例如
nvfancontrol_<carrier>_<sku>_<rev>.conf)。nvfancontrol_p3740_0002_b01.conf
nvfancontrol守护进程在启动时会根据已启动硬件的DT兼容属性和板卡ID自动选择正确的文件(无辅助脚本——由二进制文件内部处理)。要在无运行目标的情况下在BSP侧映射文件,请针对执行以下步骤:
<bsp_image.root_path>- 列出下的文件。
<bsp_image.root_path>/Linux_for_Tegra/rootfs/etc/nvpower/nvfancontrol/ - 筛选包含激活配置文件中的文件名。
<module.id>_<module.sku> - 如果仍有多个候选文件,进一步通过和(如适用)载板修订标签进行筛选。
<carrier.id>_<carrier.sku> - 如果仍存在歧义,运行板卡专属闪存配置调度链读取内核DTB的属性,并选择名称与解析出的板卡/载板匹配的文件。
compatible - 验证所选文件确实存在于下。
<bsp_image.root_path>/Linux_for_Tegra/rootfs/etc/nvpower/nvfancontrol/
请勿盲目拼接文件名——命名规则因产品系列而异。
Propagation set — confs to keep in sync
同步集合——需要保持同步的配置文件
The active-SKU file is rarely the only conf that should carry a customization. After editing it, apply the same edit to every sibling in the propagation set so the change survives regardless of which module / baseboard SKU is booted:
- The reference platform's nvfancontrol conf — the upstream conf the active file was forked from (resolve via in the active profile, or
reference_devkitfork ancestry). For a BSP that contains only the reference (no derived carriers), this is the same file as the active and the rule reduces to a no-op.jetson-derive-carrier - Every carrier-derived nvfancontrol conf — each produced by
nvfancontrol_*.conffor a custom carrier on top of the same module SKU.jetson-derive-carrier
"Apply the same edit" ≠ blanket file copy. Port the changed / control lines into each sibling; preserve every other line. Sibling confs often hold carrier-specific deltas (different coefficients for a different thermal solution, different tach ceilings) that must stay intact — a blanket overwrite would mis-tune the fan on those carriers. Blanket-copying is safe only when both confs were byte-identical before the edit.
FAN_PROFILETHERMAL_GROUPRPM激活SKU的文件很少是唯一需要应用自定义的配置文件。编辑完成后,请对同步集合中的所有同级文件应用相同的编辑操作,确保无论启动哪个模块/基板SKU,更改都能生效:
- 参考平台的nvfancontrol配置文件——激活文件派生自的上游配置文件(通过激活配置文件中的或
reference_devkit派生谱系解析)。对于仅包含参考平台(无派生载板)的BSP,该文件与激活文件相同,此规则可简化为无操作。jetson-derive-carrier - 所有载板派生的nvfancontrol配置文件——每个由为同一模块SKU上的自定义载板生成的
jetson-derive-carrier文件。nvfancontrol_*.conf
"应用相同的编辑操作"≠全盘复制文件。仅将更改的/控制行移植到每个同级文件中;保留其他所有行。同级配置文件通常包含载板专属的差异(例如不同热解决方案的系数、不同的转速计上限),这些内容必须保持不变——全盘覆盖会导致这些载板上的风扇调优错误。只有在编辑前两个配置文件字节完全相同时,全盘复制才是安全的。
FAN_PROFILETHERMAL_GROUPRPMOverlay edit recipe (apply before any Operation)
覆盖编辑流程(所有操作前需执行)
Follow the canonical
Off-skill edits recipe
in the workflow doc — pristine import + customization commit pair, both
gated by the preview gate. Apply once per run, covering every per-board
file the run touches (the active conf plus every sibling in the
Propagation set).
Concrete substitutions for this skill:
- is
<rel>/<file>.rootfs/etc/nvpower/nvfancontrol/<conf> - Suggested pristine-import message:
, body
import pristine: <comma-separated rel paths of imported confs>.Source: <bsp_image.root_path>/Linux_for_Tegra/ (BSP <bsp_image.version>) - Suggested customization-commit header:
, body lines like
jetson-customize-fan: <summary>.nvfancontrol_p3767_0000.conf: added FAN_PROFILE static (open-loop, PWM=255 flat), FAN_DEFAULT_CONTROL close_loop -> open_loop, FAN_DEFAULT_PROFILE quiet -> static
遵循工作流文档中的标准离线编辑流程——原始导入+自定义提交配对,均受预览门控。每次运行执行一次,覆盖本次运行涉及的所有板卡专属文件(激活配置文件以及同步集合中的所有同级文件)。
针对本技能的具体替换项:
- 为
<rel>/<file>。rootfs/etc/nvpower/nvfancontrol/<conf> - 建议的原始导入提交信息:,正文为
import pristine: <逗号分隔的导入配置文件相对路径>。Source: <bsp_image.root_path>/Linux_for_Tegra/ (BSP <bsp_image.version>) - 建议的自定义提交标题:,正文格式示例为
jetson-customize-fan: <摘要>。nvfancontrol_p3767_0000.conf: added FAN_PROFILE static (open-loop, PWM=255 flat), FAN_DEFAULT_CONTROL close_loop -> open_loop, FAN_DEFAULT_PROFILE quiet -> static
Instructions
操作说明
Pick the operation that matches the user's intent and follow the
matching subsection. All write-side operations (1–4) must first
apply the Overlay edit recipe.
- Operation 1 — Add a new fan profile.
- Operation 2 — Remove a fan profile.
- Operation 3 — Edit an existing fan profile (curve, hysteresis).
- Operation 4 — Change the boot default (control / profile / governor).
- Operation 5 — List defined fan profiles (read-only).
After any write-side operation, run the Deploy chain ()
to land the change on the device.
## Deploy选择与用户意图匹配的操作,并遵循对应的子章节。所有写入类操作(1-4)必须先执行覆盖编辑流程。
- 操作1——添加新的风扇配置文件。
- 操作2——删除风扇配置文件。
- 操作3——编辑现有风扇配置文件(曲线、滞后值)。
- 操作4——更改启动默认项(控制模式/配置文件/调控器)。
- 操作5——列出已定义的风扇配置文件(只读)。
执行任何写入类操作后,运行部署链()将更改应用到设备上。
## 部署Examples
示例
Add an aggressive profile to a P3767-0000 (Orin Nano dev kit) target
and pin it as the boot default:
/jetson-customize-fan
> add a profile called "aggressive" with the curve {0:255, 40:150, 80:0}
> set FAN_DEFAULT_PROFILE to aggressiveSoften the fan ramp on the existing profile (raise HYST,
lower mid-PWM):
quiet/jetson-customize-fan
> edit FAN_PROFILE quiet — raise HYST to 5 from 30 °C up, drop PWM at 60 °C to 80List which profiles the active SKU currently defines and which is
the boot default:
/jetson-customize-fan
> list defined fan profiles为P3767-0000(Orin Nano开发套件)目标设备添加一个激进的配置文件,并将其设置为启动默认项:
/jetson-customize-fan
> add a profile called "aggressive" with the curve {0:255, 40:150, 80:0}
> set FAN_DEFAULT_PROFILE to aggressive柔化现有配置文件的风扇转速上升曲线(提高HYST值,降低中等温度下的PWM值):
quiet/jetson-customize-fan
> edit FAN_PROFILE quiet — raise HYST to 5 from 30 °C up, drop PWM at 60 °C to 80列出当前激活SKU已定义的配置文件以及启动默认项:
/jetson-customize-fan
> list defined fan profilesOperation 1 — Add a new fan profile
操作1——添加新的风扇配置文件
Apply the Overlay edit recipe first.
- In the per-board file, inside the block, add a new
<FAN N>between existing profiles. Daemon parse order doesn't matter, but grouping with siblings keeps the file scannable.FAN_PROFILE <name> { ... } - Pick lowercase, no whitespace (e.g.
<name>,quiet,cool).aggressive - Fill the curve table — 4-column tuples, ascending
TEMP HYST PWM RPM. End with at least one row aboveTEMPso behavior at over-temp is defined.GROUP_MAX_TEMP
Example skeleton:
FAN_PROFILE aggressive {
#TEMP HYST PWM RPM
0 0 255 6000
20 2 255 6000
40 2 150 3500
60 2 50 1500
80 0 0 0
105 0 0 0
}Validate (see Rules):
- Every lies within
TEMPof the0..GROUP_MAX_TEMP.THERMAL_GROUP - ∈
PWM;[0, 255]≤ the platform's tach-reported max (varies by fan part).RPM - Tuples are sorted ascending by .
TEMP
If you intend the new profile to be the boot default, follow Operation 4.
先执行覆盖编辑流程。
- 在板卡专属文件的块内,在现有配置文件之间添加一个新的
<FAN N>块。守护进程的解析顺序无关紧要,但与同级配置文件分组可提高文件可读性。FAN_PROFILE <name> { ... } - 使用小写字母,无空格(例如
<name>、quiet、cool)。aggressive - 填充曲线表——4列元组,按
TEMP HYST PWM RPM升序排列。至少添加一行超过TEMP的条目,以定义过热时的行为。GROUP_MAX_TEMP
示例框架:
FAN_PROFILE aggressive {
#TEMP HYST PWM RPM
0 0 255 6000
20 2 255 6000
40 2 150 3500
60 2 50 1500
80 0 0 0
105 0 0 0
}验证(遵循规则):
- 所有值均在
TEMP的THERMAL_GROUP范围内。0..GROUP_MAX_TEMP - ∈
PWM;[0, 255]≤平台转速计报告的最大值(因风扇型号而异)。RPM - 元组按升序排列。
TEMP
如果希望将新配置文件设为启动默认项,请执行操作4。
Operation 2 — Remove a fan profile
操作2——删除风扇配置文件
Apply the Overlay edit recipe first.
- In the per-board file, delete the entire block including all curve rows and the closing
FAN_PROFILE <name> { ... }.} - If the deleted matches the trailing
<name>, pointFAN_DEFAULT_PROFILEat a remaining profile — otherwise the daemon fails to start.FAN_DEFAULT_PROFILE - Search for hard-coded references in the rootfs before declaring the change safe:
bash
grep -rn "nvfancontrol.*profile\|FAN_PROFILE" \ Linux_for_Tegra/rootfs/etc 2>/dev/null
The remaining profiles do not need renaming.
先执行覆盖编辑流程。
- 在板卡专属文件中,删除整个块,包括所有曲线行和闭合的
FAN_PROFILE <name> { ... }。} - 如果删除的与
<name>的值匹配,请将FAN_DEFAULT_PROFILE指向剩余的某个配置文件——否则守护进程将无法启动。FAN_DEFAULT_PROFILE - 在rootfs中搜索硬编码引用,确认更改安全:
bash
grep -rn "nvfancontrol.*profile\|FAN_PROFILE" \ Linux_for_Tegra/rootfs/etc 2>/dev/null
剩余的配置文件无需重命名。
Operation 3 — Edit an existing fan profile
操作3——编辑现有风扇配置文件
Apply the Overlay edit recipe first.
- In the per-board file, modify the curve rows of the target . Keep the 4-column
FAN_PROFILE <name>shape.TEMP HYST PWM RPM - Maintain ascending ordering; insert or remove rows as needed.
TEMP - Adjust to tune anti-oscillation: too low → fan thrashes near a curve point; too high → fan lags reality.
HYST - Validate per Operation 1's rules.
Edits to , (inside ), or (inside ) sit outside the profiles but tune the same fan; same per-board file.
KICKSTART_PWMRPM_TOLERANCEFAN_CONTROLSTEP_SIZEFAN_GOVERNOR先执行覆盖编辑流程。
- 在板卡专属文件中,修改目标的曲线行。保持4列
FAN_PROFILE <name>的格式。TEMP HYST PWM RPM - 保持升序排列;根据需要插入或删除行。
TEMP - 调整值以优化防振荡效果:值过低→风扇在曲线点附近频繁启停;值过高→风扇转速调整滞后于实际温度变化。
HYST - 根据操作1的规则进行验证。
对、(位于块内)或(位于块内)的编辑不属于配置文件的一部分,但会调整同一风扇的参数;操作对象为同一板卡专属文件。
KICKSTART_PWMRPM_TOLERANCEFAN_CONTROLSTEP_SIZEFAN_GOVERNOROperation 4 — Change the boot default
操作4——更改启动默认项
Apply the Overlay edit recipe first.
Edit the trailing default lines inside the block:
<FAN N>FAN_DEFAULT_CONTROL <close_loop|open_loop>
FAN_DEFAULT_PROFILE <name>
FAN_DEFAULT_GOVERNOR <type>FAN_DEFAULT_PROFILEFAN_PROFILE<FAN N>FAN_DEFAULT_CONTROLFAN_DEFAULT_GOVERNOR先执行覆盖编辑流程。
编辑块末尾的默认行:
<FAN N>FAN_DEFAULT_CONTROL <close_loop|open_loop>
FAN_DEFAULT_PROFILE <name>
FAN_DEFAULT_GOVERNOR <type>FAN_DEFAULT_PROFILE<FAN N>FAN_PROFILEFAN_DEFAULT_CONTROLFAN_DEFAULT_GOVERNOROperation 5 — List defined fan profiles
操作5——列出已定义的风扇配置文件
This is a read-only operation; no overlay-tracker setup is needed. Run
against whichever copy you want to inspect (
for the pristine state, for the post-edit state):
<bsp_image.root_path>/...<source.root_path>/...bash
grep -E '^[[:space:]]*FAN_PROFILE ' <per-board file>
grep -E '^[[:space:]]*FAN_DEFAULT_' <per-board file>The first prints every profile name in the file; the second prints the boot defaults (control / profile / governor).
这是只读操作;无需设置覆盖跟踪器。可针对任意副本运行(为原始状态,为编辑后状态):
<bsp_image.root_path>/...<source.root_path>/...bash
grep -E '^[[:space:]]*FAN_PROFILE ' <per-board file>
grep -E '^[[:space:]]*FAN_DEFAULT_' <per-board file>第一条命令会打印文件中的所有配置文件名称;第二条命令会打印启动默认项(控制模式/配置文件/调控器)。
Limitations
限制
- BSP-side scope only — this skill never touches a running target's
directly. Live tuning requires reboot via Deploy, or the side-channel
/etc/nvpower/nvfancontrol/flow described inscp + systemctl restart.## Deploy - Edits land in the overlay copy under only; the
<source.root_path>copy is read-only and is rewritten by<bsp_image.root_path>. Hand-editing/jetson-promote-imageis silently lost on the nextbsp_imagere-extract./jetson-init-image - Curve tuples must reflect characterised thermal-acoustic data for the platform — this skill does not interpolate or copy curves across chip families.
- Propagation across sibling carriers (same module SKU) is partial
by design: only the changed / control lines are ported, never a blanket file overwrite, since sibling confs may hold carrier-specific
FAN_PROFILE/ RPM ceilings.THERMAL_GROUP - Curve point limits are family-specific; copy verbatim from existing
confs when introducing new coefficients or
THERMAL_GROUPvalues.FAN_DEFAULT_GOVERNOR
- 仅限BSP侧范围——本技能绝不会直接修改运行中目标设备的目录。实时调优需要通过部署流程重启设备,或使用
/etc/nvpower/nvfancontrol/中描述的## 部署旁路流程。scp + systemctl restart - 编辑操作仅会保存到下的覆盖副本中;
<source.root_path>下的副本为只读,会被<bsp_image.root_path>重写。手动编辑/jetson-promote-image会在下次bsp_image重新提取时无声丢失。/jetson-init-image - 曲线元组必须基于平台实测的热声学数据——本技能不会进行插值计算或跨芯片系列复制曲线。
- 向同级载板(同一模块SKU)同步更改时会进行部分同步:仅移植更改的/控制行,绝不会全盘覆盖文件,因为同级配置文件可能包含载板专属的
FAN_PROFILE/RPM上限。THERMAL_GROUP - 曲线点限制因产品系列而异;引入新的系数或
THERMAL_GROUP值时,请直接复制现有配置文件中的值。FAN_DEFAULT_GOVERNOR
Troubleshooting
故障排除
| Error | Cause | Solution |
|---|---|---|
| nvfancontrol.service fails to start after edit | | Set |
| Fan thrashes near a curve point | | Raise |
| Fan lags reality | | Lower |
| Fan never spins up at high temp | Curve missing a row above | Add a high-temp tuple with non-zero PWM/RPM; pin the over-temp row only above |
| Daemon parse error referencing column count | Curve row not 4-column | Restore 4-column shape; remove trailing whitespace and stray columns. |
| Target above tach-reported max, or | Lower |
Change vanished after | Edit landed in | Re-apply via the Overlay edit recipe so the change is committed in the overlay tracker. |
| Sibling carrier boots with wrong tach ceiling after propagation | Blanket file copy clobbered carrier-specific | Port only the changed lines per Propagation set; restore the carrier's original |
| 错误 | 原因 | 解决方案 |
|---|---|---|
| 编辑后nvfancontrol.service无法启动 | | 将 |
| 风扇在曲线点附近频繁启停 | | 提高受影响行的 |
| 风扇转速调整滞后于实际温度变化 | | 降低受影响行的 |
| 高温时风扇从未启动 | 曲线缺少超过 | 添加一个高温元组,设置非零的PWM/RPM值;仅在超过 |
| 守护进程解析错误,提及列数问题 | 曲线行不是4列的 | 恢复4列格式;删除尾随空格和多余列。 |
闭环模式下无法达到 | 目标值超过转速计报告的最大值,或 | 将 |
| 编辑操作写入了 | 通过覆盖编辑流程重新应用更改,确保更改提交到覆盖跟踪器中。 |
| 同步后同级载板启动时转速上限错误 | 全盘复制文件覆盖了载板专属的 | 根据同步集合仅移植更改的行;恢复载板原始的 |
Deploy
部署
The customization commit in the overlay tracker does not reach the device
on its own. The Deploy chain:
- — copies every tracked file in the overlay into
/jetson-promote-image. Diff-aware (skip byte-identical); uses<bsp_image.root_path>/Linux_for_Tegra/forsudo cp -pdestinations.rootfs/* - — flashes the updated
/jetson-flash-imageto the device.bsp_image - (Alternate, no flash) Copy directly to the running target's
<source.root_path>/Linux_for_Tegra/rootfs/etc/nvpower/nvfancontrol/<conf>, then/etc/nvpower/nvfancontrol/<conf>(or reboot).sudo systemctl restart nvfancontrol.service
Editing without committing — or editing
directly — does nothing for
and is silently lost on the next re-extract.
<source.root_path>/...<bsp_image.root_path>/.../jetson-promote-image/jetson-init-image覆盖跟踪器中的自定义提交不会自动同步到设备上。部署链流程如下:
- ——将覆盖跟踪器中的所有已跟踪文件复制到
/jetson-promote-image中。支持差异识别(跳过字节相同的文件);对<bsp_image.root_path>/Linux_for_Tegra/目标使用rootfs/*命令。sudo cp -p - ——将更新后的
/jetson-flash-image刷写到设备上。bsp_image - (替代方案,无需刷机)将直接复制到运行中目标设备的
<source.root_path>/Linux_for_Tegra/rootfs/etc/nvpower/nvfancontrol/<conf>,然后执行/etc/nvpower/nvfancontrol/<conf>(或重启设备)。sudo systemctl restart nvfancontrol.service
编辑但未提交——或直接编辑——不会对产生任何影响,并且会在下次重新提取时无声丢失。
<source.root_path>/...<bsp_image.root_path>/.../jetson-promote-image/jetson-init-image