| 论坛注册| 加入收藏 | 设为首页| RSS
Google
您当前的位置:首页 > Linux频道 > Linux开发区 > 内核研究

剖析Linux 2.6内核移植—应用程序篇

时间:2006-09-20 10:47:42  来源:赛迪网  作者:
hrtLinux联盟
hrtLinux联盟

升级系统启动和关闭程序 hrtLinux联盟

正如上文提到的,与2.6内核相关的变化,诸如不同的文件名、模块名和新功能,使得用户在增加2.6内核启动选项时需要对系统的启动程序进行升级。 hrtLinux联盟

用户需要改变的文件依赖于用户的系统启动顺序和系统执行的启动和关闭程序。不同的Linux套件在启动过程中使用的具体文件不同,尽管大多数基于SysVinit和initscripts套装软件。可以同时应付2.4内核和2.6内核启动过程的增强版套装软件可以直接由支持Linux系统的生产商提供。如果无法获得此类套装软件,那么下面将告诉用户需要做哪些改变。 hrtLinux联盟

如果用户要建立一个双内核启动系统,但是Linux生产商无法提供升级后的启动和关闭程序,那么根据用户选择的启动内核为启动程序设置条件是一个不错的解决方案。最简单的方法是,在识别运行内核的基础上,设置一个环境变量,示例如下: hrtLinux联盟

#VERSION=`uname -a | sed -e 's;.* \(2\.6\).*;;'`

接下来用户可以检查这一变量的值,并执行与内核版本相适应的命令,例如: hrtLinux联盟

if [ "x$VERSION" = "x" ] ;
then       VERSION="2.4"fiif [ "x$VERSION" = "x2.6" ] ; 
then  action $"Mounting sysfs filesystem: "
 mount -n -t sysfs /sys /sysfi

使用2.6内核时,用户需要对启动程序所做的第一个修改便是添加安装sysfs文件系统的命令行。用户的系统启动程序之一,也许是/etc/rc.sysint或是 /etc/rc.d/rc.sysinit,包含着一个安装proc系统的入口。这个入口可以在系统启动时在/proc目录下安装Proc文件系统。 hrtLinux联盟

用户还需要在安装点/sys(用户可以使用“mkdir /sys”命令建立)下为sysfs文件系统的安装添加一个类似的入口。该入口在文件中的位置与/proc文件系统的安装位置十分类似。 hrtLinux联盟

同样,在2.6内核下,proc文件系统中包含内核符号信息的文件名也发生了变化。为了保证启动程序可以找到内核符号,用户需要将系统启动文件中/proc/ksyms的所有示例变成/proc/kallsyms,后者的文件名可以被Linux2.6内核使用。 hrtLinux联盟

为了迎合2.6内核的特点,proc文件系统中的一些用于2.4内核的文件已移植到sysfs文件系统中。例如,USB硬件列表在2.4内核下存储在/proc/bus/usb/devices文件中,而在2.6内核下则存储在/sys/bus/usb/devices文件中。 hrtLinux联盟

此外,用户还要对系统关闭过程中调用的所有程序进行相应的修改。例如,在Red Hat系统中,关闭进程会调用/etc/init.d/halt程序。该程序引用的是proc文件系统,而不是同等的sysfs文件系统。 hrtLinux联盟

内核编译的简便方法 hrtLinux联盟

在前面第一篇文章中,曾详细介绍了Linux 2.6内核的设置。如果用户正在为一个已有的系统安装2.6内核,并且自己对内核进行设置,那么最简单的方法是重新使用现有系统中的内核设置文件。用户可以通过“make oldconfig”命令来设置目标。它是一个基于文本的接口,可以调出已有的设置文件并对所有从内核源代码中找到的设置变量进行排序。 hrtLinux联盟

要想顺利地将现有系统移植到2.6内核,还应注意在同一时间应尽可能少地修改。前文已经介绍了对套装软件、系统设置文件和启动程序的修改。然而,如果用户还要为系统增加ALSA支持,并按上文建议的在移植到2.6内核前便将系统升级至ALSA,那么用户在确定2.6内核系统工作正常前,不要改变ALSA支持作为一个可加载内核模块的特性。这样,即使内核无法正常工作,用户仍然可以在集成ALSA支持的基础上对内核进行重新设置。 hrtLinux联盟

如果用户要将一个商业Linux套件移植到2.6内核,那么也许不必为系统硬件的细节担心。诸如Red Hat和SuSE等商业Linux套件的优势之一就是它们拥有众多集成或可加载内核模块,可以为各种各样的PC或嵌入式硬件设备提供支持。 hrtLinux联盟

如果正在移植一个商业Linux系统,而且拥有它的源代码和内核设置文件,那么可以先按照上文的指示将设置文件移植到2.6内核下,并可激活用户感兴趣的各种功能和支持,例如ALSA。然后,便可以安装设置2.6内核和各种相关模块,重启并测试系统。如果用户没有系统的设置文件,那么可以通过执行2.6内核源代码目录下的“make defconfig”命令,建立一个缺省的设置文件。不同的系统架构和不同的处理器拥有不同的内核设置变量。用户可以通过在命令行指定目标的方式,看到不同架构下的设置变量。以PowerPC (PPC)系统为例,指定命令如下: hrtLinux联盟

#make defconfig ARCH=ppc

生成缺省的2.6内核设置文件后,用户必须对内核进行设置,以便提供系统硬件所需要的驱动程序。 hrtLinux联盟

这里无法介绍所有平台的硬件识别方案,但是在大多数Linux套件中,硬件识别最常用的两个工具是Lspci和Lsusb。Lspci工具可以显示所有PCI总线信息,并列出与它们相连的硬件设备。Lspci对于集成声卡和显卡的X86主板尤其有用,因为它可以识别使用在主板PCI电路中的确切芯片。Lsusb工具可提供USB总线和连接设备的同类信息。 hrtLinux联盟

在建立内核设置文件的过程中,用户需要的其它硬件信息还包括CPU的型号。用户可以使用xconfig设置编译程序中的Processor或Processor type and features面板设置这些信息。 hrtLinux联盟

用户也可以从/proc/cpuinfo文件中找到有关处理器型号的信息,只要执行“cat /proc/cpuinfo”命令就可以了。 hrtLinux联盟

最后,还需要根据系统定制的内核功能,对新内核设置文件进行一些修改。例如,用户要查看内核支持或使用的文件系统。执行“cat /proc/filesystems”命令,从/proc/filesystems文件中获得有关文件系统类型的信息。例如,SuSE Linux系统作用的根文件系统是Reiserfs文件系统,但是Reiserfs文件系统在2.6内核下的缺省状态是未被激活的。同样,在2.6内核下,缺省状态下无法使用初始RAM,也不支持访问SMB和CIFS文件系统。这些都需要事先进行设置。 hrtLinux联盟

小结 hrtLinux联盟

如果用户已经按照这里介绍的方法移植或建立了内核设置文件,并对它进行了设置,那么就可以着手搭建并安装内核和需要的模块了。内核的搭建可以通过顶级内核源代码目录下的“make”命令来完成。“make”命令成功执行后,如何安装内核和模块需要看系统的类型了。如果要升级的是一个桌面x86系统,那么可以使用“make install”和“make modules_install”命令安装内核和相关模块。如果用户正在为一个嵌入式系统交叉编译2.6内核,那么“make”命令的目标要根据内核二进制命令的安装位置和方式来确定。 hrtLinux联盟

综上所述,向2.6内核移植桌面系统虽然需要许多步骤,但即使对于一个新手来说,这些步骤也并不困难。而移植专门Linux系统的过程就复杂得多了。TimeSys公司的TimeStorm Linux开发套件使专门系统向新内核和新硬件的移植变得十分简单。hrtLinux联盟

来顶一下
近回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
相关文章
栏目更新
栏目热门