前面说到要做linux底层开发或者编写Linux的驱动,必须建立内核源码树,之前我们提到过在本机上构建源码树—-Linux内核剖析(三),其建立的源码树是针对i686平台的,但是我么嵌入式系统用的是arm平台,这就需要我们为arm板交叉构建一份板子可用的内核源码树。
首先下载与你嵌入式系统平台版本号一致的linux内核,我的版本为2.6.35,当然如果你使用的是之前做好的板子,那么内核源码可能已经有了
我们解压缩我们的内核源码,并进入到内核源码的根目录
tar -jxvf linux-2.6.35.tar.bz2
cd linux-2.6.35
然后执行make mrproper 命令,该命令确保源代码目录下没有不正确的.o文件以及文件的互相依赖。
因为我是为arm平台编译内核,需要用到交叉编译工具(可从ftp://ftp.arm.linux.org.uk/pub/armlinux/toolchain站点下载)。
清理垃圾文件(非必须)
Linux下面去编译项目之前,一般常会用make mrproper去先删除之前编译所生成的文件和配置文件,备份文件等,其中,mrproper和distclean,clean之间的区别,Linux内核源码根目录下面的makefile中,有很清晰的解释:
help:
@echo 'Cleaning targets:'
@echo ' clean - Remove most generated files but keep the config and'
@echo ' enough build support to build external modules'
@echo ' mrproper - Remove all generated files + config + various backup files'
@echo ' distclean - mrproper + remove editor backup and patch files'
mrproper到底是什么意思呢?为什么起了个这么个看起来如此诡异的名字。
在英文wiki对Mr. Clean的解释提到了此点;
http://en.wikipedia.org/wiki/Mr._Clean"make mrproper" is a command in the Linux kernel build system, used to "clean up" all files from past builds and restore the build directory to its original clean state. The reason "make mrproper" is used instead of "make mrclean" is because Linus Torvalds, the father of Linux, was familiar with the name "Mr. Proper" as this is the brand widely known in Europe."
总的来说,就是:首先,我们要知道的是make mrproper想要做的事情是,清理旧的编译生成的文件及其他配置等文件,所以,相当于Clean,即我们在现实世界中用清洁剂去清洁卫生,清理旧的,不再需要的,脏东西。而现实世界中,保洁(P&G)公司的,有一个清洁产品方面的品牌,在美国叫做Mr.Clean,在欧洲叫做Mr.Proper,所以编译之前的清理旧东西的命令,原先是用的make mrclean,即make Mr.Clean。只是后来被Linux之父Linus Torvalds改成了make mrproper,即make Mr.Proper。所以,现在就变成了用make mrproper来清理之前的东西了。
看帮助可以发现删除的文件范围从小到大依次为:
make clean < make mrproper < make distclean
查看源码目录树的顶层目录下的Makefile求证, 可以发现, 执行make mrproper, 会先执行make clean, 执行make distclean之前, 会先执行make mrproper。
再回到make help的结果:
make clean 删除大多数的编译生成文件, 但是会保留内核的配置文件.config, 还有足够的编译支持来建立扩展模块
make mrproper 删除所有的编译生成文件, 还有内核配置文件, 再加上各种备份文件,所以几乎只在第一次执行内核编译前才用这条命令
make distclean mrproper删除的文件, 加上编辑备份文件和一些补丁文件。
接着就是配置内核,可以使用下面命令中的一个:
make config(基于文本的最为传统的配置界面,不推荐使用)
make menuconfig(基于文本菜单的配置界面, 字符终端下推荐使用)
make xconfig(基于图形窗口模式的配置界面,Xwindow下推荐使用,要求QT被安装)
make gconfig(要求GTK+被安装)
make oldconfig(如果只想在原来内核配置的基础上修改一些小地方,会省去不少麻烦)
make defconfig (使用源码中默认的config配置)
目的都是生成一个.config文件,