根文件系统初步测试

一. 简介

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

相关推荐
en.en..28 分钟前
MRS/MSR 指令操作 xPSR 寄存器
linux·运维·服务器
玄芯散人39 分钟前
【元婴·94】ARM vs RISC-V大战
arm开发·risc-v
Brilliantwxx1 小时前
【Linux】 自主shell编写巩固复习篇
linux·运维·服务器·开发语言
鱼很腾apoc1 小时前
【MySQL】第3期 索引、事务与视图系统详解
linux·mysql·事务·索引·dml·视图·macc
anew___1 小时前
《从零手写操作系统 (49):虚拟内存进阶——Demand Paging、Swap与缺页异常处理》
linux·服务器·php
迷途之人不知返1 小时前
【基础IO】-4-再谈重定向
linux
Android系统攻城狮2 小时前
Linux Gstreamer深度解析之gst_audio_ring_buffer_parse_caps调用流程与实战(八十)
linux·运维·服务器·gstreamer音视频·音视频进阶
erzong2312 小时前
Linux网络:UDP编程踩坑日记
linux·网络·udp
盐焗鹌鹑蛋2 小时前
【Linux】线程库与封装
linux
lwx9148522 小时前
Deepin操作系统
linux·服务器·网络