/**

******************************************************************************
* @author    暴走的小哥哥
* @version   V1.0.0
* @date       2016-02-23
@version      V1.0.1
* @data      2016-02-25
******************************************************************************
* <  Beijing university of posts and telecommunications >
*******************************************************************************
******************************************************************************
* platform exynos4412
*******************************************************************************
**/

Linux体系结构

如下图所示,Linux体系结构,从大的方面可以分为用户空间(User Space)和内核空间(Kernel Space)。

用户空间中包含了C库,用户的应用程序。在某些体系结构图中还包含了shell,当然shell脚本也是Linux体系中不可缺少的一部分。

内核空间包括硬件平台、平台依赖代码、内核、系统调用接口。

在任何一个现代操作系统中,都是分层的。为什么需要分层呢?

从程序员的角度分析,将linux底层和和应用分开,将linux底层和应用分开,做应用的做应用,做底层的做底层,各干各的。经济学的基本原理是,分工产生效率。

从安全性的角度分析,是为了保护内核。现代CPU通常都实现了不同的工作模式。

以ARM为例:ARM实现了7种工作模式,不同模式下CPU可以执行的指令或者访问的寄存器不同: (1)用户模式 usr (2)系统模式 sys(3)管理模式 svc(4)快速中断 fiq(5)外部中断 irq(6)数据访问终止 abt(7)未定义指令异常。如果任何一个上层应用都可以调用都可以调用寄存器,那样肯定是无法稳定执行的。而且因为出现了这个问题,出现了一个新的学科“现代操作系统”,如果大家感兴趣可以看一下“现代操作系统”相关文章或者书籍。

以X86为例:X86实现了4个不同级别的权限,Ring0—Ring3 ;Ring0下可以执行特权指令,可以访问IO设备;Ring3则有很多的限制

如果分析一下Android的,这方面做的更加“丧心病狂”,Android所有的APK应用程序,都是在Java虚拟机上面运行,应用程序更加远离底层。

另外,用户空间和内核空间是程序执行的两种不同状态,我们可以通过“系统调用”和“硬件中断”来完成用户空间到内核空间的转移。

Linux内核结构

这一节,分析一下内核结构。

如下图所示,是Linux内核结构图。

SCI层(System Call Interface),这一层是给应用用户空间提供一套标准的系统调用函数来访问Linux。前面分析Linux体系结构的时候,介绍过任何一类现代操作系统都不会允许上层应用直接访问底层,在Linux中,内核提供了一套标准接口,上层应用就可以通过这一套标准接口来访问底层。

PM(Procees Management),这一部分包括具体创建创建进程(fork、exec),停止进程(kill、exit),并控制他们之间的通信(signal等)。还包括进程调度,控制活动进程如何共享CPU。这一部分是Linux已经做好的,在写驱动的时候,只需要调用对应的函数即可实现这些功能,例如创建进程、进程通信等等。

MM(Memory Management),内存管理的主要作用是控制多个进程安全的共享内存区域。

VFS(Virtual File Systems),虚拟文件系统,隐藏各种文件系统的具体细节,为文件操作提供统一的接口。在Linux中“一切皆文件”,这些文件就是通过VFS来实现的。Linux提供了一个大的通用模型,使这个模型包含了所有文件系统功能的集合。如下图所示,是一个虚拟文件系统的结构图。

Device Drivers设备驱动,这一部分就是需要学习和掌握的。Linux内核中有大量的代码在设备驱动程序部分,用于控制特定的硬件设备。

Linux驱动一般分为网络设备、块设备、字符设备、杂项设备,需要我们编写的只有字符设备,杂项设备是不容易归类的一种驱动,杂项设备和字符设备有很多重合的地方。

网络协议栈,Linux内核中提供了丰富的网络协议实现。

 
 
在学习Linux驱动之前需要理解和掌握linux体系结构和Linux内核结构
本人文字水平有限,所以就一步一步的写和截图,希望这种形式对大家有所帮助!

最新文章

  1. Set Php show errors
  2. PSP进度(11~16)
  3. WINHEX 使用教程
  4. 开扒php内核函数,第一篇 bin2hex
  5. MySQL - 复制数据表
  6. JQuery(二)——简单动画效果
  7. Hql参数占位符使用(转+整理)
  8. C# using
  9. js实现分页
  10. MySQL操作时间的函数集
  11. IDEA 最新版永久破解最简单方法(版本 IntelliJ IDEA 2018.3.5)
  12. MVC 全局过滤器
  13. js设置、读取、删除cookie
  14. 丑数(python)
  15. 学习第一天-JAVA
  16. 破产姐妹第一季/全集2 Broke Girls迅雷下载
  17. linux 免密码登录
  18. [ACM] POJ 3349 Snowflake Snow Snowflakes(哈希查找,链式解决冲突)
  19. Go语言中结构体的使用-第1部分结构体
  20. LR监控apache服务器

热门文章

  1. PHP面向对象(OOP):__call()处理调用错误
  2. windows server 2012 iis8.0部署mvc报错
  3. springtest+juint开发测试如下:
  4. Ombrophobic Bovines
  5. 通过预编译头文件来提高C++ Builder的编译速度
  6. Unity 用C#脚本读取JSON文件数据
  7. Qt入门(17)——组装复杂的控件
  8. CSS3中text-overflow支持以...代替超出文本
  9. 移动UI自动化-Page Objects Pattern
  10. Agri-Net(prim算法,最小生成树问题)