如何编译和运行一个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