根文件系统初步测试

一. 简介

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

相关推荐
ice___Cpu1 小时前
Linux 基本使用和 web 程序部署 ( 8000 字 Linux 入门 )
linux·运维·前端
z202305081 小时前
linux 之0号进程、1号进程、2号进程
linux·运维·服务器
狐心kitsune2 小时前
erlang学习:Linux常用命令1
linux·学习·erlang
DREAM依旧3 小时前
《深入了解 Linux 操作系统》
linux
阿赭ochre3 小时前
Linux环境变量&&进程地址空间
linux·服务器
Iceberg_wWzZ3 小时前
数据结构(Day14)
linux·c语言·数据结构·算法
可儿·四系桜3 小时前
如何在多台Linux虚拟机上安装和配置Zookeeper集群
linux·服务器·zookeeper
Flying_Fish_roe3 小时前
linux-软件包管理-包管理工具(Debian 系)
linux·运维·debian
大广-全栈开发4 小时前
centos 7 安装gitlab
linux·git·centos
666786664 小时前
Mysql高级篇(中)—— SQL优化
linux·运维·服务器·数据库·sql·mysql