嵌入式Linux内核的交叉编译编译-基于2.6.26
测试环境:Fedora 9 Linux 2.6.26 / gcc 4.3.0 / arm-Linux-gcc 3.4.1
本 文主要介绍如何构建在x86平台上交叉编译各平台上的嵌入式Linux内核。要完成一下步骤,首先必须确认有相应的交叉编译工具链。工具链可以自己编译获 得,但是对于初学者我们不推荐这么作,网上大有许多编译好的优秀的工具链。本文将以编译ARM平台上的内核为例子,其他平台基本步骤差异不大。为了显示最 新性,也采用可2.6.26版本的内核。
首先必须获得最新版本的内核,可以在ftp.kernel.org上下载我们需要的2.6.26的内核。获得相应内核包后,解压:
对于 Linux-2.6.26.tar.gz为
tar zxvf Linux-2.6.26.tar.gz
对于 Linux-2.6.26.tar.bz2为
tar xjvf Linux-2.6.26.tar.bz2
之后进入Linux-2.6.26文件夹内。
如果机器上已有2.6.26内核代码,也可以直接使用,但要清除上次编译的遗留物,可以
make distclean
准 备结束后,我们开始配置内核。在本机编译内核时,我们可以直接make menuconfig之类,就合根据我们机器当前内核的配置生产.config文件。但对于嵌入式当然就很困难。幸亏Linux支持上百种平台。对于不同 平台都有默认的配置文件,对于我们使用的arm,可以在/arch/arm/configs文件夹下看到
我们要根据自己所使用的平台来选择。如使用PXA270的,可以选择em_x270_defconfig。之后只要运行
make ARCH=arm CROSS_COMPILE=arm-Linux- em_x270_defconfig
对于我们使用的两个宏ARCH和CROSS_COMPILE,分别是指我们选择的体系结构(Linux在内核代码树arch文件夹中列出支持的体系结构)和交叉编译器的前缀。
之后就可以再运行
make menucnfig
进行修改。
之后就是编译了,对于嵌入式大多是编译成镜像文件,这里编译成zImage
make ARCH=arm CROSS_COMPILE=arm-Linux- zImage
如果有选择模块,还要
make ARCH=arm CROSS_COMPILE=arm-Linux- modules
和
make ARCH=arm CROSS_COMPILE=arm-Linux- INSTALL_MOD_PATH= modules_install
宏INSTALL_MOD_PATH是选择模块安装的根目录,这里我们选择的是我们为嵌入式准备的寄生文件系统路径,默认是本机的根目录(即/),如果设置这个宏会把模块安装大/lib/modules文件夹中,有时候这是灾难性的。
这 样就搞定了,是不是缺了什么?我们差点忘记了编译好的zImage。他在什么地方?对于一般而言是在 Linux-2.6.26/arch/$ARCH/boot里,本次是在 Linux-2.6.26/arch/arm/boot 找到他了,一看居然有1.5兆这么大。怎么变小能?关键就是在make menucnfig阶段了,这阶段才是技术要求所在。