Linux内核2.6版本已经对ARM处理器有很好的支持,并且对三星公司的S3C2440提供一定支持。但是,嵌入式硬件系统的差别很大,移植Linux内核到新的开发板仍然需要修改或者增加针对特定硬件的代码。
Linux内核使用了复杂的工程文件结构,向内核添加新的代码文件需要让内核工程文件知道才行。对于ARM处理器来说,相关的文件都存放在arch/arm目录下:
-rwxr--r-- 1 gonglei gonglei 21371 Dec 16 2006 Kconfig
// 选项菜单配置文件
-rw-r--r-- 1 gonglei gonglei 3847 Aug 29 2005 Kconfig.debug
-rw-r--r-- 1 gonglei gonglei 7886 Oct 12 2005 Makefile
// make使用的配置文件
drwxr-xr-x 4 gonglei gonglei 4096 Apr 16 19:17 boot
// ARM处理器通用启动代码
drwxr-xr-x 2 gonglei gonglei 4096 Apr 16 19:17 common
// ARM处理器通用函数
drwxr-xr-x 2 gonglei gonglei 4096 Aug 29 2005 configs
// 基于ARM处理器的各种开发板配置
drwxr-xr-x 2 gonglei gonglei 4096 Apr 16 19:17 kernel
// ARM处理器内核相关代码
drwxr-xr-x 2 gonglei gonglei 4096 Apr 16 19:17 lib
// ARM处理器用到的库函数
drwxr-xr-x 2 gonglei gonglei 4096 Aug 29 2005 mach-aaec2000
drwxr-xr-x 2 gonglei gonglei 4096 Aug 29 2005 mach-clps711x
drwxr-xr-x 2 gonglei gonglei 4096 Aug 29 2005 mach-clps7500
drwxr-xr-x 2 gonglei gonglei 4096 Aug 29 2005 mach-ebsa110
drwxr-xr-x 2 gonglei gonglei 4096 Aug 29 2005 mach-epxa10db
drwxr-xr-x 2 gonglei gonglei 4096 Aug 29 2005 mach-footbridge
drwxr-xr-x 2 gonglei gonglei 4096 Aug 29 2005 mach-h720x
drwxr-xr-x 2 gonglei gonglei 4096 Aug 29 2005 mach-imx
drwxr-xr-x 2 gonglei gonglei 4096 Aug 29 2005 mach-integrator
drwxr-xr-x 2 gonglei gonglei 4096 Aug 29 2005 mach-iop3xx
drwxr-xr-x 2 gonglei gonglei 4096 Apr 17 10:12 mach-ixp2000
// Intel IXP2xxx系列网络处理器
drwxr-xr-x 2 gonglei gonglei 4096 Aug 29 2005 mach-ixp4xx
// Intel IXp4xx系列网络处理器
drwxr-xr-x 2 gonglei gonglei 4096 Aug 29 2005 mach-l7200
drwxr-xr-x 2 gonglei gonglei 4096 Aug 29 2005 mach-lh7a40x
drwxr-xr-x 2 gonglei gonglei 4096 Aug 29 2005 mach-omap1
drwxr-xr-x 2 gonglei gonglei 4096 Aug 29 2005 mach-pxa
// Intel PXA系列处理器
drwxr-xr-x 2 gonglei gonglei 4096 Aug 29 2005 mach-rpc
drwxr-xr-x 2 gonglei gonglei 4096 Apr 16 19:21 mach-s3c2410
// 三星S3C24xx系列处理器
drwxr-xr-x 2 gonglei gonglei 4096 Oct 10 2005 mach-sa1100
drwxr-xr-x 2 gonglei gonglei 4096 Aug 29 2005 mach-shark
drwxr-xr-x 2 gonglei gonglei 4096 Aug 29 2005 mach-versatile
drwxr-xr-x 2 gonglei gonglei 4096 Apr 17 10:11 mm
// ARM处理器内存函数相关代码
drwxr-xr-x 2 gonglei gonglei 4096 Apr 16 19:17 nwfpe
drwxr-xr-x 2 gonglei gonglei 4096 Aug 29 2005 oprofile
drwxr-xr-x 2 gonglei gonglei 4096 Aug 29 2005 plat-omap
drwxr-xr-x 2 gonglei gonglei 4096 Jun 24 2008 tools // 编译工具
drwxr-xr-x 2 gonglei gonglei 4096 Aug 29 2005 vfp
在arch/arm目录下有许多的子目录和文件。其中以mach字符串开头的子目录存放某种特定的ARM内核处理器相关文件,如mach-s3c2410目录存放S3C2410、S3C2440相关的文件。另外,在mach目录下还会存放针对特定开发板硬件的代码。
q boot目录存放了ARM内核通用的启动相关的文件;kernel是与ARM处理器相关的内核代码;mm目录是与ARM处理器相关的内存管理部分代码。以上这些目录的代码一般不需要修改,除非处理器有特殊的地方,只要是基于ARM内核的处理一般都使用相同的内核管理代码。
q Kconfig文件是内核使用的选项菜单配置文件,在执行make menuconfig命令的时候会显示出菜单。Kconfig文件描述了菜单项,包括菜单项的属性,与其他菜单项的依赖关系等。通过修改Kconfig文件可以告知内核有关编译的宏,内核顶层的Makefile通过Kconfig文件知道需要编译哪些文件,以及连接关系。
q Makefile文件是一个工程文件,每个体系结构的代码中都有该文件。Makefile文件描述了当前体系结构目录下需要编译的文件以及对应的宏的名称。内核顶层Makefile通过Kconfig文件配置的宏,结合Makfile定义的宏关联的代码文件去链接用户编写的代码。
通过分析ARM处理器体系目录的结构,加入针对mini2440开发板的代码主要是修改Kconfig文件、Makeifle文件、以及向mach-s3c2410目录加入针对特定硬件的代码。