KARO TX6S-8035嵌入式Linux启动Kernel panic问题求助
解决KARO TX6S-8035 Kernel panic: Requested init /linuxrc failed (error -2)问题
这个错误(error -2对应ENOENT,也就是文件不存在)通常是根文件系统挂载异常,或者系统找不到指定的初始化脚本导致的,我帮你梳理几个排查和解决方向:
1. 先检查U-Boot环境变量的bootargs配置
首先看你printenv输出里的bootargs参数,这是决定系统挂载哪个根文件系统的关键:
- 确认
root=指定的分区是否正确,KARO TX6S的eMMC通常第一分区是boot分区,第二分区是根文件系统,对应路径是/dev/mmcblk0p2,如果写的是mmcblk1或者错误的分区号,肯定找不到根fs里的/linuxrc。 - 一定要加上
rootwait参数,给eMMC足够的初始化时间,不然可能在设备就绪前就尝试挂载,导致失败。 - 还要确认文件系统类型是否和你YOCTO构建的一致,比如如果是ext4,bootargs里不用特意指定,但如果是其他类型可能需要加
rootfstype=xxx。
临时测试方法:在U-Boot命令行里修改bootargs试试:
setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk0p2 rootwait rw' saveenv boot
如果这样能正常启动,说明就是U-Boot的环境变量配置错了。
2. 验证YOCTO构建的根文件系统内容
如果U-Boot配置没问题,那大概率是根fs本身的问题:
- 在主机上挂载你的根fs镜像(比如
rootfs.ext4)检查:
如果找不到mkdir -p /tmp/rootfs sudo mount -o loop path/to/your/rootfs.ext4 /tmp/rootfs ls -l /tmp/rootfs/linuxrc/linuxrc,说明你的YOCTO构建没有生成这个初始化脚本——这通常是因为你用了systemd作为初始化系统,而不是传统的sysvinit/openrc。
解决办法:
- 要么在U-Boot的bootargs里指定systemd作为初始化程序:
setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk0p2 rootwait rw init=/usr/lib/systemd/systemd' - 要么修改YOCTO的
local.conf,切换到sysvinit:
然后重新构建根fs:DISTRO_FEATURES_remove = "systemd" VIRTUAL-RUNTIME_init_manager = "sysvinit"bitbake core-image-minimal,再烧录测试。
另外还要检查/linuxrc的权限,必须是可执行的(-rwxr-xr-x),如果权限不对,也会导致无法执行。
3. 检查Mfgtools的烧录配置
确认Mfgtools的烧录脚本是不是把根fs镜像烧到了正确的分区:
- 打开Mfgtools里的配置文件(比如
cfg.ini或者对应的xml配置),找到根fs的烧录命令,比如:
这里的[CMD] command=flash -raw2sparse partition:2 image:rootfs.ext4partition:2要和U-Boot bootargs里的root=/dev/mmcblk0p2对应,要是烧到了其他分区,系统自然找不到/linuxrc。
4. 从串口输出找更多线索
看你提供的串口输出,重点关注panic之前的日志:
- 有没有出现
VFS: Mounted root (ext4 filesystem) readonly on device xxx?如果没有,说明根fs挂载失败,回到第一步检查bootargs的root设备。 - 如果挂载成功了但还是报错,那就是根fs里确实没有
/linuxrc,或者权限异常,回到第二步处理。
内容的提问来源于stack exchange,提问作者vlad zouth
相关产品推荐
相关产品推荐

