1、字符驱动:操作从内核分配的内存
2、/dev目录ls -l 可以查看 其中“C”开头为字符设备 ,“B”开头为块设备
3、设备主编号标识驱动 次编号标识具体设备
4、dev_t设备主次编号结构 前12位主编号 后20位次编号
5、获取设备主次编号函数 :
MAJOR(dev_t dev);MINOR(dev_t dev);
6、设置设备主次编号函数:
MKDEV(int major,int minor);
7、cat /proc/devices可以查看系统所有设备以及编号
8、动态分配设备号:
int alloc_chrdev_region(dev_t *dev,unsigned int firstminor,unsigned int count, char *name);
9、回收设备号:
void unregister_chrdev_region(dev_t form,unsigned int count);
10、重要的结构体file_operations,用来存放内核模块对设备的提供的操作的函数指针,通俗说就是把所有要用的函数集合起来。
struct file_operations scull_fops = {
.owner = THIS_MODULE,
.llseek = scull_llseek,
.read = scull_read,
.write = scull_write,
.ioctl = scull_ioctl,
.open = scull_open,
.release = scull_release,
};
11、struct file结构体和flip结构体指针
12、struct cdev指向设备的结构体指针,步骤:
定义一个结构体指向自己的设备;
struct cdev *mydev;
初始化:
cdev_init(mydev, &my_fops);
告诉内核“你拥有了一个字符设备”
cdev_add(mydev, devno, 1);
本文是《Linux设备驱动》读书笔记的第二部分,主要聚焦在字符驱动上。内容包括字符设备驱动的工作原理,如何通过/dev目录识别字符和块设备,设备主次编号的含义和结构,如何获取和设置设备号,查看系统设备的命令,动态分配和回收设备号的机制,以及file_operations和cdev结构体在设备驱动中的关键作用。

341

被折叠的 条评论
为什么被折叠?



