嵌入式系统基础知识(一): 系统结构和嵌入式Linux

目录

一. 嵌入式体系结构html

二. 开发过程当中的分工编程

三. 嵌入式软件体系结构小程序

四. 嵌入式Linux 网络


 一. 嵌入式体系结构

<嵌入式系统设计师教程>这本书的前三章脉络很清晰, 按照嵌入式系统结构从下往上, 从底层的硬件, 电路, 到上层的系统, 应用, 逐层展开介绍. 书的后三章是在掌握好前面的基础后, 对于应用开发, 软件工程等宏观上的指导. 我根据前三章的结构画出了图1.1的嵌入式系统结构图, 系统分层结构一目了然. 第三层多出来的Linux和四大块, 后面再介绍.架构

图1.1函数


 二. 开发过程当中的分工

部门里每一个产品的基本开发都须要硬件组, DSP&BSP组, 应用开发组的协做完成.spa

基础知识这块距离嵌入式开发愈来愈遥远了, 各大IC厂商为嵌入式产品开发商提供了完善的芯片和手册, 批量购买就好了哈哈.操作系统

硬件组的工做属于第二层, 第二层里还有我没有标识出的电源技术, "画板子"技术. 涉及到硬件, 好比喇叭, 麦克风, 电源, 芯片选型, 系统总线接口设计, 网口, 蓝牙, 画PCB, 制做PCB...天然也涉及到成本, 硬件研发周期等问题. 设计

DSP&BSP组的工做属于第三层, 在不一样平台, 也就是不一样处理器架构的板子上移植BootLoader->操做系统->设备驱动->文件管理系统,  协助硬件调通板子上电能跑, 再交给应用层作开发.3d

应用开发组就是"站在巨人的肩膀上"敲代码了. 向下要了解操做系统基本知识, 向上要把握客户的迫切需求, 还要夜以继日的提升开发技能. 也但愿这一层是"入门不易, 前途无量"吧.


三. 嵌入式软件体系结构

软件体系结构在<嵌入式系统设计师教程> 里有图示, 即图3.1. 我觉着部门里BSP&DSP组的人是在跨层工做, 由于红框里的这些移植都是由他们实现的.

图3.1

3.1 设备驱动层

设备驱动层又叫板级支持包, 即Board Support Package, BSP. 包含了嵌入式系统中全部与硬件有关的代码. BSP的基本思想是把嵌入式操做系统与具体的硬件平台隔离开来, 并向上层提供一个虚拟的硬件平台, 操做系统就运行在这组虚拟平台上. OS使用一组定义好的编程接口与BSP交互, 经过BSP访问真正的硬件. BSP主要实现如下两种功能:

1. 引导BootLoader

BootLoader是嵌入式系统上电后运行的第一段软件代码. 在一个基于ARM*内核的嵌入式系统中, 系统上电或复位通常都是从地址x00000000开始执行, 这个地址一般放置的就是BootLoader. 

  • 片级初始化, 包括微处理器核心寄存器和控制寄存器, 微处理器核心工做模式, 局部总线模式;
  • 板级初始化, 正确设置各类寄存器内容如初始化定时器, 设置中断控制寄存器, 初始化串口通讯, 创建内存空间的地址映射;
  • 加载内核, 将操做系统和应用程序从Flash存储器复制到系统内存中, 跳转到系统内核的第一条指令处.

2. 引导设备驱动

设备驱动就是一组库函数, 对硬件进行初始化和管理, 向上层提供访问接口. 设备驱动的基本功能:

 

  • 硬件启动: 在开机上电或系统重启时, 对硬件初始化
  • 硬件关闭: 将硬件设置为关机
  • 读: 从硬件中读取数据
  • 写: 往硬件中写入数据

3.2. 嵌入式中间件

在操做系统内核, 设备驱动程序, 应用软件以外的全部系统软件. 如Sun公司的嵌入式Java, Google的Android. 

3.3. BootLoader之uBoot

系统上电后, 须要一段小程序来初始化, 包括: 关闭看门狗, 改变系统时钟, 初始化存储控制器, 将更多的代码复制到内存中等等. 若是它能将操做系统内核从Flash/远端网络传输复制到内存, 就称这段小程序为BootLoader. 

好比BSP组提供的Bootloader, 在以上基本功能以外, 还提供给广大应用开发人员加强的BootLoader功能, 包括经过串口, ftp传输, 下载, 烧录文件, 将Flash上的压缩文件解压后再运行等等. 加强版的功能用户并不须要, 它们都是为了方便广大应用开发人员, 感动crying.

3.4 BootLoader的两种工做模式

1. 启动加载模式

上电后, BootLoader从板子的固态存储设备上将OS加载到RAM, 整个过程无用户介入, 产品发布时采用此模式.

2. 下载模式

开发人员可使用各类命令, 经过串口或网络链接等通讯手段从主机下载文件, 好比内核映像, 文件系统映像等, 将它们放入内存运行或烧入Flash类固态存储设备中.

从主机传输文件, 能够采用串口xmodem/ymodem/zmodem协议, 简单并且慢; 还可使用网络经过ftp, nfs传输, 主机须要开启ftp, nfs服务.

U-Boot是功能强大的BootLoader, 一般支持两种工做模式, 并且容许用户在两种模式间切换. 好比, U-Boot启动时处于正常的启动加载模式, 但会延时若干秒, 等待终端用户按下某键而将U-Boot切换到下载模式. ITE启动时就是这样, 开启后马上回车, 就会进入下载模式, 在这个模式下能够进行参数配置和ftp系统升级.


四. 嵌入式Linux

做为软件体系结构的主流结构, 嵌入式Linux体系应用普遍, 往后我也是靠它吃饭了. 关于嵌入式Linux最常听到的四大块就是: BootLoader, 内核, 驱动, 根文件系统. 其实也就是Linux内核+"嵌入式周边"=嵌入式Linux的关系. 四大块物理位置处于第二层中的不一样存储体系中:

  • 内存: BootLoader
  • (ROM)Flash: Linux内核
  • 外存: 驱动程序

 

参考

[1] Bootloader之uBoot简介

[2] 作嵌入式开发, 职业如何发展? from知乎

[3] <嵌入式系统设计师教程> 清华大学出版社