设备驱动程序——应用程序与硬件设备之间的桥梁,为应用程序提供机制(功能)
字符设备——想字符流一样来存取的设备,以字节为单位进行读写
主设备号和次设备号
对字符设备的访问是通过文件系统内的设备名称进行的。其中,主设备号标识设备对应的驱动程序,次设备由内核使用,用于正确确定设备文件所指的设备。
linux内核中使用cdev结构体来描述字符设备,dev_t是一个32位的数,12位表示主设备号(0~4095),20为表示次设备号(0~1048575),cdev结构体的定义如下:
struct cdev
{
struct kobject kobj; //内嵌的kobject对象
struct module *owner; //所属模块
struct file_operations *ops; //文件操作结构体
struct list_head list;
dev_t dev; //设备号
unsigned int count;
};
open 和 release
open方法提供给驱动程序以初始化的能力,从而为以后的操作完成初始化坐准备。
release 方法的作用与open相反,释放由open分配的、保存在filp->private_date中的内容,在最后一次关闭操作时关闭设备。
scull模型的内存使用
read 和write
read和write方法完成的任务是相似的,拷贝数据到应用程序空间or反过来从应用程序空间拷贝数据。