ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

08_实验七_F-3去掉ADC功能

08_实验七_F-3去掉ADC功能 实验七 F-3 去掉 ADC 功能——关掉 DK1 的开机电流检测对应课件《第3章 移植U-Boot》3.5 节Slide 66-68系列说明本系列基于华清远见 FS-MP1ASTM32MP157A开发板对应课件《第3章 移植U-Boot》。本文覆盖 Slide 66-68是驱动修复系列F-1~F-6的第三站F-3。前置实验六F-2已完成——basic 版 U-Boot 首次完整启动已停在STM32MP命令行但启动日志里还挂着 ADC 相关报错。一、先看病根DK1 靠 ADC 检测开机电流实验六的实测日志里Err: serial之后跟着这几条报错stm32 vrefbuf timed out: -110 adc0: cant enable vdd-supply!board_check_usb_power: single shot failed for adc0[18]!adc0:与board_check_usb_power:两条挤在一行与实验五 SPL 阶段的现象同类是串口原样输出。课件 Slide 66 给出病因以下错误提示是由于dk1开发板会通过ADC检测开机电流而FS-MP1A开发板无此功能在u-boot配置中去掉ADC功能即可按如下路径去掉[ ]的*号把这条电路拆开看DK1 板上有一套开机电流检测设计——vrefbuf参考电压缓冲器给 ADC 提供基准电压adc0是 ADC 本体U-Boot 启动收尾时执行board_check_usb_power()用 ADC 做一次single shot单次采样来测开机电流判断电源是否带得动整板。FS-MP1A 没有这条电路于是供基准 → 开 ADC → 采样步步报错-110-ETIMEDOUT超时图课件 Slide 66——串口报错截图stm32 vrefbuf timed out: -110、adc0: cant enable vdd-supply!board_check_usb_power: single shot failed for adc0[18]!、Net:等。病因是 DK1 通过 ADC 检测开机电流而 FS-MP1A 无此功能需在 u-boot 配置中去掉 ADC 功能。修法这次不动设备树改配置——menuconfig 里关掉两个开关Command line interface → Device access commands → adc命令行里的adc命令配置项CONFIG_CMD_ADCDevice Drivers → Enable ADC drivers using Driver ModelADC 驱动本体配置项CONFIG_ADC。为什么是两个adc命令只是命令行入口它依赖 ADC 驱动把驱动关掉U-Boot 里就不存在 ADC 设备board_check_usb_power()那条检测链整个不再执行。两个一起关才算去掉 ADC 功能。二、实验环境实际项目实际值虚拟机同实验一VMware Ubuntu 20.044GB 内存源码目录~/Desktop/LINUX-gy/Test2/stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24/sources/arm-ostl-linux-gnueabi/u-boot-stm32mp-2020.01-r0/u-boot-stm32mp-2020.01分支WORKING工具链/opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24每个新终端都要重新激活source /stm32envecho $CC确认要修改的内容.configmenuconfig 关两个 ADC 开关→ 收尾同步进configs/stm32mp15_fsmp1a_basic_defconfig串口MobaXterm Serial 会话COM11115200同实验一SD 卡/dev/sdb实验四已分好区本实验只需重烧三个镜像三、课件 ↔ 步骤对应表课件 Slide内容对应步骤66F-3 总述ADC 报错病因与去掉 ADC 功能的思路本文第一节 步骤 267menuconfig 路径一Command line interface → Device access commands去掉adc行的*步骤 368menuconfig 路径二Device Drivers去掉Enable ADC drivers using Driver Model行的*步骤 3—沿用实验六 Slide 64 的流程重新编译、烧写、上电验证步骤 4~6四、实验步骤步骤 1激活工具链进入源码目录cd~/Desktop/LINUX-gy/Test2/stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24/sources/arm-ostl-linux-gnueabi/u-boot-stm32mp-2020.01-r0/u-boot-stm32mp-2020.01# /stm32env 实验一步骤 6 建好的软链接指向工具链的 environment-setup 脚本source/stm32envecho$CC# 输出 arm-ostl-linux-gnueabi-gcc ... 才算激活成功步骤 2确认当前配置里 ADC 是开着的Slide 66grep-E^CONFIG_(CMD_)?ADCy.config预期输出恰好两行CONFIG_ADCy CONFIG_CMD_ADCy两行都在说明现在的镜像带着完整的 ADC 功能——正是启动报错的来源。接下来用 menuconfig 把它们关掉。步骤 3menuconfig 关掉两个 ADC 开关Slide 67-68makemenuconfig按课件给的两条路径逐个走。图课件 Slide 67——去掉 ADC 功能的两条菜单路径总览Command line interface --- → Device access commands --- → [ ] adc - Access Analog to Digital Converters info and data以及Device Drivers --- → [ ] Enable ADC drivers using Driver Model。两项都要去掉*。路径一关掉adc命令Slide 67主菜单 →Command line interface ---→Device access commands ---找到这一行[*] adc - Access Analog to Digital Converters info and data光标移上去按空格[*]变成[ ]。menuconfig 小技巧任何界面按/可按关键字搜索配置项结果里直接给出该项所在的菜单路径——在两条路径之间迷路时用它跳转最省事。路径一在 menuconfig 里的实际界面课件截图图课件 Slide 67——Device access commands子菜单高亮行[ ] adc - Access Analog to Digital Converters info and data已去掉*同屏的armflash、bcd、bind/unbind、clk、demo、dfu、dm、fastboot、fdcboot等其余命令保持原样不要动。路径二关掉 ADC 驱动Slide 68连按两次Esc或选Exit回到主菜单 →Device Drivers ---找到这一行[*] Enable ADC drivers using Driver Model同样按空格去掉*。注意它正下方还有 Exynos / Sandbox / Meson / Rockchip 等一堆别的 ADC 驱动——它们本来就是[ ]未选中状态不用动课件截图里也在同一屏看清高亮行再按键。图课件 Slide 68——Device Drivers子菜单[ ] Enable ADC drivers using Driver Model高亮此行不要选中去掉[ ]中的*号其下的Enable Exynos 54xx ADC driver、Enable Sandbox ADC test driver、Enable Amlogic Meson SARADC driver、Enable Rockchip SARADC driver本就是未选中状态不用动。最后一路Exit退出弹出Do you wish to save your new configuration?时选Yes——不保存等于白改。改完自检grep-E^# CONFIG_(CMD_)?ADC is not set.config# 预期恰好两行grep-E^CONFIG_(CMD_)?ADCy.config# 预期无输出实际执行结果图menuconfig 改完保存后的自检实测——grep -E ^# CONFIG_(CMD_)?ADC is not set .config恰好两行CONFIG_CMD_ADC与CONFIG_ADC均已 not setgrep -E ^CONFIG_(CMD_)?ADCy .config无输出。步骤 4重新编译沿用实验六流程make-j2allDEVICE_TREEstm32mp157a-fsmp1a这次关掉的是 C 代码级的驱动比实验六只重编设备树要重编、重链的东西多一些但仍几分钟内完成照样以MKIMAGE spl/u-boot-spl.stm32收尾。实际执行结果编译收尾输出见下一步骤截图顶部MKIMAGE spl/u-boot-spl.stm32→COPY→CFGCHK u-boot.cfg。步骤 5烧写 SD 卡沿用实验六流程lsblk# 先确认 SD 卡仍是 /dev/sdbsudoddifu-boot-spl.stm32of/dev/sdb1convfdatasyncsudoddifu-boot-spl.stm32of/dev/sdb2convfdatasyncsudoddifu-boot.imgof/dev/sdb3convfdatasync配置开关是编进镜像里的SPL 和 U-Boot 本体的二进制都变了三条照旧全烧。实际执行结果图重新编译与烧写实测——编译以MKIMAGE spl/u-boot-spl.stm32、COPY、CFGCHK u-boot.cfg收尾截图顶部lsblk确认 SD 卡仍是/dev/sdbsdb1~sdb5 齐全三条 dd 分别写入 sdb1、sdb2各 98921 字节与 sdb3全部成功。步骤 6上电验证板子断电 → 插卡 → 拨码101→ 上电看 MobaXterm 串口。这一站的里程碑实验六日志里的三条 ADC 报错stm32 vrefbuf timed out/adc0: cant enable vdd-supply!/single shot failed消失其余行为不变——仍停在STM32MP命令行。对照点看什么达标判据Err: serial与Net:之间stm32 vrefbuf timed out、adc0: cant enable vdd-supply!、single shot failed不再出现——原来占着这里的三行报错没了命令行仍停在STM32MP命令可用——去掉 ADC 没有影响其他功能实际执行结果2026-09-18 实测U-Boot SPL 2020.01-stm32mp-r1-g8de188df (Sep 18 2026 - 17:04:58 0800) Model: STMicroelectronics STM32MP157A-DK1 Discovery Board RAM: DDR3-DDR3L 16bits 533000Khz WDT: Started with servicing (32s timeout) Trying to boot from MMC1 U-Boot 2020.01-stm32mp-r1-g8de188df (Sep 18 2026 - 17:04:58 0800) CPU: STM32MP157AAA Rev.Z Model: STMicroelectronics STM32MP157A-DK1 Discovery Board Board: stm32mp1 in basic mode (st,stm32mp157a-dk1) DRAM: 512 MiB Clocks: - MPU : 650 MHz - MCU : 208.878 MHz - AXI : 266.500 MHz - PER : 24 MHz - DDR : 533 MHz WDT: Started with servicing (32s timeout) NAND: 0 MiB MMC: STM32 SD/MMC: 0 Loading Environment from MMC... OK In: serial Out: serial Err: serial Net: eth0: ethernet5800a000 Hit any key to stop autoboot: 0 EQOS_DMA_MODE_SWR stuckFAILED: -110EQOS_DMA_MODE_SWR stuckFAILED: -110Wrong Image Format for bootm command ERROR: cant get kernel image! STM32MP怎么解读这份输出看到什么说明什么Err: serial之后直接就是Net:原来挤在中间的三条 ADC 报错全部消失F-3 达标。连stm32 vrefbuf timed out也没了——vrefbuf 给 ADC 供基准电压ADC 驱动一关供基准 → 开 ADC → 采样整条检测链不再执行版本串g8de188df后面没有-dirty后缀.config是不入库的构建产物被.gitignore忽略改 menuconfig 不会弄脏工作区这个哈希正是实验六收尾时 F-2 的提交——顺带证明那步提交已完成EQOS_DMA_MODE_SWR stuck×2、Wrong Image Format for bootm command照旧网卡F-5 对象与卡上还没有内核的报错不归 F-3 管与实验六完全一致停在STM32MP去掉 ADC 没有影响其他功能命令行照常可用图上电实测动图——从 SPL 到 U-Boot 本体的启动全程不再出现vrefbuf/adc0报错Err: serial之后直接Net:autoboot 尝试失败后停在STM32MP命令行。图串口完整启动日志截图2026-09-18 17:04 构建的镜像版本串g8de188df无-dirty与上文实测记录一致。步骤 7收尾——defconfig 同步 git 提交这次动过 menuconfig按 F-1 定下的规矩.config的改动必须固化回 defconfig否则下次make stm32mp15_fsmp1a_basic_defconfig会把这次的成果冲掉cp.config configs/stm32mp15_fsmp1a_basic_defconfiggitstatus# 应只有 1 个文件被修改configs/stm32mp15_fsmp1a_basic_defconfiggitadd-Agitcommit-mF-3: 去掉 ADC 功能关闭 CMD_ADC 与 DM ADC实际执行结果2026-09-18 补记cp与提交均已完成——这步当时没单独截图完成与否由下一次构建的版本串反证实验八F-4上电日志里 SPL 与 U-Boot 的版本串为2020.01-stm32mp-r1-g1ac3a506-dirty其中哈希g1ac3a506正是本次提交入库后的 HEAD提交前 HEAD 是 F-2 的g8de188df实验七 17:04 构建的版本串可证-dirty后缀则是彼时工作区里 F-4 的设备树改动。版本串的哈希接力——实验四g3f0216e7初始 7 条提交→ 实验六g2224655fF-1→ 实验七g8de188dfF-2→ 实验八g1ac3a506F-3——就是每次验证通过即提交留下的收条。五、注意事项只关两个开关Device access commands里的adc、Device Drivers里的Enable ADC drivers using Driver Model。其余 ADC 驱动Exynos/Sandbox/Meson/Rockchip本来就未选中不要顺手清理。两个开关缺一不可adc命令依赖 ADC 驱动只关驱动menuconfig 会因依赖关系连命令一并隐藏但显式把两个都确认一遍最稳。退出必须保存menuconfig 退出时的保存确认框选Yes不保存的退出等于什么都没做。defconfig 必须同步改过 menuconfig 就要cp .config configs/...F-1 规矩提交里应只有 defconfig 一个文件。三条镜像照旧全烧配置开关编进了 SPL 与 U-Boot 本体只烧 sdb3 不够。成功标准是ADC 报错消失 命令行还在网卡EQOS报错与 bootm 找不到内核的报错不在本站范围。六、怎么验证 F-3 改对了第一层源码自检半分钟grep-E^# CONFIG_(CMD_)?ADC is not set.config# 期望恰好两行grepADC configs/stm32mp15_fsmp1a_basic_defconfig# 步骤 7 之后执行期望两行均为 # ... is not set第二层编译通过开关关闭后drivers/adc/与cmd/adc.c不再参与编译若误关了别的依赖项Kconfig 或编译阶段会报错——此时先把两个 ADC 开关恢复用git diff configs/stm32mp15_fsmp1a_basic_defconfig查出多关了什么。第三层上电实测唯一能证明真的生效判据三条同时成立才算达标stm32 vrefbuf timed out、adc0: cant enable vdd-supply!、single shot failed不再出现U-Boot 横幅与Board: stm32mp1 in basic mode (...)照常出现停在STM32MP命令可用。不达标时的排查顺序现象先查什么ADC 三条报错原样还在两个开关真的关了吗grep .config退出 menuconfig 时保存了吗镜像重新编译、三条 dd 重新烧写了吗串口版本串的时间戳变没变编译报错 / 配置跑偏是否误关了别的项——git diff configs/stm32mp15_fsmp1a_basic_defconfig看 defconfig 里除了 ADC 还变了什么串口完全没有输出回到实验四步骤 8 的排查供电、拨码、串口最后一道验证提交本身git show --stat HEAD复核本次应只有 1 个文件configs/stm32mp15_fsmp1a_basic_defconfig。多出别的文件说明有顺手改动混进来了。七、实验完成标志.config与configs/stm32mp15_fsmp1a_basic_defconfig中CONFIG_ADC、CONFIG_CMD_ADC均为 not set重新编译成功三个镜像已重新烧写到 sdb1 / sdb2 / sdb3串口不再出现stm32 vrefbuf timed out、adc0: cant enable vdd-supply!、single shot failed串口仍停在STM32MP命令行已完成 defconfig 同步与 git 提交仅 1 个文件八、下一步ADC 这条电路从启动日志里清掉了下一处碍眼的是显示DK1 的屏幕在 U-Boot 阶段由LTDC 显示控制器LCD-TFT display controller驱动FS-MP1A 的屏与 DK1 接法不同目前无法正常显示——而 U-Boot 阶段根本用不着屏幕课件的办法是直接关闭 LTDC设备树一处status改动。请看《实验八 F-4 关闭 LTDC 显示》。
返回列表