Linux内核移植所谓Linux内核移植就是把Linux操作系统针对具体的目标机做必要裁剪之后,安装到目标机使其正确的运行起来。这个概念目前在嵌入式开发领域流传比较广泛。嵌入式Linux移植是指对Linux经过小型化裁剪后,能够固化在容量只有几K字节或几十K字节的存储器芯片或单片机中,应用于特定嵌入式场合的专用Linux操作系统。选择Linux内核内核(kernel)是所有Linux系统的主要软件组件。内核既是操作系统的心脏,也是它的大脑,因为内核控制着基本的硬件。内核是操作系统的核心,具有很多最基本功能,如虚拟内存、多任务和TCP/IP网络等功能。Linux内核本身并不是操作系统,它是一个完整操作系统的组成部分。RedHat、Novell、Debian和Gentoo等Linux发行商都采用Linux内核,然后加入更多的工具、库和应用程序来构建一个完整的操作系统。Linux内核移植前准备对于嵌入式Linux系统来说,有各种体系结构的处理器和硬件平台,并且用户需要根据需求自己定制硬件板。只要是硬件平台发生变化,即使非常小,可能也需要做一些移植工作。内核移植是嵌入式Linux系统中最常见的一项工作。当然,移植嵌入式Linux系统并不意味着该内核使用了任何特定的链接库或用户工具,建立嵌入式系统并不需要特别的内核。嵌入式系统中使用的内核与工作站或服务器上使用的内核主要的不同在于内核的配置方面。Linux内核移植是在Linux原内核基础上,通过对平台的选择设计来实现针对特定系统的内核版本。Linux内核的移植包含启动代码的修改、内核的链接及装入、参数传递、内核引导几个部分。其基本过程如下:(1)首先,获取某一版本的Linux内核源码,根据具体目标平台对源码进行必要的改写(主要是修改体系结构相关部分);(2)然后添加一些外设的驱动(如网卡驱动,USB驱动),打造一款适合于目标平台(可以是嵌入式便携设备也可以是其它体系结构的PC机)的新操作系统,也就是常说的内核配置或内核定制;(3)对该系统进行针对目标平台的交叉编译,生成一个内核映象文件(如zImage,uImage,bzImage);(4)最后通过一些手段(如TFTP)把该映象文件烧写到目标平台中。Linux内核源码Linux内核移植工作主要是修改跟硬件平台相关的代码,一般不涉及Linux内核通用的程序,移植的难度也取决于两种硬件平台的差异。通常对Linux源码的改写工作难度较大,它要求你不仅对Linux内核结构要非常熟悉,还要求你对目标平台的硬件结构非常熟悉。同时还要求你对相关版本的汇编语言较熟悉因为与体系结构相关的部分源码往往是用汇编写的。(1)BSP包开发Linux对于特定的硬件平台的软件就叫作BSP(BoardSupportPackage)。基于上面描述的困难,这部分工作一般由目标平台提供商来完成。比如说针对目前嵌入式系统中最流行的ARM平台,它的这部分工作就是由英国ARM公司的工程师完成的,我们所要做的就是从其网站上下载相关版本Linux内核的补丁(Patch)。把它打到我们的Linux内核上,再进行后续操作就行。针对某些特定的硬件平台可能并没有平台开发商提供的BSP,这就需要我们自己参考类似的BSP来开发程序。所幸的是,Linux内核已经支持了各种体系结构的很多种目标板,我们很容易从中找到跟自己硬件类似的目标板。参考内核已经支持的目标板来移植BSP,就如同使用模板开发程序一样。当然,我们选择的参考板不能仅凭兴趣或爱好来选取,选择参考板也有一定的原则。具体的原则如下:参考板与开发板具有相同的处理器,至少类似的处理器;参考板和开发板具有相同的外围接口电路,至少基本接口相同;Linux内核已经支持参考板,至少有非官方的补丁或者BSP;参考板Linux设备驱动工作正常,至少已经驱动基本接口。找到了参考板后,还要仔细分析内核代码以及参考板的BSP,分析平台相关的部分代码实现;分析内核编译组织方式;分析内核启动的初始化程序;分析驱动程序的实现;弄清楚哪些设备有驱动程序,哪些还没有等等。然后才能开始动手修改内核源代码。(2)内核源码分析我们需要进行Linux内核移植,那么首先,我们得下载一个干净的内核源码树,解压后,先来看看Linux内核源代码目录树结构。arch:存放各种与硬件体系结构相关的代码,每种体...