安装需要的包,我的主机环境是debian squeeze/x86_64,首先需要安装交叉编译工具链,安装qemu模拟器,下载linux内核。
0.1. 安装交叉编译工具链
将下列源添加到/etc/apt/sources.list或在/etc/apt/sources.list.d/目录下新建一个文件debian-arm-toolchain.list。
#
# -- Emdebian cross toolchains
#
# deb unstable main
# deb testing main
deb squeeze main
然后,执行
#apt-get update
#apt-get install gcc-4.4-arm-linux-gnueabi
安装工具链的方法可以参考
0.2. 安装qemu
#apt-get install qemu-system
0.3. 下载linux内核
我下载的是linux-2.6.39.2.tar.bz2。存放在$HOME/目录下。
1. 交叉编译Linux内核
$cd $HOME
$tar xjf linux-2.6.39.2.tar.bz2
$make mrproper #保证原始干净环境
$make ARCH=arm versatile_defconfig #使用versatile平台默认配置
$make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- all #编译
几分钟过后,arch/arm/boot/zImage即生成了,然后使用qemu模拟。之所以选择versatile平台,是因为qemu可以完全模拟。
$cp arch/arm/boot/zImage $HOME/versatile-zImage
$qemu-system-arm -M versatilepb -kernel versatile-zImage -m 128M
由于没有提供根文件系统,所以kernel会崩溃,由于找不到合适的root挂载项。下面制作一个最小的initramfs,使其可以正常运行。
$mkdir $HOME/versatile-initramfs
$cd $HOME/versatile-initramfs
$cat > init.c <<EOF
> #include <stdio.h>
> #include <stdlib.h>
> int main(void)
> {
> printf("hello arm\n");
> while(1);
> return 0;
> }
> EOF
然后,编译并且将其打包成initramfs。
$arm-linux-gnueabi-gcc -static -o init init.c
$rm init.c
$find . | cpio -o -H newc | gzip > ../versatile-initrd
$qemu-system-arm -M versatilepb -kernel versatile-zImage -initrd versatile-initrd -m 128M