天天看点

《嵌入式Linux基础教程(第2版)》——第2章 综述 2.1嵌入与非嵌入

本节书摘来自异步社区《嵌入式linux基础教程(第2版)》一书中的第2章,第2.1节,作者:【美】christopher hallinan(克里斯托弗 哈利南)著,更多章节内容可以访问云栖社区“异步社区”公众号查看

通常,理解特定任务的最佳途径是从全局角度认识它。很多基本概念都会给嵌入式系统开发的新手带来挑战。这一章将带领你观摩一个典型的嵌入式系统及其开发环境,重点介绍那些让开发这类系统变得独特和富有挑战的概念和组件。

嵌入式系统具有一些关键属性。你可能不会认为桌面pc是一个嵌入式系统。但在远程数据中心运行的桌面pc很可能就是嵌入式系统,这个平台完成至关重要的监控和报警任务。而且假设这个数据中心是无人值守的,那我们对这个硬件平台的需求就不一样了。例如,如果断电后接着电力恢复,你会希望该硬件平台在没有操作人员干预的情况下继续执行它的任务。

嵌入式系统的种类很多,形状大小各异,大到多机架数据存储中心或网络动力站,小到mp3播放器或手机。下面列出嵌入式系统的一些常见特性。

包含一个处理引擎,比如通用微处理器。

一般是针对某种具体的应用或目的而设计的。

包含一个简单的用户界面(或没有用户界面),比如汽车引擎的点火控制器。

通常资源有限。例如只有很少的内存,并且没有硬盘驱动器。

可能会受到供电的限制,比如需要使用电池。

一般不会用做通用的计算平台。

一般都内置了应用程序,用户不能选择。

出厂时软硬件已经预先集成好了。

常常是针对无人值守的应用环境。

与传统的桌面pc相比,嵌入式系统的资源很有限。嵌入式系统常常只有很少的内存,小容量的硬盘驱动器(或是没有硬盘驱动器),有时还没有外部的网络连接。常常可以看到,一个系统仅有的用户界面就是一个串行端口加上几个发光二极管。诸如此类的问题会给嵌入式开发者带来挑战。

bios和引导加载程序的对比

桌面电脑刚加电时,一个叫做bios的软件程序立刻获得了处理器的控制权。(历史上,bios是basic input/output software的缩写,但现在这个单词已经有了自身的含义,因为其完成的功能比以前复杂多了。)bios可能实际存储在一块闪存中(稍后会介绍闪存),便于升级bios程序。

bios是一个复杂的系统配置软件,它拥有硬件架构的底层信息。大多数人都不清楚bios涉及的硬件范围和功能,但它是桌面电脑的重要组成部分。当电脑加电时,bios首先获得处理器的控制权。它的主要任务是初始化硬件,特别是内存子系统,并且从pc的硬盘驱动器中加载操作系统。

在典型的嵌入式系统中(假设这个系统不是工业标准的x86 pc硬件平台),引导加载程序(bootloader)完成与bios相同的功能。对于定制嵌入式系统,你必须在开发计划中预留出时间,开发针对具体硬件板卡的引导加载程序。幸运的是,有几个很好的开源引导加载程序可供选择,你可以按照项目需求进行定制。这些内容将在第7章介绍。

下面列出一些引导加载程序在系统加电时完成的重要任务。

初始化关键的硬件,比如sdram控制器、i/o控制器和图形控制器。

初始化系统内存,并准备将控制权移交给操作系统。

为外设控制器分配必要的系统资源,比如内存和中断电路。

提供一个定位和加载操作系统镜像的机制。

加载操作系统,并将控制权移交给它,同时传递必要的启动信息。这些信息可能包括内存总容量、时钟频率、串行端口速率和其他与底层硬件相关的配置数据。

这里只是简单概括了在通常的嵌入式系统中引导加载程序所完成的任务。需要记住的是:如果你的嵌入式系统基于定制的硬件平台,这些引导加载程序的功能必须由你,也就是系统的设计者来提供。如果你的嵌入式系统基于商用现货(commercial off-the-shelf,cots),比如atca机架[1],那么其引导加载程序(通常还有linux内核)一般就包含在硬件板卡中了。第7章将会更深入地讨论引导加载程序。

继续阅读