Skip to content

LV035-NXP内核启动测试

一、环境搭建

1. tftp 环境搭建

这个主要是在 ubuntu 搭建 tftp 环境,可以看这个《05-开发环境/15-网络环境/LV020-tftp环境.md

2. 拷文件到服务器目录

shell
cd ~/7Linux/imx6ull-kernel 
cp -f arch/arm/boot/zImage ~/3tftp/
cp -f arch/arm/boot/dts/imx6ull-14x14-evk.dtb ~/3tftp/
image-20241102183137319

二、启动测试

1. 手动下载

我们使用前面自己移植的 uboot,要保证网口可以正常使用:

image-20241102183326480

启动开发板后进入命令模式,然后输入以下命令下载内核镜像和设备树到开发板指定的地址:

shell
tftp 80800000 zImage
tftp 83000000 imx6ull-14x14-evk.dtb
image-20241102183417930

最后我们启动内核:

shell
bootz 80800000 - 83000000
image-20241102183536564

有这些出现表示内核已经成功启动了。但是最后一直处于这个状态:

image-20241102184349887

我们后面再说为什么。

2. bootcmd启动

上面还要手敲,我们可以直接修改 bootcmd:

shell
=> setenv bootcmd 'tftp 80800000 /imx6ull/zImage\;tftp 83000000 /imx6ull/imx6ull-14x14-evk.dtb\;bootz 80800000 - 83000000'
=> saveenv

3. 刚才的问题

我们上面启动后,最后一直提示在打开网口,为什么?

Linux 内核启动以后是需要根文件系统的,根文件系统存在哪里是由 uboot 的 bootargs 环境变量指定,bootargs 会传递给 Linux 内核作为命令行参数 。这里我之前配置了 uboot 的 ip 以及服务器参数,默认情况下,会从网络挂载根文件系统:

image-20241102184518183

所以之前启动后,由于 linux 还未适配我们开发板的网口,驱动还未移植,所以网络不通,就没法挂载就会一直不断尝试。那如果我们不设置根文件系统路径,或者说根文件系统路径设置错误的话会出现什么问题?这个问题是很常见的,我们在实际的工作中开发一个产品,这个产品的第一版硬件出来以后我们是没有对应的根文件系统可用的,必须要自己做根文件系统。在构建出对应的根文件系统之前 Linux 内核是没有根文件系统可用的,此时 Linux 内核启动以后会出现什么问题呢?我们在 uboot 中设置:

shell
setenv bootargs 'console=ttymxc0,115200' # 设置 bootargs
image-20241102184701087

然后按照刚才的命令,启动一下 linux 内核,看一下会有什么现象:

image-20241102184807074

会发现最后报了一句:

shell
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

也就是提示内核崩溃,因为 VFS(虚拟文件系统)不能挂载根文件系统,因为根文件系统目录不存在。即使根文件系统目录存在,如果根文件系统目录里面是空的依旧会提示内核崩溃。这个就是根文件系统缺失导致的内核崩溃,但是内核是启动了的,只是根文件系统不存在而已。