首页 理论教育TI处理器内核特殊代码结构

TI处理器内核特殊代码结构

【摘要】:之前介绍的TI处理器都属于ARM体系结构。表2-7TI处理器内核特殊代码目录说明表2-7中有一个奇怪的现象,新一代DaVinci处理器的代码不是在mach-davinci中,而是在mach-omap2中。从这个角度考虑,新一代Da Vinci芯片应该和OMAP2及以后的OMAP处理器在芯片内部结构方面相似度更高一些。因此笔者会以TI官方发布的Android开发包中DM 3730的内核代码为主,进行Linux内核及设备驱动的剖析,但是为了避免局限性,必要时会扩展到其他芯片,以及新版本的内核进行说明。

在Linux中,体系结构相关的代码都在arch目录下。之前介绍的TI处理器都属于ARM体系结构。在arch/arm目录下,和TI处理器相关的目录有mach-davinci、mach-omap1、mach-omap2、plat-omap。这些目录相关的说明见表2-7。

表2-7 TI处理器内核特殊代码目录说明

978-7-111-49426-3-Chapter02-22.jpg

表2-7中有一个奇怪的现象,新一代DaVinci处理器的代码不是在mach-davinci中,而是在mach-omap2中。这看似奇怪的问题,可以换个角度来考虑,既然把它们放到一起必定是有原因的,这个原因是什么呢?老话常说“物以类聚,人以群分”,软件也不例外,放到一起的代码相似度也要高一些。从这个角度考虑,新一代Da Vinci芯片应该和OMAP2及以后的OMAP处理器在芯片内部结构方面相似度更高一些。之前介绍DM 3730,DM 81XX和Sitara系列芯片在电源管理部分都有模块PRCM(DM 36X等老的Da Vinci没有PRCM模块),这个PRCM实际就是相似度的表现之一。另外芯片内的某些接口模块也是相同的。这些相似度使得将新一代Da Vinci芯片代码放入mach-omap2目录下管理更合适。新一代Da Vinci芯片的代码也一并在OMAP3的代码分支下管理,TI自己维护的代码分支如下:

978-7-111-49426-3-Chapter02-23.jpg

Sitara系列芯片的代码也是在mach-omap2目录下,但是代码管理在单独的分支下,TI自己维护的Sitara代码分支如下:

978-7-111-49426-3-Chapter02-24.jpg

了解软件系统一个好的方式是从Makefile入手进行分析。下面从linux-omap3分支的mach-omap2目录下的Makefile入手,了解OMAP和DaVinci芯片内核特殊代码的结构。其中OMAP相关的内容笔者会保留和DM 3730相关的部分(DM 3730属于OMAP3系列芯片),去除OMAP2和OMAP4相关的内容。(www.chuimin.cn)

978-7-111-49426-3-Chapter02-25.jpg

978-7-111-49426-3-Chapter02-26.jpg

978-7-111-49426-3-Chapter02-27.jpg

978-7-111-49426-3-Chapter02-28.jpg

978-7-111-49426-3-Chapter02-29.jpg

了解mach-omap2之后就该来认识plat-omap目录了。该目录主要为各种设备驱动提供统一的接口操作,以此屏蔽芯片的特殊操作,比如GPIO、DMA、时钟等。早期的Linux内核中并没有提供这些设备的统一操作接口,随着Linux内核的发展,逐渐增加了这些设备的统一接口,该目录存在的意义就必然减小。

至此可以明确从芯片的复杂度来看,DM 3730是最复杂的,相对于其他芯片来说其技术含量也是最高的。可以说如果能深刻理解DM 3730及其Linux内核代码,那么除了个别DM3730没有包含的设备接口驱动外,再看其他芯片的代码都是游刃有余的。因此笔者会以TI官方发布的Android开发包中DM 3730的内核代码为主,进行Linux内核及设备驱动的剖析,但是为了避免局限性,必要时会扩展到其他芯片,以及新版本的内核进行说明。