原创kylin_zeng:http://blog.csdn.net/kylin_fire_zeng 本文参考国嵌视频教程,在此感谢国嵌教育。
一、
早期驱动:模式一
缺点:驱动没有统一复用起来,浪费资源。
早期驱动:模式二
缺点:驱动程序和应用程序接口要统一,若驱动接口一改应用层也得改
二、驱动分类:
1)字符设备驱动(重点);
字符设备是一种按字节来访问的设备,字符驱动则负责驱动字符设备,这样的驱动通常实现open, close, read和write 系统调用。
特点不能随机访问,比如串口,不能跳跃的接收
c
2)块设备驱动
在大部分的Unix 系统, 块设备不能按字节处理数据,只能一次传送一个或多个长度是512字节( 或一个更大的2 次幂的数)的整块数据。
而Linux则允许块设备传送任意数目的字节。因此, 块和字符设备的区别仅仅是驱动的与内核的接口不同
特定:可以随机访问,比如读写硬盘。可以不从头开始。
b
2)网络接口驱动(重点)
任何网络事务都通过一个接口来进行, 一个接口通常是一个硬件设备(eth0), 但是它也可以是一个纯粹的软件设备, 比如回环接口(lo)。一个网络接口负责发送和接收数据报文
三、编译进内核:
要修改Kconfig和Makefile
Kconfig 中:
config HELLO_DRIVER //config固定,HELLO_DRIVER 在.config文件中有CONFIG_HELLO_DRIVER=y
bool "hello" // bool 表示可以选择* 或 空 没有M, hello可以在menuconfig中看到hello名称
四、应用层使用驱动程序:
图:
字符设备文件:可以用open,close,read,write,等访问字符设备文件
块设备文件:同字符设备文件,只是它还可以通过文件系统访问
网络接口:不同于字符设备和块设备,不能用read,write等,只用用socket访问等。
Linux用户程序通过设备文件(又名:设备节点)来使用驱动程序操作字符设备和块设备
设备(字符、块)文件在何处 /dev里面