Win7下使用Oracle VM VirtualBox搭建的Ubuntu11.10虚拟机
1、建立交叉编译环境:
下载交叉编译器arm-linux-gcc-3.4.1.tar.bz2
(http://download.csdn.net/detail/bill_xiang/5112653),并解压:
tar jxvf arm-linux-gcc-3.4.1.tar.bz2
这样就会在当前目录产生一个./usr/local/arm/3.4.1目录,我进入local目录,将arm目录复制到/usr/local目录:
cd ./usr/local
cp –rf ./arm /usr/local
这里复制路径没有固定要求,主要在下面设置环境变量时相对应就行:
使用sudo vim /etc/profile在/etc/profile文件的最后加上
export PATH=$PATH:/usr/local/arm/3.4.1/bin/(如果已经存在PATH则只需将/usr/local/arm/3.4.1/bin/添加在后面即可,用”:”与其他变量分割)
然后使用source /etc/profile命令使我们对/etc/profile文件的修改立即生效,而不用重新登录,这样在编译内核时系统就可以找到我们所指定的编译器了
2、下载Linux内核源码
到www.kernel.org上下载linux-2.6.30.4.tar.bz2源码包,在当前用户目录(我的是:/home/billxiang/)下新建文件夹linux,复制linux-2.6.30.4.tar.bz2到linux文件夹中并解压:
mkdirlinux
cp ./linux-2.6.30.4.tar.bz2 ./linux
cd ./linux
tar jxvf linux-2.6.30.4.tar.bz2
这样会在我们新建的linux文件夹中产生一个linux-2.6.30.4文件夹
检查linux-2.6.30.4文件夹中Makefile,找到ARCH和CROSS_COMPILE的定义,改为:
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-
这是指定我们所编译内核所支持的cpu是ARM架构的,所使用的交叉编译器前缀是arm-linux-(这可以在我们所设置的环境变量所指定的目录下看到)
3、编译内核
下面就可以开始编译linux内核了,在linux-2.6.30.4文件夹下直接执行make:
make
却出现
cc1: error: invalid option ‘abi=aapcs-linux’
错误
具体原因及解决方法见http://blog.csdn.net/bill_xiang/article/details/8640789
这里通过make menuconfig命令,在配置菜单中将Kernel Features中的EABI项去掉即可:
make menuconfig
通过上下键选中Kernel Features,再回车进入
通过上下键选中EABI项后,按’n’键取消该项(使方括号中的’*’号消失),然后通过左右键选择Exit退出,并保存设置,再次make(需要等待一段时间):
make
编译成功后可以在./arch/arm/boot目录下看到生成的zImage文件,这里没有进行裁剪,大小为1.9MB
4、裁剪内核
内核裁剪我还是使用图形界面进行选择操作,还是使用上面用到的makemenuconfig命令:
make menuconfig
在图形菜单界面中通过上下键选中Networking suport后按’n’键取消对网络的支持,退出、保存设置后再次make:
make
等待一段时间编译完成后,再次查看生成的zImage文件发现只有1.5MB了,说明裁剪成功。