嵌入式Linux操作系统根文件系统Rootfs构建

1 BusyBox初步编译

1.1 下载解压

image.png
image.png

1.2 BusyBox中文字符支持

  • 修改 busybox 源码,取消 busybox 对中文显示的限制,打开文件 busybox-1.29.0/libbb/printable_string.c
  • 修改文件 busybox-1.29.0/libbb/unicode.c

1.3 配置 busybox

image.png
image.png
image.png
image.png
image.png
image.png
image.png

1.4 编译BusyBox

  • 配置好busybox 以后开始编译,我们可以指定编译结果的存放目录:

image.png
image.png

  • 编译完成以后会在 busybox 的所有工具和文件就会被安装到 rootfs 目录中

image.png

2 Rootfs构建:

2.1 向根文件系统添加 lib

/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/lib
/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib
/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/lib
复制代码
  • 向 rootfs 的“/lib ”目录添加库文件

image.png
image.png
image.png

  • 向 rootfs 的“usr/lib ”目录添加库文件

image.png
image.png

  • 至此,根文件系统的库文件就全部添加好了,可以使用“du”命令来查看一下 rootfs/lib 和rootfs/usr/lib 这两个目录的大小,命令如下

image.png

2.2 创建目录:如 dev、proc、mnt、sys、tmp 和 root 等

image.png

2.3 创建/etc/init.d/rcS

  • rcS 是个shell脚本,Linux内核启动以后需要启动一些服务,而rcS就是规定启动哪些文件的脚本文件,在 rootfs 中创建/etc/init.d/rcS 文件。
  • 第3行,PATH 环境变量保存着可执行文件可能存在的目录
  • 第4行,LD_LIBRARY_PATH环境变量保存着库文件所在的目录。
  • 第7行,使用mount命令来挂载所有的文件系统,这些文件系统由文件/etc/fstab 来指定,所以我们一会还要创建/etc/fstab 文件。
  • 第11和12行,使用 mdev 来管理热插拔设备,通过这两行,Linux内核就可以在/dev目录下自动创建设备节点。

image.png
image.png

2.4 创建/etc/fstab文件

image.png
image.png
image.png

2.5 创建/etc/inittab文件

image.png
image.png
image.png