【摘要】:首先Linux内核需要支持各种处理器,也就是要支持各种体系结构。Linux内核也是如此实现的,如图3-15所示。图3-15Linux内核体系结构相关代码目录接下来就要在编译系统中解决相应的问题。图3-16Linux内核体系结构无关具体实现从图3-16中可见,体系结构相关的主要部分是中断、任务切换、寄存器、系统调用以及系统初始化。
首先Linux内核需要支持各种处理器,也就是要支持各种体系结构。这就要求核心框架与是体系结构无关,另外编译系统可以简单地支持各种体系结构。
系统支持不同的体系结构,从软件管理的角度考虑,一个简单的办法就是将不同体系结构的代码放入不同的目录。Linux内核也是如此实现的,如图3-15所示。
图3-15 Linux内核体系结构相关代码目录
接下来就要在编译系统中解决相应的问题。在Linux内核根目录下的Makefile中包含如下内容:
(www.chuimin.cn)
可见Linux内核通过宏变量ARCH来定义具体的体系结构,并由宏变量SRCARCH来定义具体的体系结构相关代码目录。首先,ARCH转换为正确的体系结构源代码目录,然后使用体系结构相关的Makefile文件,这里直接引入相应目录的文件。还有一个重要的文件需要设定,这就是链接文件(由于不同的体系结构使用的地址空间会有差别)vmlinux-lds。可以看到编译不同的体系结构代码只要根据体系结构设定ARCH宏即可。
解决了编译的问题,就要看一下具体的实现如何做到体系结构无关了。做到体系结构无关采用的技术就是分层,将系统分为体系结构相关层和设备控制层(将体系结构相关代码封装为统一接口)。这样设备控制层之上的代码就是体系结构无关的代码,就可以在不同的处理器上重用了。具体的实现如图3-16所示。
图3-16 Linux内核体系结构无关具体实现
从图3-16中可见,体系结构相关的主要部分是中断、任务切换、寄存器、系统调用以及系统初始化。只要把这几部分通过统一接口封装,就可以在代码级别实现体系结构无关。
相关推荐