如何編譯和運行一個arm linux 內核
1. 準備工具
- linux4.0 內核
- busybox工具包
2. busybox手工編譯一個最小的文件系統
cd busybox
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabi-
make menuconfig
進入menuconfig之後,配製成靜態編譯。
在make & make install 編譯完成後,在busybox根目錄下會有一個“install”目錄,該目錄存放了編譯好的文件系統需要的一些命令集合。
把_install目錄複製到linux-4.0目錄下。進入_install目錄,先創建etc,dev等目錄。
mkdir proc
mkdir dev
mkdir mnt
mkdir -p etc/init.d/
在_install/etc/init.d/目錄下新建一個rcS文件,並寫入如下內容。
mkdir -p /proc
mkdir -p /tmp
mkdir -p /sys
mkdir -p /mnt
/bin/mount -a
mkdir -p /dev/pts
mkdir -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
chmod +x _install/etc/init.d/rcS
在_install/etc目錄下新建一個fstab文件,並寫入如下內容:
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
debugfs /sys/kernel/debug debugfs defaults 0 0
在_install/etc目錄下新建一個inittab文件,並寫入如下內容:
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
在_install/dev 目錄下新建如下設備節點,這時需要root權限。
cd _install/dev/
sudo mknod console c 5 1
sudo mknod null c 1 3
3.編譯內核
cd linux-4.0
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabi-
make vexpress_defconfig
配置initramfs,在initramfs source file 中填入_install,並把 Default kernel command string 清空。
配置memory split 爲“3G/1G user/kernel split”,並打開高端內存。
make bzImage -j4 ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
make dtbs
4.運行QEMU虛擬機
運行QEMU虛擬機模擬4核Cortex-A9的Versatile Express開發平臺。
qemu-system-arm -M vexpress-a9 -smp 4 -m 200M -kernel arch/arm/boot/zImage arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic