- 论坛徽章:
- 0
|
内核是操作系统最基本的部分。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内核决定一个程序在什么时候对某部分硬件操作多长时间。直接对硬件操作是非常复杂的,所以内核通常提供一种硬件抽象的方法来完成这些操作。硬件抽象隐藏了复杂性,为应用软件和硬件提供了一套简洁,统一的接口,使程序设计更为简单。
内核和用户界面共同为用户提供了操作计算机的方便方式。也就是我们在windows下看到的操作系统了。由于内核的源码提供了非常广泛的硬件支持,通用性很好,所以移植起来就方便了许多,我们需要做的就是针对我们要移植的对象,对内核源码进行相应的配置,如果出现内核源码中不支持的硬件这时就需要我们自己添加相应的驱动程序了。
一. 移植准备
1. 目标板
我们还是选用之前bootloader移植选用的开发板参数请参考上文的地址: http://bbs.eeworld.com.cn/thread-80832-5-1.html。bootloader移植准备。
2. 内核源码
这里我们选用比较新的内核源码版本linux-2.6.25.8,他的下载地址是ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.25.8.tar.bz2。
3. 烧写工具
我们选用网口进行烧写这就需要内核在才裁剪的时候要对网卡进行支持
4. 知识储备
要进行内核裁剪不可缺少的是要对内核源码的目录结构有一定的了解这里进行简单介绍。
(1)arch/: arch子目录包括了所有和体系结构相关的核心代码。它的每一个子目录都代表一种支持的体系结构,例如i386就是关于intel cpu及与之相兼容体系结构的子目录。PC机一般都基于此目录。
(2)block/: 部分块设备驱动程序。
(3)crypto: 常用加密和散列算法(如AES、SHA等),还有一些压缩和CRC校验算法。
(4) documentation/: 文档目录,没有内核代码,只是一套有用的文档。
(5) drivers/: 放置系统所有的设备驱动程序;每种驱动程序又各占用一个子目录:如,/block 下为块设备驱动程序,比如ide(ide.c)。
(6)fs/: 所有的文件系统代码和各种类型的文件操作代码,它的每一个子目录支持一个文件系统, 例如fat和ext2。
(7)include/: include子目录包括编译核心所需要的大部分头文件。与平台无关的头文件在 include/linux子目录下,与 intel cpu相关的头文件在include/asm-i386子目录下,而include/scsi目录则是有关scsi设备的头文件目录。
( init/: 这个目录包含核心的初始化代码(注:不是系统的引导代码),主要包含两个文件main.c和Version.c,这是研究核心如何工作的好的起点之一。
(9)ipc/: 这个目录包含核心的进程间通讯的代码。
(10)kernel/: 主要的核心代码,此目录下的文件实现了大多数linux系统的内核函数,其中最重要的文件当属sched.c。
(11)lib/: 放置核心的库代码。
(12) mm/:这个目录包括所有独立于 cpu 体系结构的内存管理代码,如页式存储管理内存的分配和释放等
(13)net/: 核心与网络相关的代码。
(14)scripts/: 描述文件,脚本,用于对核心的配置。
(15)security: 主要是一个SELinux的模块。
(16)sound: 常用音频设备的驱动程序等;
(17)usr: 实现了一个cpio。
(18)COPYING: GPL版权申明;
(19)CREDITS: 光荣榜;
(20) Kbuild: 一个包含了某些通用规则的编译文件;
(21)MAINTAINERS: 维护人员列表,对当前版本的内核各部分都有谁负责;
(22) Makefile: 第一个Makefile文件。用来组织内核的各模块,记录了个模块间的相互这间的联系和依托关系,编译时使用;仔细阅读各子目录下的Makefile文件对弄清各个文件这间的联系和依托关系很有帮助;
(23)ReadMe: 核心及其编译配置方法简单介绍;
(24)REPORTING-BUGS:有关报告Bug 的一些内容;
一 般在每个目录下都有一个.depend文件和一个Makefile文件。这两个文件都是编译时使用的辅助文件。仔细阅读这两个文件对弄清各个文件之间的联 系和依托关系很有帮助。另外有的目录下还有Readme文件,它是对该目录下文件的一些说明,同样有利于对内核源码的理解。 |
|