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

时间:2021-12-30 11:20:29

目录

一. 嵌入式体系结构

二. 开发过程中的分工

三. 嵌入式软件体系结构

四. 嵌入式Linux 


 一. 嵌入式体系结构

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

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

图1.1


 二. 开发过程中的分工

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

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

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

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

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


三. 嵌入式软件体系结构

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

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

图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] <嵌入式系统设计师教程> 清华大学出版社