使用versatile_defconfig编译的内核不能满足要求,现在,添加SCSI磁盘,MTD以及NAND flash的支持。
交叉编译linux内核
下载codesourcery的交叉编译工具链 https://sourcery.mentor.com/sgpp/lite/arm/portal/subscription?@template=lite, 选择目标OS为GNU/Linux。下载后解压,将/path/to/arm-2011.03/bin 添加到PATH中。
$ cd linux-2.6.39.2
$ make ARCH=arm versatile_defconfig
$ make ARCH=arm menuconfig
Kernel Features
-> Use the ARM EABI to compile the kernel
-> Allow old ABI binaries to run with this kernel (EXPERIMENTAL)
$ make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
编译完成后,会在arch/arm/boot/目录下生成zImage,可以使用qemu来测试编译的内核是否可以启动,如果没有安装qemu,则安装
# apt-get install qemu-system
$ qemu-system-arm -M versatilepb -kernel arch/arm/boot/zImage -nographic -append "console=ttyAMA0"
可以看到,内核能启动,但是由于没有根文件系统而panic。
构建根文件系统
$ mkdir rootfs
将codesourcery工具链中针对arm的lib库复制到根文件系统中,这一步是可选的,因为在下面将把busybox编译成静态链接的包。
$ cp -r /path/to/arm-2011.03/arm-none-linux-gnueabi/libc/lib rootfs
将库文件strip,减小大小,可选的。
$ cd rootfs/lib
$ arm-none-linux-gnueabi-strip *.so
提示libgcc_s.so不能识别,没关系,它是一个ASCII ld脚本,忽略即可。 现在,编译busybox-1.18.5
$ cd busybox-1.18.5
$ make ARCH=arm defconfig
$ make ARCH=arm menuconfig
Busybox Settings
--> Build Options
--> Build BusyBox as a static binary (no shared libs)
如果不将busybox编译成静态链接程序,那么前面的复制lib工作就是必须的。
$ make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
$ make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-