目录
一、整体启动流程回顾
二、根文件系统是什么?需要准备哪些内容?
三、两种常见的根文件系统部署方式
1.NFS 网络根文件系统(开发阶段最常用)
1.宿主机(服务器) 安装 NFS 服务:
几个参数:
2.重启服务:
验证1(用户空间挂载)
验证2(内核空间挂载):
1. init=/linuxrc 到底是什么?
2. 为什么必须“先制作,后执行”?
四、用 BusyBox 搭建最小根文件系统(核心内容)
1.安装通常从源码编译开始。
3.其他说明
3.1 编译 BusyBox
3.2 创建必要目录
3.3 关键配置文件
4.4 shell脚本参考
五、验证与调试顺序
一、整体启动流程回顾
U-Boot 启动内核时,使用 bootz 命令加载:
内核镜像
zImage(放在内存地址 0x80800000)设备树
imx6ull-mmc-npi.dtb(放在 0x83000000)
命令格式:
bootz 0x80800000 - 0x83000000
中间的 - 表示没有使用 initrd(初始 ramdisk)。
内核启动后,必须挂载根文件系统(rootfs),否则会 panic(内核惊恐)。
根文件系统提供了 /bin/sh、/etc、/lib 等基本目录和程序,用户才能操作硬件。
二、根文件系统是什么?需要准备哪些内容?
根文件系统本质上是一套目录结构和数据,并按照某种文件系统格式(如 ext4、yaffs、ramdisk)组织起来,存放在某个根设备上。
根设备可以是:
闪存、SD卡、磁盘(块设备)
内存(ramdisk)
网络(NFS)
文件系统内部必须包含:
可执行程序(ls、cd、ifconfig 等)——用 BusyBox 统一提供,它是一个单二进制文件,通过
argv[0]区分不同命令。动态库(如果用动态链接)——从交叉编译工具链中复制,并用
strip减小体积。启动配置:
/etc/inittab、/etc/rc.d/rcS、/etc/fstab、/etc/profile等,用于初始化系统、挂载虚拟文件系统(proc、sysfs、tmpfs)、设置环境变量。设备节点(通过 mdev 动态创建)。
三、两种常见的根文件系统部署方式
1.NFS 网络根文件系统(开发阶段最常用)
优点:无需烧写,修改宿主机目录即刻生效,方便调试。
1.宿主机(服务器) 安装 NFS 服务:
sudo apt install nfs-kernel-server
编辑
/etc/exports,添加共享目录(如/home/rocky/ebf/rootfs):/home/xingxinliao/ebf/rootsfs *(rw,sync,no_subtree_check)
几个参数:
/home/rocky/ebf/rootsfs- 被共享的目录,一般就是你给开发板启动用的 rootfs。
- chmod -R 777 rootsfs/ 修改权限,权限不够可能导致挂载失败
*- 允许所有客户端访问。
实际开发中建议改成开发板 IP,例如:
/home/rocky/ebf/rootfs 192.168.1.20(rw,sync,no_subtree_check)
rw- 客户端可以读写。
sync- 客户端写数据时,服务器确认已经写入后才返回成功,可靠一些。
no_subtree_check- 不检查共享目录下面的子目录关系,嵌入式 NFS rootfs 基本都这么配
2.重启服务:
sudo service nfs-kernel-server restart
sudo exportfs -r # 让NFS重新加载配置
↓
exportfs -v # 查看加载结果
更常用,因为它只重新加载导出配置,不重启整个 NFS 服务,速度快,也不会影响已经挂载的客户端
目标板内核必须支持 NFS 作为根文件系统(在
make menuconfig中开启CONFIG_ROOT_NFS等选项)。
验证1(用户空间挂载)
命令拆解: