根文件系统初步测试

一. 简介

上一篇文章学习了向所编译生成的根文件系统中加入 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参数值:

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

测试方法就是使用 NFS 挂载,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>:<gw
ip>:<netmask>:<hostname>:<device>:<autoconf>:<dns0-ip>:<dns1-ip>

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

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

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

从上面开发板根文件系统打印的 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" 回车键,进入根文件系统根目录下,试着创建一个文件:

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

相关推荐
程序员JerrySUN11 分钟前
BitBake 执行流程深度解析:从理论到实践
linux·开发语言·嵌入式硬件·算法·架构
Luke~~1 小时前
实验室服务器Ubuntu安装使用全流程
linux·运维·ubuntu
hc_bmxxf1 小时前
Linux应用软件编程-多任务处理(线程)
linux·线程
tjjingpan2 小时前
在国产电脑上运行PDFSAM软件使用pdf分割合并交替混合处理pdf文档
linux·pdf
hope_wisdom2 小时前
Linux系统编程之目录遍历
linux·linux编程·readdir·目录遍历·scandir
暗碳3 小时前
华为麦芒5(安卓6)termux记录 使用ddns-go,alist
android·linux
靡樊3 小时前
Linux:基础IO
linux
菜鸟康4 小时前
Linux系统编程——理解系统内核中的信号捕获
linux·运维·服务器
张明奇-琦玉4 小时前
Boost之log日志使用
linux·服务器·算法
云计算DevOps-韩老师4 小时前
【网络云计算】2024第52周-每日【2024/12/26】小测-理论&实操-备份MySQL数据库并发送邮件-解析
linux·开发语言·网络·数据库·mysql·云计算·perl