You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Yocto Poky修改BeagleBone Black设备树启用UART4致内核启动卡死

问题描述
  • 学习Yocto使用过程中,以BeagleBone Black为硬件平台构建定制内核,目标是为Poky参考发行版的现有设备树打补丁,启用GPIO排针引出的UART4端口。
  • 经排查确认需要修改的设备树文件为am335x-bone-common.dtsi和am33xx-l4.dtsi,在自定义layer中添加的补丁内容如下:
diff --git a/orig/am335x-bone-common.dtsi b/altered/am335x-bone-common.dtsi
index 0ccdc7c..8a2541c 100644
--- a/arch/arm/boot/dts/am335x-bone-common.dtsi
+++ b/arch/arm/boot/dts/am335x-bone-common.dtsi
@@ -95,6 +95,14 @@
                        AM33XX_PADCONF(AM335X_PIN_UART0_TXD, PIN_OUTPUT_PULLDOWN, MUX_MODE0)
                >;
        };
+       
+       uart4_pins: pinmux_uart4_pins {
+               pinctrl-single,pins = <
+                       AM33XX_PADCONF(AM335X_PIN_GPMC_WAIT0, PIN_INPUT_PULLUP, MUX_MODE6)
+                       AM33XX_PADCONF(AM335X_PIN_GPMC_WPN, PIN_OUTPUT_PULLDOWN, MUX_MODE6)
+               >;
+       };
+

        clkout2_pin: pinmux_clkout2_pin {
                pinctrl-single,pins = <
@@ -191,6 +199,13 @@
        status = "okay";
};

+&uart4 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&uart4_pins>;
+
+       status = "okay";
+};
+
&usb0 {
        dr_mode = "peripheral";
        interrupts-extended = <&intc 18 &tps 0>;
diff --git a/orig/am33xx-l4.dtsi b/altered/am33xx-l4.dtsi
index c9629cb..637a1a7 100644
--- a/arch/arm/boot/dts/am33xx-l4.dtsi
+++ b/arch/arm/boot/dts/am33xx-l4.dtsi
@@ -1802,7 +1802,7 @@
                                clock-frequency = <48000000>;
                                reg = <0x0 0x1000>;
                                interrupts = <45>;
-                               status = "disabled";
+                               status = "okay";
                        };
                };
  • 内核构建完成后,生成的.dtb文件已包含上述修改,但通过SD卡启动系统时,BeagleBone Black卡在如下启动阶段:
Starting kernel ...
排查与解决思路
  • 优先排查引脚复用冲突
    你选用的AM335X_PIN_GPMC_WAIT0、AM335X_PIN_GPMC_WPN默认属于GPMC总线引脚,如果当前设备树中启用了GPMC总线挂载的NAND Flash、外接存储等设备,这两个引脚会被优先占用,设备树解析阶段触发资源冲突直接导致内核卡死。先检查同dtsi文件中GPMC节点的引脚配置,若存在引脚占用,要么关闭不需要的GPMC外设,要么更换UART4对应的其他复用引脚。
  • 补全UART4的时钟与电源域配置
    你仅在am33xx-l4.dtsi中把UART4的状态改为okay,但AM335x的UART4默认属于PER电源域,默认配置下时钟门控是关闭的,直接启用会因为访问外设寄存器时总线报错卡死。可以对照已正常启用的UART0/UART1节点配置,补全UART4对应的时钟引用、电源域关联配置。另外不建议直接修改soc通用的am33xx-l4.dtsi文件,所有板级外设的启用操作都放在板级dtsi文件的&uart4节点中完成即可,避免影响所有复用这个通用dtsi的板型配置。
  • 开启早期控制台抓具体报错
    卡在Starting kernel ...阶段看不到报错,是因为标准控制台还没完成初始化。可以在U-Boot启动倒计时阶段打断启动流程,给bootargs追加earlycon参数,把内核早期启动日志输出到默认的UART0调试串口,就能直接看到设备树解析、外设初始化阶段的具体panic原因,不用盲查配置。
  • 核对硬件连接与引脚电气配置
    对照AM335x技术手册确认,你选的两个引脚MUX模式6对应UART4 RX/TX的配置是正确的,RX引脚上拉、TX引脚下拉的配置也符合规范,但如果这两个排针上接了外部外设,拉了异常电平,也可能导致UART初始化时挂死,可以先拔掉排针上所有外接外设再测试启动。

内容的提问来源于stack exchange,提问作者Vasanth Sadhasivan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 09:33:30