写点什么

特定系统的 Linux 的构建

用户头像
韩超
关注
发布于: 2020 年 04 月 22 日
特定系统的Linux的构建

1  Linux内核的移植

Linux可以支持多种硬件平台,Linux内核移植的概念是在使用其大部分的公用代码的情况下,增加如下的两个部分:

  •  针对处理器移植的部分。

  •  针对各种驱动程序的构建部分。

这两部分的工作都是硬件相关的,前者是对处理器核心运行的部分,通常涉及CPU、内存、中断、定时器、DMA等部分,后者是针对平台各种设备的Linux驱动程序的实现。

对于某个硬件平台的Linux移植工作如图所示。



对于特定硬件平台的Linux系统的构建主要包括以下几个部分:

  •   全局的配置文件是特定平台的defconfig文件,它可以生成.config文件,但不是简单的复制关系。

  •  公共和特有的内容均在defconfig文件中定义。

在arch/<arch>/目录中包含其特定的内容,其中的mach-<mach>表示某个机器的目录,plat-<plat>表示某个平台的目录,其中放置自身头文件和实现文件。

  每个体系结构均有移植的核心结构。ARM体系结构的核心是arch/arm/include/asm/ mach/arch.h文件中的名为machine_desc的结构体。

2  ARM处理器上运行的Linux系统

在ARM处理器运行的Linux系统也称为ARM-Linux。ARM是标准Linux支持的几种主要体系结构之一。Linux是目前非常流行的开源操作系统,而ARM是目前嵌入式领域中最为流行的32位处理器,ARM与Linux的结合在嵌入式系统中有着非常广泛的应用空间。

在ARM处理器上运行的标准Linux与PC的Linux使用着基本相同的内核(包括进程调度、内存管理、进程间通信、虚拟文件系统、网络几个部分)。在Linux操作系统中,无论基于ARM的Linux和基于x86 PC的Linux,绝大多数使用C语言编写的操作系统内核都是相同的,只有部分与体系结构相关的代码使用相应的汇编语言编写。因此,这使得很多在桌面Linux的程序都可以很容易移植到嵌入式的ARM系统中。

基于ARM的标准Linux和基于x86的桌面Linux使用类似的内存管理系统,使用虚拟内存到物理内存的映射。当然,它们之间也存在区别,这主要源于ARM的MMU与i386体系结构的MMU在工作原理和逻辑上有着一些差别。

i386的MMU使用48位逻辑地址到32位线性地址,再到32位物理地址的转换。

ARM的MMU使用32位线性地址到32位物理地址的转换。在ARM MMU的硬件中,分成段模式和二级页模式两种,在标准Linux中,使用粗页表(coarse page)的二级页模式。在二级的页表中,使用4KB的小页。因此,ARM-Linux使用的ARM MMU硬件为粗页表-小页的方式,操作系统的代码也与之对应。

Linux将每种体系结构组成一个文件夹。以ARM体系结构为例,又包含了各种不同的处理器,操作对于它们的代码又不相同。因此,在arch/arm下包含了两方面的代码:与处理器无关的公共代码以及与处理器相关的部分。

根据代码的适用范围分类,Linux各个部分的源文件与功能关系如图所示。



arch/arm是ARM体系结构的专用目录,其中主要包含的内容如下所示。

  •   init:启动汇编入口,文件夹compressed中包含了压缩程序。

  •   configs:配置脚本。

  •   mm:与体系结构相关的内存管理代码。

  •   tools:包含各种体系结构的定义。

  • mach-<mach>:各种体系结构的代码,例如:mach-sa1100是对Intel Strong ARM内核的SA1100的支持,mach-at91rm9200是对Atmel ARM920T内核的AT91rm9200处理器的支持。

一般来说,每个mach-<mach>对应一种处理器,可能几种相似的处理器使用一个文件夹。对处理器进行操作系统移植的时候,实际上就可以根据相近的处理器出发,新建一个mach-<mach>文件夹。在进行整个Linux编译的时候,实际上所有的代码包括了与体系结构无关的部分+与体系结构相关的部分+与处理器相关的部分。

在ARM体系结构中,Linux可以支持的种类包括StrongARM、ARM720T、ARM920T以及XScale等。但是在移植的代码结构中,并没有对它们进行区分。事实上,这些ARM的体系结构更多体现在性能上,对于内核功能的差别固然有,但是比较小。相比之下,各种ARM处理器外围部件的差别却很大,尤其定时器和中断控制器等关系到内核运行的部件都不相同,这是对移植影响比较大的方面。

同样,对于同一种处理器还可以有不同的系统。在移植的过程中,针对相同处理器的不同系统,还需要做一定的改动。一般来说,这些改动体现在内存的基地址和容量上。

发布于: 2020 年 04 月 22 日阅读数: 99
用户头像

韩超

关注

还未添加个人签名 2017.10.20 加入

还未添加个人简介

评论

发布
暂无评论
特定系统的Linux的构建