刚学习使用hi3519av100开发板,编译rootfs时报错"Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(179,3)"。在网上查找了一堆文章,还是没有解决问题,最后自己解决。
分析根本原因在于uboot启动时的命令已经指定了EMMC内的mmcblk0p3分区,rootfstype=ext4,大小为300M(rootfs),见下面hi3519av开发板通过串口输出的启动记录:
“Kernel command line: mem=1024M console=ttyAMA0,115200 root=/dev/mmcblk0p3 rw rootfstype=ext4 blkdevparts=mmcblk0:1M(boot),4M(kernel),300M(rootfs),-(user)”
如果mmcblk0p3分区要挂载的rootfs系统文件(例如通过./make_ext4fs -l 1234M -s rootfs.ext4 rootfs中1234M指定的文件大小)大于实际分区大小300M,则会导致挂载不成功,从而报错“VFS: Unable to mount root fs on unknown-block”
解决方法即调整mmcblk0p3分区大小:
需在开发板启动时,通过串口调试助手监视开发板输出的串口字符内容,在出现“Hit any key to stop autoboot: ”时立即按下任意键,暂停启动过程,然后通过串口调试助手输入以下4行命令(第二行需要修改rootfs的大小为合适大小)
其中一个前提是需要在烧写boot用的配置中开启该项功能,即在hi3519av100_mmc_defconfig中打开下面三行以允许修改环境变量。(后面可以先用setenv bootdelay ‘5’ 增加启动延时试试,然后用printenv查看修改是否成功,从而证明能修改环境变量)
CONFIG_SYS_CONSOLE_ENV_OVERWRITE=y
CONFIG_CMD_SAVEENV=y
CONFIG_CMD_ENV_EXISTS=y
这样在串口调试助手输入下面这些命令,才能修改环境变量启动参数(特别注意用的串口调试工具,输入时不能出错,如在sscom下就必须一个一个字符敲入,复制粘贴就无效!)
1、setenv bootargs 'mem=1024M console=ttyAMA0,115200 root=/dev/mmcblk0p3 rw rootfstype=ext4 blkdevparts=mmcblk0:1M(boot),4M(kernel),3200M(rootfs),-(user)'
2、setenv bootcmd 'mmc read 0 0x22000000 800 2000; bootm 0x22000000'
3、saveenv(可以先用setenv bootdelay ‘5’ 增加启动延时试试,然后用printenv查看修改是否成功,从而证明能修改环境变量)
4、reset