嵌入式Linux驱动学习之路(一)嵌入式系统的软硬件架构
硬件资料:
操作系统:(非虚拟机)
zws@z-pc:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04. LTS
Release: 14.04
Codename: trusty
内核版本:
zws@z-pc:~$ uname -a
Linux z-pc 4.4.--generic #~14.04.-Ubuntu SMP Tue Sep :: UTC x86_64 x86_64 x86_64 GNU/Linux
编译器版本:
gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3) //gcc
gcc version 4.5.1 (ctng-1.8.1-FA) //arm-linux-gcc
开发板:TINY4412/Super4412SDK 1506
核心板:TINY4412 1306 (SOC:Exynos 4412 Cortex-A9 四核 1.5Ghz )
LCD屏:S702 5V/1A
一、 嵌入式系统硬件架构:
微处理器:
按位数:4位、8位、16位、32位和64位。
按用途:嵌入式DSP和通用的嵌入式微处理器。
嵌入式DSP专用于数字信号处理,采用哈佛结构,程序和说一句分开存储,采用一系列措施保证数字信号的处理速度。
通用嵌入式处理器一般集成了通用微处理器的核、总线、外围借口和设备的SOC芯片,有些还会将SDP作为协处理器。
一般的嵌入式处理器包括:
1. 片内存储器。
2. 外部存储器的控制器、外设接口。
3. LCD控制器。
4. 中断控制器。
5. 定时器、A/D、D/A转换器。
6. 多媒体加速器。
7.总线。
8. 其他标准接口或外设。
常用的嵌入式微处理器按照体系结构不同,可以分为以下几个系列:
1. ARM系列:过去称为高级精简指令集机器,是一个32位精简指令集RISC处理器架构。
2.MIPS系列:是一种采取精简指令集RISC的处理器架构。
3. PowerPC:是一种精简指令集RISC架构的中央处理器(CPU)。
总线:
总线是CPU与存储器和设备通信的机制,是计算机各部件之间传递数据、地址和控制信息的公共通道。
有3个重要的参数:
1. 总线宽度: 又称为总线位宽,指的是总线能同时传送数据的位数。
2. 总线频率: 工作速度的一个重要参数,频率越高速度越快。
3. 总线带宽: 又称总线传输速率,指在一定时间内总线上可传送的数据总量,用每秒最大传输数据量来衡量。
例如:总线宽度为32位,总线频率为66MHz,则总线带宽等于(32/8)x66=264MB/s。
对于ARM系列的处理器而言会按照AMBA规范来设计总线。
1. AHB(Advanced High-performance Bus):用于高性能、高时钟频率的系统模块连接。
2. ASB(Advance System Bus): 用于并不要求AHB高性能特征的地方。
3. APB(Advance Peripheral Bus):用于较低性能外设的简单连接。一般是接在AHB或ASB总线上的二级总线。
还有其他流行的片外总线:I2C总线.SPI总线、UART总线、USB总线等等。
存储器:
典型的嵌入式系统的存储器包括芯片内部的缓存(Cache)、随机存储器(RAM)、只读存储器(ROM)、芯片外部的主存(如Nor Flash、SRAM、DRAM等)和外存(如Nand Flash、SD卡等)。
高速缓存(Cache)存放的是当前使用得最多的程序代码和数据,即主存中部分内容的副本。在嵌入式系统中,Cache全部集成在嵌入式微处理器内,可分为数据Cache、指令Cache或混合Cache。一般在中高端的嵌入式微处理器中才会有。
主存是处理器能直接访问的存储器,即内存。
外村就是Nand Flas、 SD卡等。
二、 嵌入式系统的软件架构:
嵌入式系统包含一系列抽象层次,这里是正对Linux系统进行讨论的。
最底层是硬件层,即在嵌入式系统的硬件架构中提到的内容。
Linux内核建立在硬件层之上,是操作系统的核心组件。其目的是为上层应用程序提供访问底层硬件的抽象接口,以适合上层软件开发。
在整个Linux内核中,存在着高层抽象和底层抽象。高层抽象主要是为应用程序提供接口,而底层抽象主要是负责外设的驱动。处于高层抽象和底层抽象之间的是文件系统和网络协议。由于大量的文件系统和网络协议的存在,Linux内核必须处理不同格式的文件系统,而且并不会因为文件系统的不同而影响高层抽象为应用程序提供的接口。这点儿对于网络协议同样适用。
《完》
嵌入式Linux驱动学习之路(一)嵌入式系统的软硬件架构的更多相关文章
- 嵌入式Linux驱动学习之路(二十五)虚拟网卡驱动程序
一.协议栈层次对比 设备无关层到驱动层的体系结构 1).网络协议接口层向网络层协议提供提供统一的数据包收发接口,不论上层协议为ARP还是IP,都通过dev_queue_xmit()函数发送数据,并通过 ...
- 嵌入式Linux驱动学习之路(二十四)Nor Flash驱动程序
Nor Flash和Nand Flash的不同: 类型 NOR Flash Nand Flash 接口 RAM-like,引脚多 引脚少 容量 小(1M.2M...) 大(512M.1G) 读 简 ...
- 嵌入式Linux驱动学习之路(二十三)NAND FLASH驱动程序
NAND FLASH是一个存储芯片. 在芯片上的DATA0-DATA7上既能传输数据也能传输地址. 当ALE为高电平时传输的是地址. 当CLE为高电平时传输的是命令. 当ALE和CLE都为低电平时传输 ...
- 嵌入式Linux驱动学习之路(二十二)用内存模拟磁盘
安装驱动后,可在/dev/目录下发现已经生成了相应的设备文件. 格式化设备:mkdosfs /dev/ramblock. 挂载设备. 读写设备 . 驱动程序代码: /***************** ...
- 嵌入式Linux驱动学习之路(二十)USB设备驱动
USB在接入系统的时候,以0的设备ID和主机通信,然后由主机为其分配新的ID. 在主机端,D+和D-都是下拉接地的.而设备端的D-接上拉时,表明此设备为高速设备:12M/s. D+接上拉时则是全速设备 ...
- 嵌入式Linux驱动学习之路(十八)LCD驱动
驱动代码: /************************************************************************* > File Name: lcd ...
- 嵌入式Linux驱动学习之路(十七)驱动程序分层分离概念-平台设备驱动
平台设备驱动: 包含BUS(总线).DEVICE.DRIVER. DEVICE:硬件相关的代码 DRIVER:比较稳定的代码 BUS有一个driver链表和device链表. ①把device放入bu ...
- 嵌入式Linux驱动学习之路(十六)输入子系统
以前写的一些输入设备的驱动都是采用字符设备处理的.问题由此而来,Linux开源社区的大神们看到了这大量输入设备如此分散不堪,有木有可以实现一种机制,可以对分散的.不同类别的输入设备进行统一的驱动,所以 ...
- 嵌入式Linux驱动学习之路(十五)按键驱动-定时器防抖
在之前的定时器驱动程序中,我们发现在连续按下按键的时候,正常情况下应该是一次按下对应一次松开.而程序有时候会显示是两次按下,一次松开.这个问题是因为在按下的时候,因为是机械按键,所以电压信号会产生一定 ...
随机推荐
- CSS常用样式(一)
一.字体样式 1.font-style:设置或检索对象中的文本字体样式. 取值: normal:指定文本字体样式为正常的字体 italic:指定文本字体样式为斜体.对于没有斜体变量的特殊字体,将应用o ...
- tomcat通过socket连接MySQL,不再占用服务端口【linux】
MySQL连接方式的说明 http://icbm.iteye.com/blog/1840673 MySQL除了最常见的TCP连接方式外,还提供SOCKET(LINUX默认连接方式).PIPE和SHAR ...
- Kotlin语法(函数和lambda表达式)
三.函数和lambda表达式 1. 函数声明 fun double(x: Int): Int { } 函数参数是用 Pascal 符号定义的 name:type.参数之间用逗号隔开,每个参数必须指明类 ...
- VSS、RSS、PSS、USS
VSS:Virtual Set Size,虚拟耗用内存.它是一个进程能访问的所有内存空间地址的大小.这个大小包含了一些没有驻留在RAM中的内存,就像mallocs已经被分配,但还没有写入.VSS很少用 ...
- 转 String,StringBuffer与StringBuilder的区别??
String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能 ...
- 在android用Get方式发送http请求
烦人的日子终于过去啦,终于又可以写博客啦,对自己的android学习做个总结,方便以后查看...... 一.在android用Get方式发送http请求,使用的是java标准类,也比较简单. 主要分以 ...
- Gradle常用命令
使用cmd进入Android studio项目的根目录就可以执行一些gradle相关命令 gradle -v 查看版本 (如果你是第一次执行会去下载Gradle,这个过程如果不FQ非常慢) gradl ...
- OC中的protocol
一. 简单使用 1. 基本用途 可以用来声明一大堆方法(不能声明成员变量) 只要某个类遵守了这个协议,就相当于拥有这个协议中的所有方法声明 只要父类遵守了某个协议,就相当于子类也遵守了 2. 格式 协 ...
- MVC数据库数据分页显示
首先从数据库获取数据 using System; using System.Collections.Generic; using System.Linq; using System.Web; usin ...
- jQuery设置disabled属性
先比较下readOnly和disabled: readOnly 只针对input(text/ password)和textarea有效: disabled 对于所有的表单元素都有效,包括select, ...