根文件系统初步测试

一.  简介

上一篇文章学习了向所编译生成的根文件系统中加入 lib库文件。文章地址如下:

根文件系统lib库添加与初步测试-CSDN博客

本文继上一篇文章的学习,本文对之前制作的根文件系统进行一次初步测试。

二.  根文件系统初步测试

为了方便测试,我们采用挂载网络根文件系统,通过nfs服务进行挂载。可以使用的前提是:

1.  Linux内核网络驱动要工作正常。

2.  重新设置 uboot的 bootargs 参数,也就是 Linux内核的命令行参数。

通过 tftp 服务,从ubuntu系统下加载我们前面移植 zImage和dtb,即开发板上已经设置好 bootcmd参数(之前其实已经设置好了)。

注意:通过 tftp服务可以从 ubuntu系统下载 zImage与 dtb设备树文件的前提是: ubuntu系统的 tftp服务所设置的目录存在 内核镜像 zImage和 dtb设备树文件。

开发板上电后,进入 uboot命令模式下,输入 "printenv" 命令即可查看 开发板上的 bootcmd参数值:

根文件系统初步测试_第1张图片

设置 bootargs参数:即设置根文件系统通过nfs服务启动

测试方法就是使用 NFS 挂载,uboot 里面的 bootargs 环境变量会设置 “root” 的值,所以我们将 root 的值改为 NFS 挂载即可。

Linux 内核源码里 有相应的文档讲解如何设置,文档为 Documentation/filesystems/nfs/
nfsroot.txt ,格式如下:
root=/dev/nfs nfsroot=[:][,] ip=::
ip>::::::

以上参数说明如下:

:服务器 IP 地址,也就是存放根文件系统主机的 IP 地址,即 Ubuntu IP 地址
根文件系统的存放路径,例如,我这里存放路径为 /home/wangtian/linux/nfs_File/rootfs
NFS 的其他可选选项,一般不设置。
客户端 IP 地址,即开发板的 IP 地址, Linux 内核启动以后就会使用 IP 地址来配置开发板。此地址一定要和 Ubuntu 主机在同一个网段内,并且没有被其他的设 备使用。
Ubuntu 中使用 ping 命令 ping 一下就知道要设置的 IP 地址有没有被使用,如果不能
ping 通就说明没有被使用,那么就可以设置为开发板的 IP 地址。
服务器 IP 地址,前面已经说了。
网关地址,我的就是 192.168.1.1
:子网掩码,我的就是 255.255.255.0
:客户机的名字,一般不设置,此值可以空着。
设备名,也就是网卡名,一般是 eth0 eth1…. ,正点原子的 I.MX6U-ALPHA
发板的 ENET2 eth0 ENET1 eth1 。如果你的电脑只有一个网卡,那么基本只能是 eth0
这里我们使用 ENET2 ,所以网卡名就是 eth0
自动配置,一般不使用,所以设置为 off
DNS0 服务器 IP 地址,不使用。
DNS1 服务器 IP 地址,不使用。

根据上面的格式,proto=tcp”表示使用 TCP 协议。环境变量 bootargs 的 root 值如下:

root=/dev/nfs nfsroot=192.168.1.66:/home/wangtian/linux/nfs_File/rootfs, proto=tcp ip=192.168.1.50:192.168.1.66:192.168.1.1:255.255.255.0::eth0:off
进入 uboot 命令行模式,然后重新设置 bootargs 环境变量,然后保存:

=> setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.1.66:/home/wangtian/linux/nfs_File/rootfs,proto=tcp ip=192.168.1.50:192.168.1.66:192.168.1.1:255.255.255.0::eth0:off'
=> saveenv
Saving Environment to NAND...
Erasing NAND...
Erasing at 0x3c00000 -- 100% complete.
Writing to NAND... OK

可以通过 "printenv" 命令查看 bootargs参数设置的是否正确:

根文件系统初步测试_第2张图片

设置好以后,使用boot” 命令启动 Linux 内核。操作如下:

根文件系统初步测试_第3张图片

如果设置成功。那么最后在输入 "Enter" 回车键时,会进入 根文件系统。

根文件系统初步测试_第4张图片

从上面开发板根文件系统打印的 Log信息可以看出,根文件系统是通过 nfs服务挂载的方式加载的。通过 " ls " 命令可以看到是我之前编译 busybox制作的根文件系统。

三.  设置根文件系统为可读写

进入根文件系统根目录下,创建一个文件,会创建失败:

这里不能创建的原因是,这里我设置根文件系统是只读的。

如果需要根文件系统可读可写,可以在设置 bootargs参数时 root参数值 加入 读写权限:

root=/dev/nfs nfsroot=192.168.1.66:/home/wangtian/linux/nfs_File/rootfs,proto=tcp rw ip=192.168.1.50:192.168.1.66:192.168.1.1:255.255.255.0::eth0:off

重新设置 bootargs参数:

=> setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.1.66:/home/wangtian/linux/nfs_File/rootfs,proto=tcp rw ip=192.168.1.50:192.168.1.66:192.168.1.1:255.255.255.0::eth0:off'
=> saveenv
Saving Environment to NAND...
Erasing NAND...
Erasing at 0x3c00000 -- 100% complete.
Writing to NAND... OK
=>

输入 "boot " 命令重启开发板:

=> boot
FEC1 Waiting for PHY auto negotiation to complete.... done
Using FEC1 device
TFTP from server 192.168.1.66; our IP address is 192.168.1.50

最后输入 "Enter" 回车键,进入根文件系统根目录下,试着创建一个文件:

根文件系统初步测试_第5张图片

可以看出,这时可以创建一个文件。

那么是不是说明我们的 rootfs 就制作成功了呢?大家注意,上面打印信息中红色框中,有下面这一行错误提示:
can't run '/etc/init.d/rcS': No such file or directory
提示很简单,说是无法运行“ /etc/init.d/rcS”这个文件,因为这个文件不存在。看来我们的 rootfs 还是缺文件。下一篇继续完善 根文件系统 rootfs。

你可能感兴趣的:(系统移植篇,linux,arm开发)