根文件系统rootfs启动验证测试
接下来我们使用测试一下前面创建好的根文件系统 rootfs,测试方法使用 NFS 挂载。
6.1 检查是否在Ubuntu主机中安装和开启了NFS服务
(特别注意:nfs 配置文件/etc/exports中添加的路径一定要与实际使用的绝对路径保持一致)
拓展:
进行 Linux 驱动开发的时候需要 NFS 启动,因此要先安装并开启 Ubuntu 中的 NFS 服务,使用如下命令安装 NFS 服务:
sudo apt-get install nfs-kernel-server rpcbind
等待安装完成,安装完成以后,我们手动在用户根目录下创建一个名为“linux”的文件夹,以后所有的东西都放到这个“linux”文件夹里面,在“linux”文件夹里面新建一个名为“nfs”的文件夹。
创建的 nfs 文件夹供 nfs 服务器使用,以后我们可以在开发板上通过网络文件系统来访问 nfs 文件夹,要先配置 nfs,使用如下命令打开 nfs 配置文件/etc/exports:
sudo vi /etc/exports
打开/etc/exports 以后在后面添加如下所示内容:
/home/sudeki/Workplace/linux/nfs *(rw,sync,no_root_squash)
"sudeki"为当前用户名,根据实际情况修改
重启 NFS 服务,使用命令如下:
sudo /etc/init.d/nfs-kernel-server restart
6.2 uboot 中设置 bootargs 和 bootcmd 两个环境变量
- 设置 bootcmd 环境变量
setenv bootcmd 'tftp 80800000 zImage; tftp 83000000 imx6ull-14x14-atk.dtb; bootz 80800000 - 83000000'
saveenv
- 设置 bootargs 环境变量
uboot 里面的 bootargs 环境变量会设置“root”的值,所以我们将 root 的值改为 NFS 挂载即可。在 Linux 内核源码里面有相应的文档讲解如何设置,文档为 Documentation/filesystems/nfs/nfsroot.txt,格式如下:
root=/dev/nfs nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>] ip=<client-ip>:<server-ip>:<gwip>:<netmask>:<hostname>:<device>:<autoconf>:<dns0-ip>:<dns1-ip>
根据上面的格式 bootargs 环境变量的 root 值如下:
root=/dev/nfs nfsroot=192.168.10.102:/home/sudeki/Workplace/linux/nfs/rootfs,proto=tcp rw ip=192.168.10.55:192.168.10.102:192.168.10.1:255.255.255.0::eth0:off
“proto=tcp”表示使用 TCP 协议,“rw”表示 nfs 挂载的根文件系统为可读可写。 启动开发板,进入 uboot 命令行模式,然后重新设置 bootargs 环境变量,命令如下:
# 设置 bootargs
setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.10.102:/home/sudeki/Workplace/linux/nfs/rootfs,proto=tcp rw ip=192.168.10.55:192.168.10.102:192.168.10.1:255.255.255.0::eth0:off'
# 保存环境变量
saveenv
设置好以后使用“boot”命令启动 Linux 内核
boot
结果如下图