之前研究Linux设备驱动时做的零零散散的笔记,整理出来,方便以后复习。
驱动程序的的角色
- 提供机制
例如:
unix图形界面分为X服务器和窗口会话管理器,X服务器理解硬件及提供统一的接口给用户程序,窗口管理器实现了特别的策略但对硬件一无所知。
目标:实现对策略透明
- 划分内核
进程管理
负责创建和销毁进程,并处理它们与外部的联系(输入和输出)。
实现了多个进程在一个单个或几个CPU之上的抽象。
内存管理
为每一个进程在有限的可用资源上建立了虚拟地址空间。
文件系统
在非结构化的硬件之上建立了一个结构化的文件系统。
设备控制
全部设备的控制操作都由特定的寻址设备相关的代码来进行。
网络
系统负责在程序和网络接口之间递送数据报文。
可加载模块
Linux特性:可以在运行时扩展由内核提供的特性,可以在系统正在运行的时候增加内核的功能(也可以去除)。
每块可以在运行时添加到内核的代码被称为一个模块。通过insmod和rmmod程序去连接。
设备和模块的分类
字符设备
字符(char)设备是一种可以当作字节流来存取的设备。这样的驱动常常实现open,close,read,write系统调用。
例如:文本控制台(/dev/console),串口(/dev/ttyS0)
块设备
通过位于/dev目录的文件系统节点来存取,可以驻有文件系统。与字符设备的区别在于内部管理数据的方式上–块设备允许一次传送任意数据的字节。
网络接口
负责发送和接收数据报文
安全问题
小心对待输入,未初始化的内存等,从内核获取的任何内存应当清零或者在其可用之前进行初始化。
版本编号
Linux系统中使用的每一个软件包存有自己的发行版本号,它们之间存在相互依赖性。
版权条款
字符驱动
scull
Simple Character Utility for Loading Localities
设备编号
[root@centos ~]$ ll /dev
total 0 主编号,次编号
drwxr-xr-x. 2 root root 640 May 12 22:24 block
crw-------. 1 root root 10, 234 May 12 22:24 btrfs-control
drwxr-xr-x. 3 root root 60 May 12 22:24 bus
lrwxrwxrwx. 1 root root 3 May 12 22:24 cdrom -> sr0
drwxr-xr-x. 3 root root 80 May 12 22:24 cpu
crw-rw----. 1 root root 10, 62 May 12 22:24 crash
drwxr-xr-x. 6 root root 120 May 12 22:24 disk
brw-rw----. 1 root disk 253, 0 May 12 22:24 dm-0
drwxr-xr-x. 2 root root 60 May 12 22:24 dri
lrwxrwxrwx. 1 root root 3 May 12 22:24 fb -> fb0
crw-rw----. 1 root root 29, 0 May 12 22:24 fb0
crw-rw-rw-. 1 root root 1, 7 May 12 22:24 full
主编号标识设备相连的驱动,次编号被内核用来决定引用哪个设备。