关于linux系统移植学习的简单总结(3) - 根文件系统

本文详细介绍了根文件系统在Linux系统中的作用,包括内核启动、目录结构及其功能,如/bin存放可执行文件,/dev包含设备文件,/etc存储配置文件等。此外,讲解了BusyBox作为一个集成了多种命令和工具的软件在根文件系统中的应用。还提到了如何通过NFS进行根文件系统测试,以及如何编译和运行简单的C程序来验证根文件系统功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

3、根文件系统

  1. 根文件系统简介
    根文件系统一般也叫做 rootfs。
    百度百科:

根文件系统首先是内核启动时所 mount(挂载)的第一个文件系统,内核代码映像文件保存在
根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和
服务等加载到内存中去运行。

百度百科上说内核代码镜像文件保存在根文件系统中,但是我们嵌入式 Linux 并没有将内
核代码镜像保存在根文件系统中,而是保存到了其他地方。比如 NAND Flash 的指定存储地址、
EMMC 专用分区中。根文件系统是 Linux 内核启动以后挂载(mount)的第一个文件系统,然后从
根文件系统中读取初始化脚本,比如 rcS,inittab 等。

2.根文件系统目录
->/bin 目录
bin 文件就是可执行文件。所以此目录下存放着系统
需要的可执行文件,一般都是一些命令,比如 ls、mv 等命令。

->/dev 目录
dev 是 device 的缩写,所以此目录下的文件都是和设备有关的,此目录下的文件都是设备
文件。在 Linux 下一切皆文件,即使是硬件设备,也是以文件的形式存在的,比如
/dev/ttymxc0(I.MX6ULL 根目录会有此文件)就表示 I.MX6ULL 的串口 0,我们要想通过串口 0
发送或者接收数据就要操作文件/dev/ttymxc0,通过对文件/dev/ttymxc0 的读写操作来实现串口
0 的数据收发。

->/etc 目录
此目录下存放着各种配置文件

->/lib 目录
lib 是 library 的简称,也就是库的意思,因此此目录下存放着 Linux 所必须的库文件。这些
库文件是共享库,命令和用户编写的应用程序要使用这些库文件。

->/mnt 目录
临时挂载目录,一般是空目录

->/proc 目录
此目录一般是空的,当 Linux 系统启动以后会将此目录作为 proc 文件系统的挂载点,proc
是个虚拟文件系统,没有实际的存储设备。proc 里面的文件都是临时存在的,一般用来存储系
统运行信息文件。

->/usr 目录
要注意,usr 不是 user 的缩写,而是 Unix Software Resource 的缩写,也就是 Unix 操作系统
软件资源目录。既然是软件资源目录,因此/usr 目录下也存放着很多软件,一般系统安装完成以
后此目录占用的空间最多。

->/var 目录
此目录存放一些可以改变的数据。

->/sbin 目录
此目录页用户存放一些可执行文件,但是此目录下的文件或者说命令只有管理员才能使用,
主要用户系统管理。

->/sys 目录
系统启动以后此目录作为 sysfs 文件系统的挂载点,sysfs 是一个类似于 proc 文件系统的特
殊文件系统,sysfs 也是基于 ram 的文件系统

->/opt
可选的文件、软件存放区,由用户选择将哪些文件或软件放到此目录中。

3.BusyBox
①简介
BusyBox是一个集成了大量的 Linux 命令和工具的软件,像 ls、mv、ifconfig 等命令 BusyBox 都会提供。
官网地址为:https://busybox.net/

②编译
make
make install CONFIG_PREFIX=/home/xxx/linux/nfs/rootfs

4.根文件系统初步测试
测试方法就是使用 NFS 挂载,uboot 里面的 bootargs 环境变量会设置“root”的值,所以我们将 root 的值改为 NFS 挂载即可。格式如下:
root=/dev/nfs nfsroot=[:][,] ip=::<gwip>::::::

setenv bootargs ‘console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.1.250:
/home/xxx/linux/nfs/rootfs,proto=tcp rw ip=192.168.1.251:192.168.1.250:192.168.1.1:
255.255.255.0::eth0:off’ //设置 bootargs
saveenv //保存环境变量

5.根文件系统其他功能测试
①软件运行测试

 #include <stdio.h> 
int main(void) 
{ 
	while(1) 
	{ 
		printf("hello world!\r\n");
		sleep(2);
	}
	return 0;
}

因为我们是要在 ARM 芯片上运行的,
所以要用交叉编译器去编译,也就是使用 arm-linux-gnueabihf-gcc 编译,命令如下:
arm-linux-gnueabihf-gcc hello.c -o hello

file hello //查看 hello 的文件类型以及编码格式

“./hello” //执行 hello
“./hello &”就是让 hello 在后台运行
hello 这个软件运行正常

ps 命令用于查看所有当前正在运行的进程,并且会给出进程的 PID。
kill -9 166
关闭在后台运行的hello 软件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值