宿主机: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