嵌入式系统是以应用为中心,以计算机技术为基础、软硬件均可剪裁、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。其发展已有二十多年的历史,国际上也出现了一些知名的嵌入式操作系统,如VxWorks,PalmOS,WindowsCE等等,但这种操作系统均属于商品化产品,价位高昂且因为源代码不公开引起了例如对设备的支持,应用软件的移植等一系列的问题。而Linux作为一种优秀的FreeOS,近几年在嵌入式领域异军凸起,成为了最有潜力的嵌入式操作系统。
嵌入式Linux融合了嵌入式和Linux的特性,其开发与通常的应用程序开发相比有着自己的特征,下边简略的介绍一下嵌入式Linux开发的通常过程。
了解硬件是首要的一步,这是嵌入式开发的特性决定的。了解硬件指的是了解整个硬件,判定硬件对于当前的应拿来说是否合适。嵌入式系统中须要使用到CPU和各类外围设备,由此须要搜集相关硬件的资料,包括CPU,芯片指南和各类外围设备的指南以及相关的各类电路图等,并对整体系统有较深入的了解。
了解硬件后linux 软件开发工具linux 软件,下一步就该打算须要使用的Linux工具以及其他工具,这种工具包括:针对所用CPU的编译器/汇编器/联接器,相应的库工具,目标文件剖析/管理工具,符号查看器等等。辛运的是,因为Linux的开放性,针对不同目标平台的Linux工具都可在网上免费得到,绝大部份的这种工具都由GNU提供。所须要的其他工具还包括硬件厂商提供给公司的工具,如编程器,下载工具和查错器等等。所有这种工具对之后的开发、调试等都可说是必不可少的。
做好以上的打算工作后,就要步入实质性的工作阶段了。首先须要安排显存地址,如SDRAM的显存地址,Flash的显存地址等,这须要与实际应用和硬件状况相结合来考虑,要按照硬件的限制以及实际应用的须要对显存地址进行合理的安排,同时要注意显存地址的安排要具有一定的伸缩性,以以便将来须要改动时所做的变动达到最小。通常来说,嵌入式Linux的显存地址安排彰显在联接脚本当中。
接着就该步入编撰启动代码和机器相关代码阶段了。各类不同目标系统,甚至相同目标系统的启动代码和机器相关代码也是不相同的。启动代码通常须要完成硬件初始化,装载内核及安装根文件系统以及开始内核执行的工作,不同目标平台的启动代码通常可通过参考Linux下已有的启动代码和相关CPU的指南进行编撰。
启动代码和机器相关代码编程完成并可以启动系统后,下一步就可以开始驱动程序的编撰了。Linux编撰驱动程序与通常情况下编撰驱动程序并没有太大的区别,都须要对相关的硬件做出了解,同时须要遵守Linux编撰驱动程序的一些规则进行,编撰完一个驱动程序后,通常就写一个相应的测试程序已便随时进行测试。Linux下各类不同类型的设备都有相当多的驱动程序源码可以参考,因而实际编撰时更多的时间是花在对特定硬件特点的熟悉上。
不仅以上提及的这种步骤外,进行实际开发时,好多时侯还要进行库(这儿所提及的库均指C库),GUI和系统程序的移植。这是由于嵌入式Linux中所用的库通常不能直接使用标准库,而须要进行精简,尽管已有些精简的C库如uClibc等可供使用linux 软件开发工具,但还是须要时常对其进行更改。嵌入式Linux常用的GUI有Microwindows,MiniGUI,QT/Embedded,TinyX等等,各自均有其使用的场合,所针对的目标平台和应用层次也不一样linux 内核,必须按照实际须要进行选择。系统程序如mount,ls等等有些是应用时所必须的,有些则是进行调试时所须要的,初始时则须要一些通用的系统程序即可。