zynq平台移植linaro遇到“Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(1,0)”的问题

linaro移植参考博文:  http://blog.csdn.net/yake827/article/details/52036703

 

        参考网上某博文上的方法在zynq平台移植了单用户模式的linaro系统(无桌面输出),但系统启动时出现了如题所示的问题,并且启动卡在了“---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(1,0)”这行打印处,仔细查看系统制作过程和网上方法完全相同,但系统终无法启动,纠结了一两天,重新编译了无数次内核和设备树,走了无数弯路之后终于查清问题所在,现将过程记录如下,以便日后参考。


        按照网上移植linaro的方法修改设备树启动参数,在arch/arm/boot/dts/zynq-zed.dtsi中将bootargs更改为:

 

bootargs ="console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk rootfstype=ext4rootwait devtmpfs.mount=0";  完成这一步之后,linux就应该会从SD卡的第二分区中挂载linaro根文件系统。但我按照此方法修改了zynq-zed.dtsi中的bootargs之后,出现了上述问题。

 

 

        仔细查看系统启动打印信息发现有“Kernel command line: root=/dev/ram rw earlyprintk”一行信息,这行信息是设备树传递给内核的启动参数,但实际上正确的输出应该是“Kernel command line: console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk rootfstype=ext4 rootwait”。因为移植的linaro(EXT4类型)系统是放在SD卡的第二分区EXT中,所以这里要让root=/dev/mmcblk0p2。内核启动时打印的信息是root=/dev/ram,说明设备树没有修改成功。 利用Source Insight在内核源码中查到 root=/dev/ram rw earlyprintk 出自zynq-zed.dts文件,既然启动参数在此文件中设置,那么修改根文件系统为从第二分区启动应该也是在此处修改。

      于是尝试将中zynq-zed.dts中的bootargs改为bootargs ="console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk rootfstype=ext4rootwait devtmpfs.mount=0",再次制作设备树,最终成功启动了linaro文件系统。而之前按照网上方法一直以为要修改的是zynq-zed.dtsi文件,所以未能成功。

        一点经验:制作设备树devicetree.dtb时直接依赖的文件应该是.dts,而不是XX.dtsi,XX.dtsi由其他文件引用(比如我所用的内核中zynq-zed.dtsi被zynq-zed-adv7511.dts引用)。   Linux系统启动时设备树将启动参数传递给内核,内核由此决定从SD卡哪个分区挂载根文件系统(当然,启动参数不仅决定了根文件系统的启动分区,还有一些其他信息)。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值