0 导言
跟着核算机技能、通讯技能以及Internet的飞速展开。嵌入式体系已得到越来越广泛的运用。与此一起,嵌入式体系的杂乱性也在不断添加,嵌入式操作体系现已成为其间最重要的组成部分。现在,市场上存在着很多的嵌入式操作体系,而在这些体系之中,兼有Linux和嵌入式长处的嵌入式Linux操作体系,凭仗其在结构明晰、源代码开放性、裁剪性好,开发与运用均易完结等方面的优势,具有巨大的市场前景和商业机会。当时嵌入式Linux的一个热门运用便是将Linux内核移植到一些典型的微操控器和微处理器上,供给操作体系层面支撑,以完结嵌入式体系用软件的开发。
此研讨依据Linux 2.6内核的嵌入式Linux体系,剖析了所面对的理论问题、关键技能,完结了Linux内核在ARM9渠道上的运转。
1 开发环境介绍
嵌入式IJnux移植是嵌入式体系开发的重要组成部分,它需求相应的软件组件支撑,一起又与方针硬件渠道关系密切。因而,在正式移植
前,首要应清晰嵌入式体系开发的流程与开发环境,再依据方针硬件渠道的特色和所挑选的软件组件,正确树立功用完善的穿插开发环境,最终拟定出合理的移植计划,然后使移植作业能够顺畅的进行。
1.1 ARM9硬件渠道
本次移植选用斯道ARM9开发板作为硬件渠道,其根本构成为中心板和底板(外设板或根本板),中心板上集成了SamsungS3C2410处理器、64 M的FLASH和64M的SDRAM,为运用研制供给了满足的空间,基板则供给了丰厚的外围接口。其硬件渠道结构如图l所示。
此完好的运用体系具有体积小、耗电低、处理能力强等特色,能够装载和运转嵌入式Linux操作体系。用户能够在这个体系渠道上自主进行软件开发。
1.2 Linux内核及处理器
现在用于嵌入式Linux体系的内核大多数运用2.4.x版,可是,跟着嵌入式微处理器功用的不断增强及其运用规模的日趋扩展,Linux-2.6版内核由于其针对嵌入式体系运用的显著特色,必将会越来越多的被运用于嵌入式体系移植与开发Linux体系之中。文中选用的是Linux-2.6版内核。
vivi是韩国mizi公司开发的bootloader,适用于ARM9处理器,支撑S3C2410X嵌入式ARM-Linux移植的运用处理器。和悉数的bootloader相同,vivi也有两种作业方式,即发动加载方式和下载方式。发动加载方式指在一段时刻后(这个时刻可更改)自行发动Linux内核,它是vivi的默许方式。下载方式则是指vivi为用户供给一个指令行接口,用户可通过接口运用指令。
2 体系移植计划
在硬件方面,为支撑NAND Flash引导方式,S3C2410A处理器在芯片内集成了4 KB的被称为steppingstone的SRAM。NAND Flash引导方式下,体系复位后NAND Flash中的前4位内容首要被复制到steppingstone,接着将steppingstone映射到nGCSO,即内存BankO开端她址为Ox00000000,随后体系开端正常引导。
相同,在软件方面,bootloader程序应被烧写到NAND Flash最前面的部分。一般bootloader程序大于4 KB,因而,在bootloader的前4 KB程序段中,有必要先完结内存SDRAM的初始化,并将本身彻底复制到SDRAM中,一起设置必要的仓库,然后跳转到SDRAM中去履行这一系列作业。这样方可完结后续的初始化体系资源及装载操作体系内核的使命。
本次移植运用ARM9开发板,通过跳线办法设置OM[1:0]引脚来支撑NAND Flash发动方式,因而,移植计划运用NAND Flash+SDRAM的存储方式,bootloader放在SDRAM中,内核和文件体系都放在NAND Flash中,依据选用的计划,整个体系移植要做的作业包含两方面:
Bootloader:为装载操作体系内核,支撑NAND Flash及网络下载和串口通讯,然后便利嵌人式ARM.Linux移植以开发调试。
Linux体系:支撑NAND Flash,并移植Cramfs+Yaffs混合文件体系;支撑NFS文件体系及网络通讯、串口等。
3 Linux内核移植
在同一硬件渠道上能够嵌入不同的嵌入式操作体系,这就比如PC既能够装置Windows又能够装置Linux相同。相同,有些操作体系通过移植后即可运转在不同的硬件渠道上。一般情况下,假如一个体系能够在不同硬件渠道上运转,那么这个体系便是可移植的。将某一个渠道的代码运转在其他渠道上的进程称作移植。嵌入式体系是“硬件可裁剪”的,因而工程师们规划的硬件电路会有所不同,然后使这些代码或许无法正确运转,因而要完结移植就应结合自己的硬件电路,对已有的内核代码进行修正。
3.1 内核移植难点
Linux体系的内核是多层次结构的单体内核,其可移植性比微内核要差一些,可是,这种内核具有较高的功率。从操作体系展开的趋势来看,微内核作为一种先进的操作体系结构,是操作体系展开的一个潮流。可是,微内核结构较低的体系通讯功率大大的降低了体系的功用。所以,从体系功率和功用的视点来考虑,Linux并没有选用先进的微内核结构而是挑选了传统的单体内核组织。
3.2 内核移植的根本战略
在Linux2.6内核支撑下,Linux现已在许多典型的硬件渠道上完结移植,其间包含:I386、ARM、MIPS、ALPHA、PowerPC、SPARC、SH等。可是关于依据特定硬件体系规划的硬件渠道,需求从头对Linux进行移植。此外还有部分体系的硬件渠道,Linux只对其间部分的CPU或方针板供给了支撑,假如运用了Linux没有支撑的CPU或方针板,也需求对Linux内核进行移植作业。一般能够选用以下两种办法进行Linux内核移植作业:
(1)从头规划。即选用“自底向上”的规划办法,从硬件的需求考虑逐渐的选用剖析、规划、编码、测验。这种办法比较合适针对一种全新的硬件渠道展开移植作业。
(2)修正已有的代码。如前所述,Linux现已能够在多种体系结构中运转,那么,咱们能够参阅附近的体系结构的代码,只修正与咱们的方针硬件渠道不同的部分即可。这种办法的难点在于开发人员除了要了解方针硬件渠道外。还有必要对已支撑的软硬件有一个较好的了解。本次研讨的移植作业便是选用了这种开发办法。
3.3 内核移植办法
关于体系移植而言,Linux实际上是由两个比较独立的部分所构成,即内核部分和体系部分。一般发动一个Linux体系的进程为:一个不隶属于任何操作体系的加载程序将Linux部分内核调入内存,并将操控权交给内存中Linux内核的榜首行代码,这样就完结了加载程序的作业。尔后Linux要将自己的剩下部分悉数加载到内存,初始化悉数的设备,在内存中树立好所需的数据构(有关进程、设备、内存等)。此刻,内核现已能够操控悉数硬件设备。然后转入体系部分,操作并运用这些硬件设备。接下来内核加载根设备并发动init看护进程,init看护进程会依据装备文件加载文件体系、装备网络、服务进程及终端等。一旦终端初始化结束,咱们就会看到体系的欢迎界面了。归纳说来,一部分内核初始化和操控绝大部分硬件设备,为内存办理、进程办理、设备读写等做好悉数预备作业;另一部分体系加载必需的设备,装备各种环境以便用户能够运用整个体系。
图2所示为Linux内核硬件相关结构。能够看出,Linux内核中与详细硬件渠道相关的结构首要分为两个部分:与详细的处理器结构相关的部分,包含中止处理、内存操作以及进程操控等;与详细外设关系密切的部分,包含硬件驱动与I/O设备。
内核移植由五个功用部分组成:进程办理(包含调度和通讯)、内存办理、设备驱动、虚拟文件体系与网络,它们之间存在杂乱的调用关
系。前三部分按早年到后的次序,越靠前代表它们与硬件设备的相关程度越高,后边的虚拟文件体系和网络则简直与渠道无关,它们由设备办理中所支撑的驱动程序来供给底层支撑。因而,在做内核移植的时分,需求改动的便是进程办理、内存办理和设备办理中被独立出来的那部分即硬件相关部分的代码。在Linux内核源代码树中,这部分代码悉数在areh目录下,首要是被内核直接调用的底层支撑部分。这些代码重写了内核所需调用的悉数函数,由于接口函数是固定的,所以这儿更像是为硬件渠道编写API。
3.4 内核移植进程
首要在通用核算机上编写程序,然后通过穿插编译生成可在方针渠道上运转的二进制代码格局,最终再下载到方针渠道核算机的特定方位上运转。Linux内核移植进程如下:
(1)树立移植所有必要的穿插开发环境。需预备两台核算机,一台用作修正编译Linux内核,另一台用作移植Linux内核。
(2)编写和修正Linux内核。在通用核算机上修正和编写新的内核代码,编译出新的Linux内核。
(3)调试新的Linux内核。将编译后生成的新Linux内核加载到方针核算机上进行运转和调试,这个调试的进程便是穿插调试。
调试器是一个独自运转着的进程,它通过操作体系供给的调试接口来操控被调试的进程。在Linux内核移植进程中,调试时选用的是在宿主机和方针机之间进行的穿插调试。穿插调试有多种办法,它有一些典型特色:
◇调试器和被调试进程一般运转在不同的机器上(注:Linux内核作为操作体系内核,不同于一般进程,但在穿插调试中作为被调试方针,与一般进程没有差异),一般调试器运转在PC或许作业站主机(宿主机)上,而被调试的进程则运转在各种专业调试板(方针机)上。调试器通过某种通讯办法与被调试进程树立联络,如串口、并口、网络、DBM或许专用的通讯办法。本次移植选用了串口和JTAG两种办法与方针机进行通讯。
◇在方针机上一般会具有某种方式的调试署理,它担任与调试器一起合作完结对方针机上运转着的进程的调试。这种调试署理或许是某些支撑调试功用的硬件设备(如 DBI2000),也或许是某些专门的调试软件(如 gdbserver)。本次移植运用的是GDB—Stub。
◇假如方针机是某种方式的体系仿真器,通过在宿主机上运转方针机的仿真软件,整个调试进程能够在一台核算机上运转。尽管此刻物理上只要一台核算机,但逻辑上依然存在着宿主机和方针机的差异。本次移植没有运用体系仿真器。调试时,作为调试器的GDB运转在宿主机上,相应的GDB—Stub运转在方针机上。GDB通过串口或许网络与GDB—Stub进行通讯,宣布指令操控、拜访运转在方针硬件渠道上的新的Linux内核,读取Linux内核的当时状况,并能够改动Linux内核的运转状况。
通过屡次移植测验后,就在依据ARM920T核的53C24lO处理器为中心处理器的ARM9渠道上成功移植了Linux操作体系。
4 结束语
文中论述了在依据ARM920T核的53C2410处理器为中心的ARM9渠道上移植Linux操作体系的环境、计划和进程,对移植的难点进行了要点分
析,这对ARM9渠道上的嵌入式Linux移植具有较好的实用价值和参阅价值,一起关于其它渠道上的嵌入式Linux移植的办法也具有必定的学习含义。