3移植Linux操作系统
本节将介绍如何编译可以运行于ARM处理器的Linux操作系统可执行文件。由于前面已经详细介绍了构建嵌入式Linux交叉编译环境,本节仅介绍如何重新编译linux内核源代码程序。
3.1配置前准备工作
Linux内核版本发布的官方网站是http://www.kernel.org。编译内核需要root权限,以下以linux-2.4.0版本内核为例介绍编译过程。
1.准备工作,解压源代码
把需要升级的内核拷贝到/usdsrc/下,命令为
让我们先来查看一下当前/usr/src的内容,有一个linux的符号链接,它指向一个类似于linux—X.X.X(对应于你现在使用的内核版本号)的目录。首先删除这个链接:
接着解压下载的源程序文件。如果所下载的是.tat.gz(.tgz)文件,请使用下面的命令:
如果所下载的是.bz2文件,例如,linux一2.4.0test8.tar.bz2,请使用下面的命令:
现在让我们再来看一下/usr/src下的内容,会发现现在有了一个名为linux的目录,里面就是我们需要升级到的版本的内核的源程序。之所以使用前面删除的那个链接就是防止在升级内核的时候会不慎把原来版本内核的源程序给覆盖掉了。这里需要同样处理:
另外,如果还下载了patch文件,比如,patch-2.4.0test8,就可以进行patch操作(下面假设patch-2.4.0test8已经位于/usr/src目录下了,否则需要先把该文件拷贝到/usr/src下):
该命令确保源代码目录下没有不正确的.o文件,以及文件的互相依赖。
确保/usr/include/目录下的asm、linux和scsi等链接是指向要升级的内核源代码的。它们分别链向源代码目录下的真正的、该计算机体系结构(对于PC机来说,使用的体系结构是i386)所需要的真正的include子目录。如:asm指/usr/src/linux/include/asm-i386等。若没有这些链接,就需要手工创建,按照下面的步骤进行:

这是配置非常重要的一部分。删除掉/usffinclude下的asm、linux和scsi链接后,再创建新的链接指向新内核源代码目录下的同名的目录。这些头文件目录包含保证内核在系统上正确编译所需要的重要的头文件。现在读者应该明白为什么我们上面又在/usr/src下“多余”地创建了个名为linux的链接了吧?
3.配置内核
接下来的内核配置过程比较繁琐,但是配置的适当与否与日后Linux的运行直接相关,有必要了解一下一些主要的且经常用到的选项的设置。配置内核可以根据需要与爱好使用下面命令中的一个:
·#make config(基于文本的最为传统的配置界面,不推荐使用)。
·#make menuconfig(基于文本选单的配置界面,字符终端下推荐使用)。
·#make xconfig(基于图形窗口模式的配置界面,Xwindow下推荐使用)。
·#make oldconfig(如果只想在原来内核配置的基础上修改一些小地方,会省去不少 麻烦)。
这3个命令中,make xconfig的界面最为友好,如果读者可以使用Xwindow,那么就推荐使用这个命令。如果不能使用Xwindow,那么就使用make menuconfig好了。界面虽然比上面一个差点,总比make config的要好多了。
选择相应的配置时,有3种选择,它们分别代表的含义如下:
·Y—-将该功能编译进内核;
·N—-不将该功能编译进内核;
·M—编译成可以在需要时动态插入到内核中的模块。
如果使用的是make xconfig,使用鼠标就可以选择对应的选项。如果使用的是makemenuconfig,则需要使用空格键进行选取。此时会发现在每一个选项前都有个括号,但有的是中括号有的是尖括号,还有一种圆括号。用空格键选择时可以发现,中括号里要么是空,要么是“*”,而尖括号里可以是空,“*”和“M”这表示前者对应的项要么不要,要么编译到内核里;后者则多一样选择,可以编译成模块。而圆括号的内容是要在所提供的几个选项中选择一项。
在编译内核的过程中,最繁杂的事情就是配置工作,很多初学者不清楚到底该如何选取这些选项。实际上在配置时,大部分选项可以使用其默认值,只有小部分需要根据用户不同的需要选择。选择的原则是将与内核其他部分关系较远且不经常使用的部分功能代码编译成为可加载模块,有利于减小内核的长度,减小内核消耗的内存,简化该功能相应的环境改变时对内核的影响;不需要的功能就不要选;与内核关心紧密而且经常使用的部分功能代码直接编译到内核中。以下就常用的选项分别加以介绍。