三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

文件系统制作-实操备忘录

文件系统制作-实操备忘录

目录

一、整体启动流程回顾

二、根文件系统是什么?需要准备哪些内容?

三、两种常见的根文件系统部署方式

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)

文件系统内部必须包含:

  1. 可执行程序(ls、cd、ifconfig 等)——用 BusyBox 统一提供,它是一个单二进制文件,通过 argv[0] 区分不同命令。

  2. 动态库(如果用动态链接)——从交叉编译工具链中复制,并用 strip 减小体积。

  3. 启动配置/etc/inittab/etc/rc.d/rcS/etc/fstab/etc/profile 等,用于初始化系统、挂载虚拟文件系统(proc、sysfs、tmpfs)、设置环境变量。

  4. 设备节点(通过 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(用户空间挂载)

命令拆解:

← 返回列表