自己编写文件系统(手把手教你制作根文件系统)
自己编写文件系统(手把手教你制作根文件系统)填写交叉编译工具链前缀Settings --》Cross compiler prefixtar jxvf busybox-x.x.x.tar.bz2 cd busybox-x.x.x/ make menuconfig(1)选择编译静态库Settings --》Build static binary(no shared libs)(2)选择交叉编译工具链
前言虽然现在像Buildroot或Yocto这类开源项目已经让我们的开发很方便了。但是自己手动去制作根文件系统还是很有意义的,它可以让我们理解其工作流程。废话不多说!
Busybox生成工具1. 下载Busybox
Busybox的官方源码下载路径为:https://busybox.net/downloads/。
2. 配置Busybox
tar jxvf busybox-x.x.x.tar.bz2
cd busybox-x.x.x/
make menuconfig
(1)选择编译静态库
Settings --》Build static binary(no shared libs)
(2)选择交叉编译工具链
Settings --》Cross compiler prefix
填写交叉编译工具链前缀
(3)选择安装目录
Settings --》Destination path for 'make install'
根据个人需要修改路径,默认:./_install
3. 编译安装
make
make install
安装完之后会生成bin、sbin、usr这 3个目录和软链接linuxrc
构建根文件系统新建一个目录用来存放制作的根文件系统,可以命名为rootfs。
mkdir rootfs
cd rootfs
1.Bosybox生成的文件拷贝到rootfs
cp ../busybox-1.33.1/_install/* ./
2. 添加目录结构
然后创建根文件系统所需的目录:
mkdir dev etc lib proc sys tmp var
3. 添加C运行库文件
库文件可直接从交叉工具链获取:
cp -a /usr/arm-linux-gnueabihf/lib/*so* ./lib/
4. 添加初始化配置脚本
初始化配置脚本放在/etc目录下,用于系统启动所需的初始化配置脚本。BusyBox提供了一些初始化范例脚本,在 examples/bootfloppy/etc/ 目录下。我们可以拿过来作为模板再进行修改。
cp -a ../busybox-x.x.x/examples/bootfloppy/etc/* etc/
5. 修改etc/inittab文件
# 系统启动时
::sysinit:/etc/init.d/rcS
# 系统启动按下Enter键时
::askfirst:-/bin/sh
# 按下Ctrl Alt Del键时
::ctrlaltdel:/sbin/reboot
# 系统关机时
::shutdown:/sbin/swapoff -a
::shutdown:/bin/umount -a -r
# 系统重启时
::restart:/sbin/init
以上内容定义了系统启动时,关机时,重启时,按下Ctrl Alt Del键时执行的进程。
6. 修改/etc/init.d/rcS文件
#! /bin/sh
# 挂载 /etc/fstab 中定义的所有文件系统
/bin/mount -a
# 挂载虚拟的devpts文件系统用于用于伪终端设备
/bin/mkdir -p /dev/pts
/bin/mount -t devpts devpts /dev/pts
# 使用mdev动态管理u盘和鼠标等热插拔设备
/bin/echo /sbin/mdev > /proc/sys/kernel/hotplug
# 扫描并创建节点
/sbin/mdev -s
7. 修改/etc/fstab文件
/etc/fstab文件存放的是文件系统信息。在系统启动后执行 /etc/init.d/rcS 文件里 /bin/mount -a 命令时,自动挂载这些文件系统。内容如下:
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
tmpfs/devtmpfsdefaults00
制作镜像文件
1. 制作ubifs镜像
mkfs.ubifs -m 2048 -e 128KiB -c 4096 -r ./rootfs -o rootfs.ubifs
2.制作yaffs2镜像
mkyaffs2image ./rootfs rootfs.yaffs2
注意: 请根据实际情况来选择镜像文件类型。
喜欢这篇文章,欢迎点赞,分享,关注!
更多精彩文章,欢迎关注微信公众号"嵌入式软件开发交流"