S5PV210Kernel移植2之内核源码目录

1.S5PV210适用的内核版本

1)2.6.35.7+android2.3/QT4.8.3

2)3.0.8+android4.0

2.本课程使用2.6.35.7版本内核讲解

3.源码从哪里来

1)之前讲过,我们使用2.6.35.7版本的内核。这个版本的内核有三种:第一种是kernel.org上的官方版本,第二种是三星移植过的,第三种是九鼎X210的移植版本。我们讲课时使用第三种内核来讲解,后面的移植实验使用第二种内核来移植。

2)源码在开发板光盘中有。可以自己去linux下解压然后make distclean清理然后再次打包传输到windows下去解压分析;也可以直接去我网盘中下载我打包好的。

3)解压后最终在windows下得到了一个kernel的源码目录树,这个源码目录就是九鼎以三星移植过的内核为原材料自己针对X210移植后的内核版本。

3.分析源码目录下的单个文件

1)Kbuild,Kbuild是kernel build的意思,就是内核编译的意思。这个文件就是linux内核特有的内核编译体系需要用到的文件。

2)Makefile,这个是linux内核的总makefile,整个内核工程用这个Makefile来管理的。

扫描二维码关注公众号,回复: 2205067 查看本文章

3)mk,是九鼎在移植时自己添加的,不是linux内核本身的东西。九鼎添加这个文件的作用是用这个文件来整体管理kernel目录的配置和编译,也就是说这个文件有点类似于我们之前移植uboot时自己创建的那个cp.sh。

4.简单讲一下linux内核的配置体系。

1)linux内核很庞大,里面模块很多,而且可配置性非常高。所以linux源代码的配置是一个很复杂的事情,必须要有一套很复杂的机制来保证linux内核可以被正确的配置。(对比一下uboot,uboot的配置项都是在xxx.h中,用宏定义来表示的。uboot的这种方式很依赖于人的水平,因为uboot的配置体系很简单。)

2)linux内核本身配置项有上千个,光靠人眼睛去看脑袋去记根本不可能,所以内核发明了一种体系用来帮助人进行简单化的配置。这种体系就是我们本课程中重点要研究的东西。

3)Kbuild、Kconfig等文件,都是和内核的配置体系有关的。

5.linux内核源码目录结构

1)arch。arch是architecture的缩写,意思是架构。arch目录下是好多个不同架构的CPU的子目录,譬如arm这种cpu的所有文件都在arch/arm目录下,X86的CPU的所有文件都在arch/x86目录下。

2)block。英文是块的意思,在linux中block表示块设备(以块(多个字节组成的整体,类似于扇区)为单位来整体访问),譬如说SD卡、iNand、Nand、硬盘等都是块设备。你几乎可以认为块设备就是存储设备。block目录下放的是一些linux存储体系中关于块设备管理的代码。

3)crypto。英文意思是加密。这个目录下放了一些各种常见的加密算法的C语言代码实现。譬如crc32、md5、sha1等。

4)Documentation。里面放了一些文档。

5)drivers。驱动目录,里面分门别类的列出了linux内核支持的所有硬件设备的驱动源代码。

6)firmware。固件。什么是固件?固件其实是软件,不过这个软件是固化到IC里面运行的叫固件。就像S5PV210里的iROM代码。

7)fs。fs就是file system,文件系统,里面列出了linux支持的各种文件系统的实现。

8)include。头文件目录,公共的(各种CPU架构共用的)头文件都在这里。每种CPU架构特有的一些头文件在arch/arm/include目录及其子目录下。

9)init。init是初始化的意思,这个目录下的代码就是linux内核启动时初始化内核的代码。

10)ipc。ipc就是inter process commuication,进程间通信,里面都是linux支持的IPC的代码实现。

11)kernel。kernel就是内核,就是linux内核,所以这个文件夹下放的就是内核本身需要的一些代码文件。

12)lib。lib是库的意思,这里面都是一些公用的有用的库函数,注意这里的库函数和C语言的库函数不一样的。在内核编程中是不能用C语言标准库函数,这里的lib目录下的库函数就是用来替代那些标准库函数的。譬如在内核中要把字符串转成数字用atoi,但是内核编程中只能用lib目录下的atoi函数,不能用标准C语言库中的atoi。譬如在内核中要打印信息时不能用printf,而要用printk,这个printk就是我们这个lib目录下的。

13)mm.mm是memory management,内存管理,linux的内存管理代码都在这里。

14)net。该目录下是网络相关的代码,譬如TCP/IP协议栈等都在这里。

15)scripts。脚本,这个目录下全部是脚本文件,这些脚本文件不是linux内核工作时使用的,而是用来辅助对linux内核进行配置编译生产的。我们并不会详细进入分析这个目录下的脚本,而是通过外围来重点学会配置和编译linux内核即可。

16)security。安全相关的代码。不用去管。

17)sound。音频处理相关的。

18)tools。linux中用到的一些有用工具

19)usr。目录下是initramfs相关的,和linux内核的启动有关,暂时不用去管。

20)virt。内核虚拟机相关的,暂时不用管。

总结:这么多目录跟我们关系很紧密的就是arch和drivers目录,然后其他有点相关的还有include、block、mm、net、lib等目录。

猜你喜欢

转载自blog.csdn.net/wangdapao12138/article/details/81071863