首页 理论教育 Linux内核移植实例

Linux内核移植实例

时间:2023-10-31 理论教育 版权反馈
【摘要】:对于源代码量达到上百万行的Linux内核来说,通过直接修改源代码的方式进行定制更加行不通。为此,Linux内核将哪些源文件需要被编译和链接的规则都记录在.config文件中。表13-1描述了Linux内核子目录结构。

Linux内核移植实例

1.Linux内核的定制原理

定制内核的根本目的是使内核能够根据嵌入式系统的软硬件需求为应用程序提供一个专用的运行平台。从实现的角度看,定制内核就是有针对性地定制内核的各项功能。定制程序功能的基本方法有两种:一种是直接修改程序的源代码,另一种是添加或删除源文件。但是,这两种方法的效率都很低,而且一旦出现错误也不容易改正,所以并不适合于代码量大的程序。对于源代码量达到上百万行的Linux内核来说,通过直接修改源代码的方式进行定制更加行不通。

为了提高定制的效率,Linux内核一方面严格按照模块化设计,优化代码结构,尽量减少或避免在定制过程中对源代码的修改;另一方面,通过定制Makefile文件的方式来控制源文件的编译过程(如哪些源文件需要被编译和链接等),以此来避免直接对内核的源文件进行添加或删除。这样一来,Linux内核的定制最终就可以通过Makefile文件的定制来实现。

在Linux内核中,几乎每个目录下都有Makefile文件。面对数量众多、结构复杂的Makefile文件,仅仅依靠手工的方式来定制Makefile同样是不合适的。为此,Linux内核将哪些源文件需要被编译和链接的规则都记录在.config文件中。由Makefile文件根据.config文件中的规则来控制源文件的编译过程。这样一来,Makefile文件的定制就又转变成了.config文件的定制。为了提高.config文件的定制效率,需要使用内核配置工具。它们分别通过以下命令进行启动。

(1)makeconfig

它采用文本的操作界面。用户通过输入y或n来配置内核的功能。由于需要逐一操作每个配置选项,所以配置的效率非常低。

(2)makemenuconfig

它采用菜单操作界面。内核配置菜单如图13-3所示。

978-7-111-33316-6-Chapter13-12.jpg

图13-3 内核配置菜单

完成选项配置后,界面会显示以下几种符号:

●“*”表示对应的功能被编译进内核。

●“[]”表示对应的功能未被编译进内核。

●“<M>”表示对应的功能被编译成模块。

●“<>”表示对应的功能可以当做模块编译。

使用菜单操作界面可以对各个功能进行随机配置,而不是逐一进行,所以配置的效率非常高。

makexconfig是基于Qt的图形化配置工具,可以使用鼠标进行配置。

本章使用的是“makemenuconfig”配置工具。因为在进行配置时,键盘的操作效率比鼠标高。

2.Linux内核源码结构

Linux内核文件数目将近两万,除去其他架构CPU的相关文件,支持S3C2410、S3C2440这两款芯片的完整内核文件也有一万多个。这些文件的组织结构并不复杂,它们分别位于顶层目录下的各个子目录中。表13-1描述了Linux内核子目录结构。

表13-1 Linux内核子目录结构(www.xing528.com)

978-7-111-33316-6-Chapter13-13.jpg

3.配置和编译内核源码

本章主要编译Linux-2.6.33.1版本的内核。

首先,修改内核根目录下的Makeflle文件,这个文件中需修改的内容包括以下两个方面。

指定目标平台:

978-7-111-33316-6-Chapter13-14.jpg

指定交叉编译器:

978-7-111-33316-6-Chapter13-15.jpg

978-7-111-33316-6-Chapter13-16.jpg

然后,修改MTD(内存技术设备)分区,在arch/arm/mach-s3c2440/mach-mini2440.c文件中,本章将NANDFlash划分为3个区,前1MB用于存放引导程序,接下来的3MB用于存放嵌入式内核,剩下的空间用来存放YAFFS文件系统。分区结构如下所示:

978-7-111-33316-6-Chapter13-17.jpg

接着,移植所需驱动,如DM9000网卡和LCD驱动等。

4.对YAFFS文件系统的支持

首先,获取YAFFS2的源代码

从http://www.aleph1.co.uk/cgi-bin/viewcvs.cgi/yaffs2/下载并且解压缩,YAFFS2目录下有一个脚本文件可以用来给内核打补丁。

978-7-111-33316-6-Chapter13-18.jpg

其中,/c参数用来将YAFFS2的代码复制到内核的相应目录下;path是内核源代码的路径。

其次,配置内核时选中YAFFS2支持:

978-7-111-33316-6-Chapter13-19.jpg

一切代码和配置工作都准备好后,在内核源码的根目录下会生成一个.config文件,它是内核的所有配置。进入到根目录执行“makeuImage”进行编译,它会在arch/arm/boot目录下生成可以用来进行NFS启动的uImage文件。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈