内核设计篇

3/5/2006来源:Shell教程人气:20034

如何定制2.6内核更容易

作者:解放军信息工程大学冯立功编译发文时间:2004.12.07
作为一个积极推进软件业革新的领头羊,linux操作系统已成为开放系统运动的优秀代表。作为各种Linux发行版的共同核心,Linux内核多年来一直不间断地引进新技术进行革新,逐步提高自身的各种性能,例如可伸缩性、可用性和技术支持等。众多的改进都是围绕增加对其它架构、处理器、总线、端口和外设的支持而进行的。从Linux2.2内核开始,因为每个新内核的诞生都要经过严格的检验和测试,所以其开发周期大约都保持在两年左右。

除了增加的新功能外,每个新版稳定的Linux内核都会对大量原有功能进行改进,对内部接口进行定制使其更加标准,提高与其它设备的兼容性,并简化对新设备和子系统的支持过程。这些改进中的一部分只与内核开发人员和硬件驱动程序编写者有关,而其它的则影响到系统启动、系统管理和应用软件设置等方面。

如果用户正在把现有的应用软件移植到一个基于2.6内核的Linux套件上,例如TimeSysLinux系统,那么也许不会花费多少功夫,原因是TimeSysLinux的性能已大大改进。此外还增加了对行业标准的支持,例如对POSIX的支持。然而,如果用户正在进行硬件驱动、定制系统级的应用软件或可定制的Linux根文件系统的移植,那么可以参考内核在内部构件、子系统、系统启动和系统管理上发生的基本变化。这会为用户节省许多开发时间,并大大减少用户在移植过程可能遇到的难题。

这里主要介绍如何将现有的硬件驱动、应用软件和嵌入式Linux组件移植到一个基于2.6内核的Linux套件中(我们以TimeSysLinux为例子)。并结合一些软件工具为用户提供所需的信息,帮助用户加快开发进程,控制软件转换和改进成本,甚至可以加快基于Linux系统的设备、系统和应用软件进入市场的速度。这里所列举的软件是TimeStormLinux工具套件之类的工具软件。它们可以在开发、移植、调试和验证周期等方面为用户提供帮助。

基于2.6内核的设置

内核是Linux操作系统的核心。它管理着所有的系统线程、进程、资源和资源分配。与其它操作系统不同的是,Linux操作系统允许用户对内核进行重新设置。用户可以对内核进行“瘦身”,增加或消除对某些特定设备或子系统的支持。在开发嵌入式系统时,开发人员经常会减少系统对一些无用设备的支持,将节省下来的内存分配给各种应用软件。

Linux内核对各种硬件和端口的支持要靠各种硬件驱动程序来实现。这些驱动程序可以被直接写入内核,也可以针对某些特定硬件在需要时自动加载。通常情况下,可以被自动加载进内核的内核编码称为自动加载内核模块。

Linux内核的设置是通过内核设置编辑器完成的。内核设置编辑器可对每个内核设置变量进行描述,帮助用户决定哪些变量需要被清除,哪些需要写入内核,或者编成一个可加载内核模块在需要时进行加载。

建立新内核的第一步是对内核进行设置。当用户对内核进行设置时,必须先对内核和其它可加载内核模块进行编写和安装。如果用户要对原系统的内核进行构建设置,那么这一步是十分简单的。但如果用户要将原系统内核编译应用于其它目标系统,那么这一步就会变得相对困难一些。例如,当用户修改嵌入式系统的Linux内核时,很可能会先在一个桌面系统上对内核进行设置,然后再通过一套编译工具将其移植到嵌入式系统中。此类编译工具被称为交叉编译程序。

交叉编译程序在一类系统运行的同时会生产一系列二进制编码。这些编码是专门为另一类系统而设计的。两种系统有着完全不同的处理器或架构。在对内核或模块的编译过程中,用户必须通过多种多样的环境变量或Makefile设置来确定具体的交叉编译程序。用户还可以直接使用一个诸如TimeSys之类的集成开发环境来实现这一目标。TimeStorm可以帮助用户很容易地选择交叉编译程序。同样,当用户对Linux的内核和模块进行交叉编译使之应用于嵌入式系统时,如果没有TimeStorm之类的软件,那么用户必须通过额外的设置和Makefile手工修改,才能确定内核和模块的安装过程和安装位置。

基于Linux2.6内核的设置较以往已经简便多了。Linux2.6内核采用新的图形设置编辑器使内核的编译和设置变量的从属关系确定变得更加简单。过去基于2.x的内核为用户提供了四种基本的内核设置编辑器:
◆config服务于内核设置的一个冗长的命令行界面;
◆oldconfig一个文本模式的界面,主要包含一个已有设置文件,对用户所发现的内核资源中的设置变量进行排序;
◆menuconfig一个基于光标控制库的终端导向编辑器,可提供文本模式的图形用户界面;
◆xconfig一个图形内核设置编辑器,需要安装X-Window系统。

前三种编辑器在设置2.6内核时仍可使用,在运行“makexconfig”后,原有的界面被两个新的图形设置编辑器所代替。这需要具体的图形库和X-Window系统的支持。另外,用户还可以通过“makedefconfig”命令,利用所有内核设置变量的缺省值自动建立一个内核设置文件。

用新图形编辑器设置内核

当用户运行“makexconfig”命令后,会产生一个更加健壮的新的图形编辑器。新的内核设置编辑器使用Trolltech公司的Qt工具套件。许多Linux系统并没有集成Qt工具套件,但是用户可以从http://www.trolltech.com的网站上免费下载它。图1展示了新的内核设置界面。

如图1所示,内核设置编辑器是一个由三个面板组成的图形界面,左侧面板可展开的树状结构显示有效的内核设置选项,右上面板显示左侧面板选择项的具体设置信息,右下面板显示所选设置选项的相关帮助信息。

图12.6内核设置界面

图2gconfig内核编辑器界面


当用户执行命令“makegconfig”时,屏幕会显示第二个图形设置编辑器。该设置编辑器最初显示一个由两个面板组成的图形界面,如图2所示。用户可以通过鼠标点击工具栏上的“Split”按钮,将gconfig改变成与xconfig界面类似的图形界面。该内核设置编辑器需要GTK2(GIMPToolkit,Version2)工具的支持。大多数桌面Linux都自带有GTK2工具。

通常情况下,由“makegconfig”命令调出的编辑器界面不如“makexconifg”命令调出的界面详尽和易用。除非用户拥有一些诸如TimeSys、TimeStormLinux开发套件之类的设置工具,不然建议用户使用“makexconfig”命令对内核进行设置。

内核设置技巧

内核设置选项内容很多,这里限于篇幅只列举几个通用的技巧和建议。对Linux2.6内核的设置要比以前版本简单得多,但是它却有着更多的设置选项。这意味着对于一个无法在硬件上启动并运行,或者无法支持现有应用软件的内核进行设置将变得更加容易。

作为一个常用技巧,在xconfig或gconfig编辑器Options选单下提供了几种非常有用的内核设置选项。
◆Showalloptions选项。系统显示所有可用的内核设置选项,即使是某选项由于各种原因无法被选取(通常情况下是由于与之相关的选项未被选取)。这一选项可以帮助用户了解所需要的选项是否存在于内核资源中。
◆Showdebuginfo选项。系统显示与帮助窗口中所选选项相关的内核设置变量。这一选项可以帮助用户了解激活其它内核设置选项所需的前提选项。
◆ShowName选项。系统显示与每个内核设置选项相关的内核设置变量的名称,可以帮助确定内核设置变量间的从属关系。

如果用户已经根据需要对内核进行了设置,而且用来对内核进行编译和安装的“make”命令与Linux2.6内核不同,那么为了方便起见,用户可以使用“makehelp”命令来显示设置2.6内核的所有有效选项。

其它的“make”命令还包括“makedep”。该命令可以提供变量从属关系信息。此外,“make”命令还可以对内核和其它选择安装的驱动程序进行编译。其中,“makeinstall”和“makemodules_install”是两个基本、常用的“make”命令。

建立新的内核设置文件

对Linux内核进行设置的有效手段之一是使用“makeoldconfig”命令。该命令可以在现有内核设置文件的基础上建立一个新的内核设置文件。如果用户目前没有内核设置文件,可以通过执行这条命令或启动任意一个图形内核设置编辑器建立一个。

在内核升级设置过程中,“makeoldconfig”命令十分有用。“makeoldconfig”命令可以使内核设置进程读取用户已有的设置信息,从而提示用户输入某一内核设置变量的值。这一变量在已有的内核设置文件中是找不到的。

现在进行一个测试,将现有的内核设置从基于2.4内核的Linux套件移植到基于2.6内核的Linux套件中。首先将名为.config的文件复制到Linux2.6内核源代码所在的目录下。例如,这里要把一个定制设置文件从基于2.4内核的TimeSysLinux4.1移植到基于2.6内核的TimeSysLinux中,主要步骤如下:

#cd/opt/timesys/linux/4.1/iq80315/src/2.4.21-timesys-4.1/kernel
#cp.config/opt/timesys/linux/5.0/iq80315/src/2.6-timesys-5.0/kernel
#cd/opt/timesys/linux/5.0/iq80315/src/2.6-timesys-5.0/kernel
#makeoldconfig

这时,系统会提示用户输入表示当前所有未定义内核设置变量的值。输入完毕后,“makeoldconfig”命令会自动生成一个升级的内核设置文件。这时用户就可以着手建立新内核了。当然用户也可以继续使用功能更强大的内核设置编辑器对内核进行设置,例如xconfig。

小结

对于基于2.6内核的Linux发行版而言,简化系统设置显得更加重要。新的图形设置编辑器大大简化了用户对2.6内核的设置。目前,TimeSys工具软件在2.6内核设置中的应用十分广泛。然而,随着新技术的不断涌现,每个新的架构、端口、子系统和其它设备都会增加内核设置变量的数量,这些变量都是用户需要了解的。

其它软件工具可为内核设置提供集成支持,例如TargetConfigurator。作为TimeStorm Linux开发套件中的一个组件,TargetConfigurator由OpenSourceEclipse架构提供动力。为了进一步简化内核设置,TimeSysLinux包括已定制的内核设置文件,这些文件将带来良好的性能、常规开发方式和较强的纠错能力。无论用户使用哪种工具和套件,对Linux2.6内核的设置都改进了很多。