最后更新:2013-10-17
注: 和最终目标相比,内容还差很多没来得及总结,抽空继续更新。
【背景】
看到:
硬件行业知识体系概要
http://bbs.csdn.net/topics/390487802
中对于硬件方面的知识体系,做了概要
抽空也去给软件领域知识
尤其是嵌入式领域知识做个概要介绍。
【嵌入式软件知识体系概述】
先说背景:
计算机,领域内,知识体系,按层次分,可以分为:
- 上层:纯软件
- 中间:嵌入式
- 底层:硬件
其中:
- 纯软件:无需实际接触硬件,写代码,也不会涉及到操作硬件
- -> 当然你对硬件的工作方式,工作机制,特点等内容有了解,自然更容易设计出,写出高质量的软件代码;
- 嵌入式:全称算是嵌入式软件
- 注意:对应的,很多时候,也有把嵌入式硬件,简称为嵌入式的。
- 嵌入式软件方面,更多的时候,写的代码,都是和硬件打交道的。
此处,暂且不讨论:
上层的纯软件,以及底层的硬件
只是简要概述一下,中间的嵌入式,尤其是嵌入式软件部分的知识体系
基本架构:
按照是否有操作系统
按照是否有操作系统,可分为:
- 无OS的嵌入式系统
- 有OS的嵌入式系统
其中,无OS的,相对比较简单:
一个大循环,
http://www.segger.com/admin/uploads/productDocs/UM01001_embOS_Generic.pdf
提到的那个Super Loop
有OS的,往往架构都和OS有关:
- 应用程序
- 应用程序
- 库函数
- 操作系统内核
- 各个功能模块:网络,文件系统,进程通信,进程管理,存储管理
- 硬件抽象层HAL
- 硬件
典型的嵌入式Linux软件系统,根据不同的阶段和模块分,又可以分为:
- 根文件系统
- 嵌入式Linux内核
- Bootloader
- 现在用的最多的就是U-boot了。
按照操作系统是否是私有的
其中有OS的,按照是否是开源的,是否是常用的,通用的,还是私有分,可以分为:
- 开源的/常见的/通用的 嵌入式操作系统
- 私有的嵌入式操作系统
其中:
开源的/常见的/通用的 ,并不是等价的,但是只是此处相对于私有的来说,从概念上和逻辑上,是等价的。
常见的有:嵌入式Linux(及其衍生物Android),QNX,VxWorks,ucOS/II,TRON(ITRON),WinCE等等。
和硬件打交道的嵌入式软件:HAL,驱动等等
以及其他模块,比如文件系统,
什么叫做,写的代码,是和硬件打交道的?
意思是:
对于物理上,真实存在的硬件设备,写代码,操作对应的硬件设备,往往是写硬件的驱动程序之类的
什么叫做,写代码操作硬件设备?
本质上就是:
写代码,设置,配置硬件
往往都是:读写硬件设备的寄存器,从而达到使得硬件可以工作,可以正常工作的目的。
什么叫做用代码驱动硬件工作,即什么叫做硬件设备驱动?
背景:
硬件有各种功能,特性;
目的:
希望硬件按照我们所希望的方式,去工作;
需要做的事情:
大体分两步:
- 初始化硬件
- 实现硬件数据的读写
举例:
一个典型的,在嵌入式Linux系统中,实现对应的SD卡的
背后的逻辑
我们的目标
以及具体如何去写SD卡驱动的大概步骤和逻辑就是:
我们的目标是:
SD卡,插入到开发板的SD卡插槽上,
然后开发板中正在运行的嵌入式Linux系统,可以识别出该SD卡
并且可以实现SD的数据的读写:
读:把里面的数据拷贝出来,比如里面有张图片,可以把图片这个文件的数据拷贝出来;
写:往里面写数据,比如想要拷贝一首歌曲到SD中;
那么,我们就需要:
在嵌入式Linux系统中,为SD卡写驱动
去大概的逻辑和步骤是:
1.SD的初始化部分
去设置对应的SD卡的寄存器,申请各种相关的软硬件资源(此部分相关细节很多,待以后详解)
即把SD卡配置成你需要的工作模式了,
然后后续的,再去实现
2.让SD卡工作的部分:实现数据的读写
然后再去(Linux的相关的驱动框架下)写相关的SD的数据的读写的功能
操作对应的寄存器
把数据从SD的相关的数据寄存器中读出来
或者是
把要写入的数据,写入到SD的相关的数据寄存器中
(其他相关的内容还有:为了提高数据读写速度,可以去利用DMA,如果有DMA可用的话)
关于需要学习哪些知识,已整理至:
转载请注明:在路上 » 【整理】嵌入式软件知识体系概述