目录
一、什么是嵌入式系统
二、嵌入式系统操作
三、嵌入式Linux的特点
四、嵌入式系统的组成
1、硬件和软件
2、硬件层
3、中间层
4、软件层
5、 功能层与执行装置
五、 Linux内核目录结构
- 嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁剪,适用于应用系统,对功能、可靠性、成本、体积、功耗等方面有特殊要求的专用计算机系统。
- 嵌入式系统与通用计算机系统的本质区别在于系统应用不同,嵌入式系统是将一个计算机系统嵌入到对象系统中。这个对象可能是庞大的机器,也可能是小巧的手持设备,用户并不关心这个计算机系统的存在。
- 嵌入式系统一般包含嵌入式微处理器、外围硬件设备、嵌入式操作系统和应用程序4个部分。嵌入式领域已经有丰富的软硬件资源可以选择,涵盖了通信、网络、工业控制、消费电子、汽车电子等各种行业。
嵌入式操作系统的一个重要特性是实时性。所谓实时性,就是在确定的时间范围内响应某个事件的特性。
著名的嵌入式操作系统有:VxWorks、Linux和Windows CE等。
1、Linux系统是层次结构且内核完全开放。Linux是由很多体积小且性能高的微内核系统组成。在内核代码完全开放的前提下,不同领域和不同层次的用户可以根据自己的应用需要方便地对内核进行改造,低成本地设计和开发出满足自己需要的嵌入式系统。
2、强大的网络支持功能。Linux诞生于因特网时代并具有Unix的特性,保证了它支持所有标准因特网协议,并且可以利用Linux的网络协议栈将其开发成为嵌入式的TCP/IP网络协议栈。
3、Linux具备一整套工具链,容易自行建立嵌入式系统的开发环境和交叉运行环境,可以跨越嵌入式系统开发中仿真工具的障碍。Linux也符合IEEE POSIX1标准,使应用程序具有较好的可移植性。
传统的嵌入式开发的程序调试和调试工具是用在线仿真器(ICE)实现的。它通过取代目标板的微处理器,给目标程序提供一个完整的仿真环境,完成监视和调试程序;但一般价格比较昂贵,只适合做非常底层的调试。
4、Linux具有广泛的硬件支持特性。无论是RISC还是CISC、32位还是64位等各种处理器Linux都能运行。这意味着嵌入式Linux将具有更广泛的应用前景。
①硬件:嵌入式处理器、存储系统、(由IO连接)外设、时钟、复位、电源。
三大件全部集成:嵌入式微控制器(单片机);
三大件部分集成:嵌入式微处理器、IO集成在一个芯片内部,存储外置
②软件:嵌入式操作系统(可裁剪移植的、定制开发)、应用软件(专用性、固化)
嵌入式系统通常由嵌入式处理器、外围设备、嵌入式操作系统和应用软件等几大部分组成。
硬件层由嵌入式处理器、存储器系统、通用设备接口和I/O接口(如A/D、D/A、I/O等)组成。在一片嵌入式微处理器基础上增加电源电路、时钟电路和存储器电路(ROM和SDRAM等),就构成了七个嵌入式核心控制模块。其中,操作系统和应用程序都可以固化在ROM中。
中间层也称为硬件抽象层或板极支持包,它把系统软件与底层硬件部分隔离。板极支持包对上具有操作系统相关性,对下具有硬件相关性。设计一个完整的中间层需要完成两部分工作:
① 嵌入式系统的初始化,它包括片级初始化、板级初始化和系统级初始化。
② 设计硬件相关的设备驱动
软件层由多任务操作系统(OS)、文件系统、图形用户接口(GUI)、网络系统及通用组件模块组成。OS是嵌入式应用软件的基础和开发平台;是一段嵌入式目标代码中的程序,系统复位后首先执行,相当于用户的主程序,用户的其他应用程序都建立在OS之上;是一个标准的内核,它将CPU时钟、中断、I/O、定时器等资源都封装起来,留给用户的是一个标准的API函数接口。
功能层由基于OS开发的应用程序组成,用来完成对被控对象的控制功能。功能层是面向被控制对象和用户的,为方便用户操作,往往需要提供一个友好的人机界面。执行装置是指那些可以接受嵌入式计算机系统发出控制命令,执行所规定的操作或任务的设备和装置。在不同应用领域中,嵌入式系统的执行装置一般是不同的,应该根据具体的应用场合和系统所要求实现的功能选择不同的设备和执行装置。
- arch :包含和硬件体系结构相关的代码,每种平台占一个相应的目录,如i386、arm、arm64、powerpc、mips 等。Linux 内核目前已经支持30 种左右的体系结构。在arch目录下,存放的是各个平台以及各个平台的芯片对Linux 内核进程调度、内存管理、中断等的支持,以及每个具体的SoC 和电路板的板级支持代码。
- block:块设备驱动程序I/O 调度。
- crypto:常用加密和散列算法(如AES、SHA 等),还有一些压缩和CRC 校验算法。
- documentation:内核各部分的通用解释和注释。
- drivers :设备驱动程序,每个不同的驱动占用一个子目录,如char、block、net、mtd、i2c 等。
- fs:所支持的各种文件系统,如EXT、FAT、NTFS、JFFS2 等。
- include:头文件,与系统相关的头文件放置在include/linux 子目录下。
- init:内核初始化代码。著名的start_kernel() 就位于init/main.c 文件中。
- ipc:进程间通信的代码。
- kernel :内核最核心的部分,包括进程调度、定时器等,而和平台相关的一部分代码放在arch/*/kernel 目录下。
- lib:库文件代码。
- mm:内存管理代码,和平台相关的一部分代码放在arch/*/mm 目录下。
- net:网络相关代码,实现各种常见的网络协议。
- scripts:用于配置内核的脚本文件。
- security:主要是一个SELinux 的模块。
- sound:ALSA、OSS 音频设备的驱动核心代码和常用设备驱动。
- usr:实现用于打包和压缩的cpio 等。
- include:内核API 级别头文件。