天天看点

busybox构建根文件系统busybox源码下载修改Makefile配置busybox编译 busybox向根文件系统添加 lib 库

busybox源码下载

https://busybox.net/downloads/
           

修改Makefile

修改顶层Makefile

vi Makefile
CROSS_COMPILE ?= /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
ARCH ?= arm
           

配置busybox

make defconfig
make menuconfig

Settings  ---> 
	[*]   vi-style line editing commands
	[*] Support Unicode
	[*]   Check $LC_ALL, $LC_CTYPE and $LANG environment variables
Linux Module Utilities  ---> 
	[ ] Simplified modutils 
           

编译 busybox

make install CONFIG_PREFIX=/rootfs/
# CONFIG_PREFIX 指定编译结果存放的目录
           
busybox构建根文件系统busybox源码下载修改Makefile配置busybox编译 busybox向根文件系统添加 lib 库

向根文件系统添加 lib 库

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

mkdir /rootfs/lib
# 拷贝交叉编译器的动态库到/roofs/lib/
cp /xxx/arm-linux-gnueabihf/libc/lib *so* *.a /rootfs/lib/ -d
rm /xxx/arm-linux-gnueabihf/libc/lib/ld-linux-armhf.so.3
cp /xxx/arm-linux-gnueabihf/libc/lib/ld-linux-armhf.so.3 /rootfs/lib/
           

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

mkdir /rootfs/usr/lib
cp /xxx/arm-linux-gnueabihf/libc/usr/lib/*so* *.a /rootfs/usr/lib/ -d
           

创建其他文件夹

cd /rootfs/
mkdir etc dev proc mnt sys tmp root
           

向rootfs中添加etc/fstab文件

fstab 在 Linux 开机以后自动配置哪些需要自动挂载的分区

vi etc/fstab
#<file system> <mount point> <type> <options> <dump> <pass> 
proc 			/proc 		 proc 	defaults  0 	 0 
tmpfs 			/tmp 		 tmpfs 	defaults  0 	 0 
sysfs 			/sys 		 sysfs 	defaults  0 	 0
           
格式:<file system> <mount point> <type> <options> <dump> <pass>

<file system>:		要挂载的特殊的设备,也可以是块设备,比如/dev/sda 等等。
<mount point>:		挂载点。
<type>:			文件系统类型,比如 ext2、ext3、proc、romfs、tmpfs 等等。
<options>:			挂载选项,在 Ubuntu 中输入“man mount”命令可以查看具体的选项。一般使用 defaults,
					也就是默认选项,defaults 包含了 rw、suid、 dev、 exec、 auto、 nouser 和 async。
<dump>:			为 1 的话表示允许备份,为 0 不备份,一般不备份,因此设置为 0。
<pass>:			磁盘检查设置,为 0 表示不检查。根目录‘/’设置为 1,其他的都不能设置为 1,
					其他的分区从 2 开始。一般不在 fstab 中挂载根目录,因此这里一般设置为 0。
           

向rootfs中添加etc/inittab文件

#etc/inittab
::sysinit:/etc/init.d/rcS
console::askfirst:-/bin/sh
::restart:/sbin/init
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r 7 ::shutdown:/sbin/swapoff -a
           
动作				描述
sysinit 			在系统初始化的时候 process 才会执行一次。
respawn 			当 process 终止以后马上启动一个新的。
askfirst			和 respawn 类似,在运行 process 之前在控制台上显示“Please press Enter to activate 
					this console.”。只要用户按下“Enter”键以后才会执行 process。
wait 				告诉 init,要等待相应的进程执行完以后才能继续执行。
once 				仅执行一次,而且不会等待 process 执行完成。
restart 			当init 重启的时候才会执行 procee。
ctrlaltdel 			当按下 ctrl+alt+del 组合键才会执行 process。
shutdown 			关机的时候执行 process。
           

创建启动文件rcS

cd /rootfs
mkdir /etc/init.d -p && vi rcS

#!/bin/sh
 
PATH=/sbin:/bin:/usr/sbin:/usr/bin:$PATH
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib
export PATH LD_LIBRARY_PATH
mount -a 8 mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s


chmod 777 rcS
           
busybox构建根文件系统busybox源码下载修改Makefile配置busybox编译 busybox向根文件系统添加 lib 库

继续阅读