![](https://img-blog.csdnimg.cn/2019091813595558.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
老二的linux驱动学习
文章平均质量分 69
linux驱动相关知识
卑鄙的张老二
一个正在努力的程序猿
展开
-
知识拓展 file_operations结构体中常用函数的解析
write:向文件中写入数据 ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);poll:等待文件描述符的读写事件 unsigned int (*poll) (struct file *, struct poll_table_struct *);read:从文件中读取数据 ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);原创 2024-05-25 11:36:17 · 197 阅读 · 0 评论 -
第二节 简单的字符驱动编写
设备号 设备简介 ls /dev/* 的设备 这些就是本机的设备 驱动是有设备号的?主设备和从设备 cat /proc/devices 查看设备号 其中其中第一列是设备号,第二列是设备名 lsblk 命令可以查看块设备的主设备号和次设备号 MJA列是主设备号,MIN是次设备号 驱动是如何在这个文件里面创建设备并分配设备号的那? cdev结构体 <include/linux/cdev.h> struct cdev { struct kobject k原创 2024-05-25 11:04:02 · 1014 阅读 · 0 评论 -
第一节 驱动框架
static int __init hello_init(void)是模块安装函数,其中__init代表这是模块安装函数,这是内核规定的模块安装函数写法,只有这样写才会被下面的module_init函数识别。接下来是obj-m+= helloworld.o,这涉及到内核的加载模式,如例子中的obj-m就是动态加载也就是作为"模块"进行编译,编译完成后会生成.ko文件我们可以通过insmod指令将其动态加载到内核中。还是以代码为例子这是上面的helloworld.c驱动文件的makefile编译文件,原创 2024-05-25 09:53:28 · 351 阅读 · 0 评论