夏薇
摘要:随着计算机、通信及网络技术的高速发展,嵌入式系统广泛地渗透到各行各业及人们日常生活的方方面面中。由于嵌入式系统的复杂性不断增加,嵌入式操作系统成为了嵌入式系统中最重要的组成部分。在各种嵌入式操作系统中,凭借其性能优异,结构清晰,平台支持广泛,网络支持强劲及开放源代码等多方面的优势,被嵌入式系统开发者广泛的采用。有鉴于此,对嵌入式Linux系统移植及应用开发技术进行研究。
关键词:嵌入式Linux;内核;设备驱动;移植
随着数字信息技术与网络技术的高速发展,我们已进入数码时代。建立在其基础之上的嵌入式系统已经广泛的渗透到科学研究、工程设计、军事技术、商业文化艺术、娱乐业以及人们的日常生活等方方面面。嵌入式技术越来越和人们的生活紧密相关,消费电子、计算机、通信一体化趋势日益明显,作为计算机领域的一个重要组成部分,嵌入式系统再度成为研究与应用的热点,而这离不开对嵌入式系统重要组成部分的嵌入式系统软件的研究。
1 嵌入式软件开发
1.1 嵌入式软件生成阶段
由于嵌入式系统自身的硬件局限性,不能在嵌入式系统上直接搭建开发环境,因此,在嵌入式软件开发中通常需要两个平台,即作为开发平台的宿主机和作为运行平台的嵌入式目标机,嵌入式软件的生成阶段又可分为三个步骤源代码程序的编写将源程序交叉编译成各个目标模块将所有目标模块及相关库文件一起链接成可供目标板下载或固化的目标程序。这三个步骤与通用计算机系统的软件开发阶段基本一致,但嵌人式软件开发又有其自身的特点为了能生成适合目标平台运行的二进制程序,对源代码的编译应使用跨平台的交叉编译器为了程序代码和数据在目标机的内存中正确定位及正确链接适合目标机的库文件,需要使用交叉链接器。交叉编译器和交叉链接器是嵌入式软件开发不可缺少的工具。
1.2 嵌入式软件调试阶段
在开发嵌入式软件时,交叉调试是必不可少的一步。交叉调试通常是指调试程序和被调试程序运行在不同的机器上,调试器通过某种方式控制目标机上的被调试程序的运行方式,并且通过调试器查看和修改目标机上的内存、寄存器及被调试程序中的变量的调试技术。目前,使用最广泛的交叉调试技术是软件调试方式和片上调试方式。
1.3 嵌入式软件固化阶段
嵌入式软件调试完成之后,整个开发周期就进入固化阶段。把程序代码烧写到目标板的永久性存储器中,并且在真实的硬件环境中运行,这个过程就是固化。固化阶段需要注意的问题主要有:调试阶段目标文件包含调试信息,固化阶段应该重新编译,去掉不需要的调试信息;调试阶段程序的所有代码段、数据段都被定位到测试空间的RAM中,固化阶段应将程序的各逻辑段按照其不同的属性分别定位到永久存储器或RAM中;通常,调试阶段不需要boot模块,目标板上的监控程序可以实现此功能,但固化阶段必须有boot模块作为入口模块。
注意到以上差异并完成必要的准备工作后,就可以利用交叉编译链接工具生成可固化的应用程序,再用固化工具将它固化到目标机的ROM、Flash闪存等非易失性存储设备中。至此,整个嵌入式应用软件开发过程就基本完成了。
2 嵌入式Linux系统移植
与通用计算机系统Linux操作系统的根文件系统的组织结构一样,嵌入式Linux系统的根文件系统的组织结构通常也参考标准来实现而与通用计算机系统不同的是,嵌入式Linux通常需要采用符合自身存储设备特点的特殊文件系统。
2.1 根文件系统的选择
嵌入式Linux系统中,为了保护系统文件不被破坏或不希望用户修改某些文件,常采用一些不可修改的文件系统,cramfs和经过压缩的RAM disk都是具有很高的压缩比的不可修改的文件系统,因此常被用着嵌入式Linux的根文件系统。
对于写入Flash设备的RAM disk映像,首先必须在内核中配置RAM disk的大小与数量,并在Linux启动时按配置在内存中创建RAM disk,把RAM disk映像减压缩到内存中,此后文件系统就在内存中,不再需要访问Flash设备了。RAM disk最大的缺点是,在正常情况下,同样的数据不仅在外存中占据了空间以压缩后的形式存在,而且还在内存中占用了更大的空间以解压缩之后的形式存在,这违背了嵌入式环境下尽量节约资源的要求。如果系统中有大量富裕的内存,选用RAM disk作为根文件系统也是个不错的选择。但是对于大多数嵌入式系统来说,内存都是非常宝贵的资源,尽量节约资源也体现了嵌入式系统开发的精神,因此,本次移植选用cramfs作为根文件系统。
2.2 用户扩展文件系统的选择
由于选擇了只读的文件系统cramfs做为根文件系统,为了利用Flash设备的易读易写且断电永久存储的特性,以及为了扩展嵌入式系统的功能,因此需要一个可读写、可保存数据的文件系统。
2.3 内存文件系统的选择
Flash设备都有擦除、写的次数限制,一旦达到这个限制Flash设备将出现坏块,其中的内容也将永远不能再擦除了。经常对Flash设备执行擦除、写操作,会缩短Flash设备的寿命。因此,/tmp、/var这些存放临时性和变动性较大数据的目录应该采用基于内存技术的文件系统,防止频繁的对Flash设备进行擦除操作,延长Flash闪存使用寿命。
参考文献
[1]张静,叶梧.基于ARM 920T的嵌入式Linux系统开发[J].现代电子技术,2005,(4):22-24.
[2]秦蔚.ARM平台下Linux内核移植技术的分析研究与应用[D].昆明:昆明理工大学,2004.
[3]叶欣.嵌入式Linux环境下Web页面技术的实现[J].现代商贸工业,2009,(01).