笔记:使用busybox制作根文件系统

busybox源码下载

根据自己的选择下载合适的版本,本文以1.31.1为例,下载链接:busybox

1.配置与裁剪

1.1解压源码

tar -xf busybox-1.31.1.tar.bz2

1.2配置

进入到解压得到的源码目录下执行如下命令:

make menuconfig

配置交叉编译器前缀及安装目录,我这里直接安装到我的nfs挂载的目录(如果无法删除原有路径,按住ctrl加退格键可删除):

Settings
	(arm-linux-gnueabi-) Cross compiler prefix
	(/home/rootfs) Destination path for 'make install'

其它配置根据自己的需求进行裁剪。

1.3编译

make -j4

1.4安装

make install

安装完成后在前面指定的安装目录可看到生成的文件(我这里的文件在/home/rootfs目录):

bin  linuxrc  sbin  usr

创建其它必须的目录:

mkdir dev etc lib proc var

从交叉编译器安装目录拷贝lib目录里面的动态库到根文件系统的lib目录:

cp /usr/arm-linux-gnueabi/lib/*.so.* lib/

拷贝示例系统初始化配置文件:

cp -rf busybox-1.31.1/examples/bootfloppy/etc/* etc/

到此一个精简的根文件系统就完成了,其它的根据需要进行配置。

2.制作烧录镜像

前面制作的根文件系统只能用于网络挂载,但我要将文件系统固化到emmc里面,所以需要将其打包制作成可以烧录的镜像,这里以ext4格式为例。
首先生成一个200M(根据实际调整)大小的空文件:

touch rootfs.ext4
dd if=/dev/zero of=rootfs.ext4 bs=1024 count=204800

将生成的空文件格式化成ext4格式:

mkfs.ext4 rootfs.ext4

挂载格式化后的空文件(-o loop选项可以让文件像块设备一样访问):

sudo mount -t ext4 rootfs.ext4 /mnt/ -o loop

将前面制作好的根文件系统的内容拷贝到挂载的目录。
拷贝完后卸载目录:

sudo umount /mnt

此时,可烧录的根文件系统镜像就制作好了,再烧录到emmc/sd的存放根文件系统的分区:

dd if=rootfs.ext4 of=/dev/mmcblk0p2

如果以后还想添加其它文件,只需要再次进行挂载,然后添加内容即可。

3.格式化并分区emmc/sd

因为制作好的根文件系统里面没有mkfs.ext4工具,只有ext2的,我需要格式化emmc其它分区为ext4格式的,所以需要移植。

3.1移植e2fsprogs

下载源码:e2fsprogs

3.2解压源码

tar -xf e2fsprogs-1.45.6.tar.gz

3.3配置

进入解压得到的源码目录下执行如下命令:

# 指定交叉编译器
# 指定运行主机架构
# 指定安装路径前缀(绝对路径)
# 使用动态库
./configure CC=arm-linux-gnueabi-gcc --host=arm --prefix=/home/Desktop/e2fsprogs-1.45.6/release/ --enable-elf-shlibs

3.4编译

make -j4

3.5安装

make install

完成后,就可以在前面指定的安装路径前缀那个目录下找到生成的文件:

bin  etc  include  lib  sbin  share

在sbin目录下拷贝需要的工具(我暂时只需要mkfs.ext4)到根文件系统目录下的sbin目录。
通过如下命令查看这对应工具依赖的动态库:

readelf -d sbin/mkfs.ext4 | grep NEEDED

# 结果
 0x00000001 (NEEDED)                     共享库:[libext2fs.so.2]
 0x00000001 (NEEDED)                     共享库:[libcom_err.so.2]
 0x00000001 (NEEDED)                     共享库:[libblkid.so.1]
 0x00000001 (NEEDED)                     共享库:[libuuid.so.1]
 0x00000001 (NEEDED)                     共享库:[libe2p.so.2]
 0x00000001 (NEEDED)                     共享库:[libc.so.6]
 0x00000001 (NEEDED)                     共享库:[ld-linux.so.3]

在lib目录拷贝这些必要的动态库到根文件系统目录下的lib目录。
上面的步骤完成后,启动开发板挂载根文件系统已经可以使用mkfs.ext4工具了。

挂载根文件系统启动开发板进入控制台,通过fdisk工具分区emmc:

fdisk /dev/mmcblk0

# 创建分区
Command (m for help): n
Partition type
   p   primary partition (1-4)
   e   extended
# 分区类型为主分区
p
# 分区号1
Partition number (1-4): 1
# 起始扇区2048(前面的空间固化u-boot)
First sector (16-7634943, default 16): 2048
# 分区1的大小
Last sector or +size{,K,M,G,T} (2048-7634943, default 7634943): +100M

# 更改分区1的类型
Command (m for help): t
Selected partition 1
# 更改分区类型为FAT32
Hex code (type L to list codes): b
Changed system type of partition 1 to b (Win95 FAT32)

# 创建分区
Command (m for help): n
Partition type
   p   primary partition (1-4)
   e   extended
# 分区类型为主分区
p
# 分区号2
Partition number (1-4): 2
# 起始扇区接着分区1的结束扇区
First sector (16-7634943, default 16): 206848
# 分区大小默认为剩余的空间
Last sector or +size{,K,M,G,T} (206848-7634943, default 7634943):
Using default value 7634943

# 保存并退出
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table
 mmcblk0: p1 p2

格式化分区1:

mkfs.vfat /dev/mmcblk0p1

格式化分区2:

mkfs.ext4 /dev/mmcblk0p2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值