构建嵌入式系统-嵌入式linux系统的一般构架

来源:互联网 发布:深度linux系统怎么样 编辑:程序博客网 时间:2024/05/02 00:47
   本篇翻译自奥莱里出版社的《Building Embedded Linux Systems》byKarim Yaghmour  其著作权归原作者所有
    因为,linux系统是由很多部分组成的。现在,让我们来看下一个普通linux系统的整个构架。这样可以帮助我们从上下文来设置各个组件,和帮助我们来理解各个组件之间的交互作用。和怎么样更好的从整体上利用它们。图2.4介绍了一个包括了所有组件的普通linux系统的一般构架。尽管这张图将内核和其他的组件提炼到了一个很高的水平。它展示的足够我们讨论的。注意,以下的描述种没有多少不同,嵌入式系统,一个工作站,&一个服务器系统。因为,在这个层次上,linux系统都是由相同的构成。在剩下的部分,重点在嵌入式系统中在这种构架下的应用程序的详细介绍。
 
能运行linux系统的硬件有很多特点,首先,linux要求cpu是32bit并且包含了内存管理模块。第二:足够的ram必须满足系统的需要。第三:简单的io处理能力是需要的,以防一些在开发板上执行的开发由于必须的理由调式,这对在这个领域以后解决纷争非常重要。最后,内核必须能加载和/或者访问一个根文件系统通过一个永久保存信息的存储器或者网络。
 
    在硬件上裁剪内核。内核是一个操作系统的最主要的一个部分。它目的是管理硬件以一种协调的方式同时,给上层软件提供熟悉的抽象接口。像其他的类unix系统内核。linux驱动设备,管理io访问,控制进程访问,执行内存共享。处理信号,和处理其他管理级的任务。大家希望使用内核提供的API应用程序能够可移植的,在这个内核支持的不同体系下没有什么改变。这通常是实际情形与Linux, 和能由应用的主体看见一致地可以在所有linux发行版获得。
    在内核中,两个分层服务的显著的种类提供了由应用所需的功能。这底层的接口是针对这硬件配置,内核运行在它之上。并且,使用硬件独立的api,提供了直接的控制硬件资源。也就是,处理内存页面的寄存器在powerpc 系统和arm系统上有不同的处理。但是,可以理解的是,可以使用常见的一组api给上位的内核组件。虽然,有一些罕见的异常。很显著的,底层的服务可以处理cpu相关的操作,体系相关的操作,&基本的设备接口。
     内核提供的底层服务上,上位的组件提供了抽象的,常见的unix系统调用。包括进程,文件,套接字,和信号。因为这些底层的api是由相同内核不同发行版的系统提供的。在上位执行的代码通常认为不用考虑到下位体系。当然,有些特别的例外。如上述, 高水平仁代码将包括特殊情况或不同的作用为某些特定的发行版的地方。
    在这两个抽象层之间,内核有时候需要解释组件来理解&与描述某些设备的数据结构交互。文件系统类型&网络协议就是内核需要来理解和同提供访问数据机制的交互。
    硬盘设备一直是主要的存储设备对电脑数据来说。现在,硬盘设备,还有其他的存储设备,完全不包含数据结构,它们的容量是在一张盘上访问一个柱面的适当的扇区来寻址的。但是,这个层面的组织不足以提供正在改变文件&目录的
容量。文件级别的访问成功利用了特殊的盘片上的数据管理,文件&目录信息以一种特殊的形式存放,以至于第二次访问时能轻易识别。这就是文件系统包括的。但是,通过OSes 的及时演变 ,很多不同的,矛盾的文件系统逐渐显露出来,为了调节这些存在的文件系统和新的文件系统。内核有一些文件系统引擎,这些能识别一个特殊的磁盘数据结构&恢复或者增加文件或者目录从这个磁盘数据结构。这个引擎提供了相同的应用程序接口给上位的内核,以至于它们能根据文件系统数据结果以相同的方式访问不同的文件系统甚至不同的低位的服务。API提供了在内核的层次上提供了虚拟文件系统层。举例太说, FAT文件系统和 ext2文件系统是一样的,但是,根据不同的文件系统结构存储数据到盘上,管理块设备驱动操作将会有所不同。
    在一般的操作种,内核需要至少一种适当的文件系统,根文件系统。就是这个文件系统,内核用来加载最初的调用来运行系统。之后的操作模块加载和提供对当前工作目录的操作也需要这个文件系统。根文件系统可以实际存储在一个硬件存储设备或者加载进ram在系统启动时,并且运行在ram中。前者相对于后者来说,越来越流行,技术上很轻易的实现,比如jffs2文件系统。
    正是上述内核,我们发现调用和效用构成和运行这个系统。内核希望系统服务不要直接被应用程序调用。相反,应用程序依赖于提供常见的API&与在应用程序的行为上得到所需的函数功能的内核交互的抽象服务。用了很多linux应用程序的主要的库是GNU c库,就嵌入式系统来说。正如我们所见,替代这个库的,要弥补它的主要缺陷,太大,相比其他的C库,库相QT,XML,或者MD5提供了不同的有用的,功能的API来服务与各种各样的用途。
    库常常动态的链接到应用程序。也就是,它们不是应用程序二进制文件的一部分,而是在应用程序运行是加载进应用程序的内存区域。这样,允许应用程序拥有相同的一个库实例,而不是拥有它的一个拷贝。举例来说,C库常常只是在系统ram种加载到。并且这个拷贝被所有的应用程序加载。但是,注意,在嵌入式系统的某些情况下,静态链接,就是库是应用程序二进制文件的一部分,比动态链接要好。比如,当只有一部分库被用几个应用程序用到 ,静态链接将让你避免存储整个库在嵌入式的存储设备上。
原创粉丝点击