Linux系统概述
在学习Linux驱动前,先了解一下Linux的整个系统结构,上层应用程序对底层硬件的操作,在中间会经历哪些过程?
一、Linux系统结构图以及代码关系:
用户空间占用3G,内核空间占用1G,用户空间可以有多个app(应用程序),它们可以同时调用一个内核。
代码关系:
Application--调用-->system call interface--调用-->kernel subsystem--调用-->device driver--指挥-->hardware
二、Linux kernel介绍
1. 内核是一个裸机程序
(1) 内核线程的栈小, 所以非静态局部变量不能过大
(2) 不支持浮点
(3) 驱动是内核的一部分,必须和内核一起编译一起运行
2.Linux内核5大功能模块:进程管理、内存管理、文件系统、设备管理、网络管理
3.在Linux中,一切皆文件,文件和设备在描述时要将属性和操作做方法放到一起统一描述(属性+操作方法),下图是Linux内核层次结构图:
文件和设备描述要统一:内核面向文件编程(即 内核(文件子系统) = 文件属性+操作方法)
驱动面向设备编程(即 驱动= 设备属性+设备操作)
设备:根据文件属性找到设备属性,将文件操作转换为设备操作(对不同的设备转换为不同操作,也称多态)
文件:直接操作, 不过最终也会转换成块设备操作
VFS层:虚拟文件系统(virtual File System)的作用就是采用标准的Unix系统调用读写位于不同物理介质上的不同文件系统,
即为各类文件系统提供了一个统一的操作界面和应用编程接口。VFS是一个可以让open()、read()、write()等系统调用不用关心底层的存储介质和文件系统类型就可以工作的粘合层。
文件系统:实现文件属性及操作方法
设备驱动(对设备的描述):帮助VFS将文件操作转为具体设备操作