目录

一. 嵌入式体系结构

二. 开发过程中的分工

三. 嵌入式软件体系结构

四. 嵌入式Linux


一. 嵌入式体系结构

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

图1.1


二. 开发过程中的分工

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

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

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

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

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


三. 嵌入式软件体系结构

软件体系结构在<嵌入式系统设计师教程> 里有图示, 即图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] <嵌入式系统设计师教程> 清华大学出版社

嵌入式系统基础知识(一): 系统结构和嵌入式Linux的更多相关文章

  1. 《嵌入式系统原理与接口技术》——嵌入式系统接口应用基础

    本文为我负责编写的电子工业出版社出版的<嵌入式系统原理与接口技术>一书第七章部分,这里整理的仍然是修改稿,供需要的同学参考,本书为普通高等教育"十二五"规划教材,电子信 ...

  2. PON系统基础知识简介

    一  PON基础知识 1.1 PON技术概念 PON(Passive Optical Network)即无源光网络,一种基于点到多点(P2MP)拓朴的技术.“无源”指ODN(光分配网络)不含有任何电子 ...

  3. Android 12(S) 图像显示系统 - 基础知识之 BitTube

    必读: Android 12(S) 图像显示系统 - 开篇 一.基本概念 在Android显示子系统中,我们会看到有使用BitTube来进行跨进程数据传递.BitTube的实现很简洁,就是一对&quo ...

  4. Linux系统基础知识整理

    一.说明 本篇文章,我将结合自己的实践以及简介,来对linux系统做一个直观清晰的介绍,使得哪些刚接触Linux的小伙伴可以快速入门,也方便自己以后进行复习查阅. 二.基本知识整理 1.Linux文件 ...

  5. Linux系统基础知识整理(一)

    本文来自于: https://www.cnblogs.com/hafiz/p/6686187.html#4196989 一.说明 本篇文章,我将结合自己的实践以及简介,来对linux系统做一个直观清晰 ...

  6. 嵌入式4412开发板学习知识-Linux系统基础知识

    1. 什么是Linux系统编程 Linux系统编程分为三个部分:系统调用.C库和C编译器. 系统调用系统编程的基础是系统调用,也结束于系统调用.在带有操作系统的嵌入式开发中,需要从操作系统申请一些服务 ...

  7. Kafka消息系统基础知识索引

    一些观念的修正 从 0.9 版本开始,Kafka 的标语已经从“一个高吞吐量,分布式的消息系统”改为"一个分布式流平台". Kafka不仅仅是一个队列,而且是一个存储,有超强的堆积 ...

  8. MAC系统 - 基础知识

    一.基础操作 设置:触控板设置 - >学习具体手势 手势:MacBook Pro手势大全必学手势触控板手势有哪些 左键,右键,滑屏,切换到应用... 一指操作: 一指敲击:鼠标左键: 一指按下: ...

  9. IOS系统基础知识

    在iOS应用中,每个程序得main函数中都调用了UIApplicationMain函数. 1 2 3 4 5 6 int main(int argc, char *argv[])  {      @a ...

随机推荐

  1. Asp.net MVC4 CodeFirst 使用EFTracingProvider

    一.关于EFTracingProvider EFTracingProvider相关信息见作者博客:关于EFTracingProvider EFTracingProvider Demo下载地址:Trac ...

  2. 关于arcengine权限的设置

    对于AE开发时候,如果调用arctoolbox中的部分功能,权限是arcview或者arceditor是无法执行的,因为权限不够. arcgis9.3的有3个权限arcview. arceditor. ...

  3. IP地址分类(转)

    IP地址分类以及C类IP地址的子网划分 国际规定:把所有的IP地址划分为 A,B,C,D,E A类地址:范围从0-127,0是保留的并且表示所有IP地址,而127也是保留的地址,并且是用于测试环回用的 ...

  4. 飘逸的python - 简明gzip模块压缩教程

    压缩数据创建gzip文件 先看一个略麻烦的做法 import StringIO,gzip content = 'Life is short.I use python' zbuf = StringIO. ...

  5. oracle与sqlserver区别

    sqlserver只能在windows平台上运行,与windows兼容性较高 oracle可能在windows和linux上运行 sqlserver的安全性不是很高 oracle安全性能获得了最高级别 ...

  6. Cocos2d-精灵的几个常识

    性能考虑 该部分是总结的cocos2d的在线文档 1)如果有每个帧有25个以下的精灵需要更新,可以直接使用精灵 class TLayer(cocos.layer.Layer):     is_even ...

  7. Android开发(24)---安卓中实现多线程下载(带进度条和百分比)

    当我们学完java中多线程的下载后,可以将它移植到我们的安卓中来,下面是具体实现源码: DownActivity.java package com.example.downloads; import ...

  8. SPL學習之SplDoublyLinkedList

    Standard PHP Library(SPL)是官方提供的标准库,从php5.0.0开始已经默认实现在php中,我们可以类比它为ruby中的gem安装的包.spl里面实现了许多迭代器和数据结构对象 ...

  9. angularJS自定义 过滤器基础

    先写个简单的例子,该过滤器是指定规定的字符串长度: html: <div ng-app="app" ng-controller="ctrl"> &l ...

  10. UE4新手编程之创建C++项目

    虚幻4中常用的按键和快捷键 虚幻4中有一些按键和快捷键很常用,牢记它们并运动到实际的项目开发中,将会大大地提高你的工作效率和使得工作更简便快捷.下面将列举它们出来: 按键   动作  鼠标左键   选 ...