宿主機:Centos7(Kernel3.10.0)
交叉編譯工具鏈:gcc-linaro-6.2.1-2016.11-i686_arm-linux-gnueabi
QEMU:2.0.0
Linux kernel:4.4.0
busybox:1.27.2
安裝交叉編譯鏈
https://releases.linaro.org/components/toolchain/binaries/6.2-2016.11/armeb-linux-gnueabi/gcc-linaro-6.2.1-2016.11-i686_armeb-linux-gnueabi.tar.xz
解壓:
tar –xvf gcc-linaro-6.2.1-2016.11-i686_armeb-linux-gnueabi.tar.xz
安裝:
mv gcc-linaro-6.2.1-2016.11-i686_armeb-linux-gnueabi /usr/local/arm-linux-gnueabi
編輯/etc/profile,添加:PATH=$PATH:/usr/local/arm-linux-gnueabi/bin
安裝qemu-system-arm
yum install –y qemu-system-arm
編譯內核
git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
cd linux && git checkout v4.4
編譯
make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm vexpress_defconfig
make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm menuconfig
編譯成功後,arch/arm/boot目錄下生成內核鏡像文件zImage
製作根文件系統
https://busybox.net/downloads/busybox-1.27.2.tar.bz2
解壓
tar –xvf busybox-1.27.2.tar.bz2
編譯
cd busybox-1.27.2
make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm menuconfig
出現圖形界面,做如下配置(這一步是可選的,如果執行了就可以不用執行cp /usr/arm-linux-gnueabi/lib rootfs/這一步):
Busybox Settings --->
Build Options --->
[*] Build BusyBox as a static binary (no shared libs)
完成後,執行:
make CROSS_COMPILE=arm-linux-gnueabi-
完成後,執行:
make install
完成後,該目錄下生成的_install中即是基本的busybox指令。
創建bash腳本,並運行(注意這裏不能使用ext4格式,否則內核啓動後文件系統是隻讀的,原因目前不清楚):
#!/bin/bash
##
# etc: https://download.csdn.net/download/hbuxiaofei/10588736
##
rm -rf rootfs
rm -rf tmpfs
rm -rf rootfs.ext3
mkdir rootfs
mkdir -p rootfs/proc/
mkdir -p rootfs/sys/
mkdir -p rootfs/tmp/
mkdir -p rootfs/root/
mkdir -p rootfs/var/
mkdir -p rootfs/mnt/
cp busybox-1.25.1/_install/* rootfs/ -arf
cp /usr/local/arm-linux-gnueabi/lib rootfs/ -arf
cp etc rootfs/ -arf
mkdir -p rootfs/dev/
mknod rootfs/dev/tty1 c 4 1
mknod rootfs/dev/tty2 c 4 2
mknod rootfs/dev/tty3 c 4 3
mknod rootfs/dev/tty4 c 4 4
mknod rootfs/dev/console c 5 1
mknod rootfs/dev/null c 1 3
dd if=/dev/zero of=rootfs.ext3 bs=1M count=64
mkfs.ext3 rootfs.ext3
mkdir -p tmpfs
mount -t ext3 rootfs.ext3 tmpfs/ -o loop
cp -r rootfs/* tmpfs/
umount tmpfs