1.交叉编译工具
工欲善其事,必先利其器。嵌入式Linux系统开发离不开交叉编译工具。交叉开发工具链就是为了编译、链接、处理和调试跨平台体系结构的程序代码。主机端装好Linux操作系统后,就可以准备配置、制作自己的编译工具。如果要基于GCC和glibc制作工具链,可以使用crosstool进行编译;如果要基于GCC和uClibc制作工具链,可以使用buildroot进行编译。如果不借助这些工具,编译过程是非常繁琐的。uClibc比glibc小,在已有的接口上是兼容的,更适用于嵌入式系统。但是,uClibc并没有包括glibc中的所有接口实现,因此有些应用程序可能在uClibc中不能编译。基于这个原因,本章使用glibc和GCC来制作工具链。
2.Bootloader引导程序
当按下PC的启动电源时,CPU会首先运行固化在CMOS中的BIOS(Basic Input Output System)程序。BIOS程序的主要任务是对各种硬件设备进行自检和初始化,然后运行位于硬盘MBR(Master Boot Record)上的操作系统加载程序。操作系统加载程序负责把操作系统加载到内存中,并启动操作系统。
在嵌入式系统中是没有BIOS程序的,从开机硬件初始化到启动操作系统内核完全由Bootloader程序完成。Bootloader是嵌入式系统中最先运行的程序。Bootloader启动后首先对硬件进行初始化、建立内存的映射图等,其目的是为内核准备好软硬件运行环境;接着Bootloader会把内核加载到内存中合适的位置,并跳转到内核的入口处启动内核。
3.Linux内核
Linux内核主要由进程调度、内存管理、虚拟文件系统、网络接口和进程间通信5个子系统组成,是构建Linux系统的核心组成部分。在2.6版本内核以前并没有专门针对嵌入式平台进行支持。所以把Linux2.6版本以前的内核移植到嵌入式平台上时必须安装相应的补丁。Linux2.6内核于2003年12月发布,在2.4内核的基础上做了极大的改进,使用了新的调度器,进程的切换更高效;内核可以被抢占,使得用户的操作可以得到更快速的响应;I/O子系统也经历了很大的修改,使得它在各种工作负荷下都更具响应性;模块子系统、文件系统都做了大量的改进。本章移植了Linux-2.6.33.1版本的内核。(www.xing528.com)
4.Linux根文件系统
Linux中没有类似于Windows下的C、D、E等盘符的概念,它以树状机构管理所有目录、文件,其他分区挂接在某个目录上,这个目录被称为挂接点(Mount Point),然后就可以通过这个目录来访问这个分区上的文件了。
在一个分区上存储文件时需要遵循一定的格式,这种格式称为文件系统类型,如fat、ntfs、ext2、ext3、jffs2和yaffs等。除这些拥有实实在在的存储分区的文件系统类型外,Linux还有几种虚拟的文件系统类型,如proc和sysfs等,它们的文件并不存储在实际的设备上,而是在访问它们时由内核临时生成。
5.Tiny-X及相关应用程序
X窗口系统(X Windowing System)提供了Linux桌面图形系统。X系统中的窗口环境采用客户端/服务端(C/S)模式。X系统应用程序是客户端,它们和服务器通信,向服务器发送请求并且接收服务器发送的信息。X系统的服务器控制显示和处理来自客户端的请求。应用程序(客户端)只需要知道如何与服务器端通信,并不需要知道显示设备绘制图形的操作细节。这个通信机制(协议)能在任何提供8位字节流的进程间通信机制上工作。X使用了Socket接口来达到通信协议的一致性。因为X系统是基于Socket的,所以它可以在网络中运行,并且能很好地远程绘图(Remote Graphics)。X客户端使用X窗口系统提供的API在屏幕上绘制对象。这些API是函数库X-lib中的一部分,可用它连接客户端应用程序。本章移植的是体积小巧,但功能强大的Tiny-X。
有了X服务,就可以开发基于X的应用程序了。本章依次交叉编译窗口管理器Matchbox、VNC客户端TigerVNC和终端模拟器Xterm,最后对文件系统进行剪裁。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。