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

Yocto在Banana Pi M2 Zero启动挂起的调试问询

Yocto Mickledore构建Banana Pi M2 Zero镜像卡Runlevel 5问题排查

环境与问题现象

基于Yocto Mickledore分支(所有Layer同步此分支)构建MACHINE="bananapi-m2-zero"的core-image-minimal镜像,烧录SD卡后设备能启动,但卡在Runlevel 5阶段,最终输出停留在:

[    4.571532] udevd[130]: starting eudev-3.2.11
[    5.077202] EXT4-fs (mmcblk0p2): re-mounted. Quota mode: disabled.
INIT: Entering runlevel: 5
Configuring network interfaces... ip: SIOCGIFFLAGS: No such device
Starting syslogd/klogd: done

使用的Layer列表:

BBLAYERS ?= " \
  /home/magnus/poky/meta \
  /home/magnus/poky/meta-poky \
  /home/magnus/poky/meta-yocto-bsp \
  /home/magnus/poky/meta-openembedded/meta-oe \
  /home/magnus/poky/meta-openembedded/meta-python \
  /home/magnus/poky/meta-sunxi \
  "

已做过的尝试:

  • 把日志输出到SD卡而非ramdisk,没拿到新信息;
  • 在initscript里后台加了循环输出脚本,只打了4次"Hello World"就停了。

问题1:最佳调试策略

  • 开启init调试日志:修改/etc/inittab或在Yocto配置中添加INIT_DEBUG参数,让init输出每一步执行细节,定位卡住的脚本/进程。
  • 逐个禁用rc5启动项:将/etc/rc5.d/下的非必要启动链接重命名(比如加.bak后缀),逐个排查,找出导致挂起的脚本。
  • 用strace追踪init进程:如果能通过串口attach到PID 1(init进程),执行strace -p 1,查看系统调用的阻塞点,直接定位卡住的操作。
  • 简化镜像构建:先构建仅包含必要Layer的基础core-image-minimal,再逐步添加其他Layer,排查是否是某个Layer的包引发冲突。
  • 检查硬件驱动兼容性:查看meta-sunxi Mickledore分支的commit记录,确认Banana Pi M2 Zero的外设(如网卡、存储)驱动是否存在已知的启动阻塞问题。

问题2:修改inittab仅保留串口控制台

  1. 找到镜像中的/etc/inittab(或Yocto Layer里的模板文件),仅保留以下关键行,注释或删除其他Runlevel相关启动项:
    # Banana Pi M2 Zero串口控制台(通常为ttyS0,波特率115200)
    ttyS0::respawn:/sbin/getty -L ttyS0 115200 vt100
    # 基础系统初始化
    si::sysinit:/etc/init.d/rcS
    
  2. 注释所有l5:开头的Runlevel 5启动行,比如:
    # l5:5:wait:/etc/init.d/rc 5
    
  3. 确保没有其他会阻塞的启动脚本被调用,仅保留串口getty和基础系统初始化流程。
  4. 要么重新构建镜像,要么直接挂载SD卡修改/etc/inittab,烧录后启动即可进入串口控制台,之后再逐步恢复rc5.d中的脚本排查问题。

问题3:判断是initscript挂起还是其他原因

  • 查看init进程状态:如果能进入串口或通过JTAG连接系统,执行ps aux查看PID 1的状态——若为D(不可中断睡眠),说明卡在IO操作或系统调用;若为R,可能在循环等待某个条件。
  • 给init发送SIGUSR1信号:传统sysvinit支持kill -USR1 1,执行后init会将当前正在运行的脚本/进程信息输出到控制台,直接定位卡住的位置。
  • 检查系统日志:执行dmesg查看内核日志,或cat /var/log/messages(若日志已写入),排查是否存在进程崩溃、资源耗尽的信息。
  • 单用户模式测试基础功能:启动时进入单用户模式,执行ls、ps等基础命令,验证用户空间核心功能是否正常,排除基础库损坏的可能。
  • 内核状态验证:拔出SD卡时内核有报错,说明内核仍在运行,问题大概率出在用户空间的init脚本或某个启动进程,而非内核挂起。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 03:23:18