去Busybox的官网:https://busybox.net/downloads/。下载相应的版本源码,笔者下的是1.30.0版本。
解压源代码后,进入根目录,然后右键“在终端中打开”,执行“make menuconfig”命令,然后在“Settings --->”下设置“[*] Build static binary (no shared libs)”和“(arm-unknown-linux-gnueabi-)Cross compiler prefix” "(./_install) Destination path for 'make install' (NEW)"。然后退出保存。
注意:我这里交叉编译工具链需要在终端下配置,所以在“make menuconfig”前需要执行“export PATH=/opt/arm-unknown-linux-gnueabi/bin:$PATH”,启动交叉编译工具环境。
执行“make ”“make install”
在busybox平级目录创建rootfs文件夹,并在rootfs下创建 dev、etc、lib、proc、sys、tmp、var、root文件夹。
将交叉编译工具链下面lib目录下的so文件全部拷贝到rootfs/lib文件夹下面,将busybox下/examples/bootfloppy/etc/内的所有文件拷贝到rootfs/etc文件夹下面。
# 系统启动时
::sysinit:/etc/init.d/rcS
# 系统关机时
::shutdown:/sbin/swapoff -a
::shutdown:/bin/umount -a -r
# 系统重启时
::restart:/sbin/init
#! /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
#
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
# 主机名
export HOSTNAME=XXX
# 用户名
export USER=root
# 用户目录
export HOME=/root
# 终端默认提示符
export PS1="[$USER@$HOSTNAME:\$PWD]\# "
# 环境变量
export PATH=/bin:/sbin:/usr/bin:/usr/sbin
# 动态库路径
export LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH
执行“sudo apt install mtd-utils”安装mtd-utils,
在rootfs平级目录执行“mkfs.ubifs -m 2048 -e 128KiB -c 4096 -r ./rootfs -o rootfs.ubifs”生成UBIFS文件系统,
新建文件“ubinize.cfg”,
并修改内容为:
[ubifs]
mode=ubi
image=rootfs.ubifs # mkfs.ubi生成的源镜像
vol_id=0 # 卷号
vol_size=1024MiB # 卷大小,一般要设置的比分区大,防止有坏块
vol_type=dynamic # 卷类型,动态卷
vol_name=rootfs # 卷名,rootfs
vol_flags=autoresize # 自动大小
执行“ubinize -m 2048 -p 128KiB ubinize.cfg -o rootfs_ubifs.img”生成文件系统的img文件。