02 hello(字符驱动初步上手)
其他部分文章参考
第1课.Linux驱动的概述
第2课.字符设备驱动程序的开发
代码位置
1 编写驱动程序流程
- 确定主设备号,也可以让内核分配
- 定义
feil_operations结构体 - 实现对应的
drv_open/drv_read/drv_write等函数,填入file_operations - 把
file_operations结构体告诉内核 - 定义注册函数(在安装驱动时,调用此入口函数)
- 定义卸载函数(在卸载驱动时,卸载相关配置)
- 创建设备节点:
class_create、device_create
2 知识点扩展
2.1 PRT_ERR、ERR_PTR、IS_ERR
源码如下
static inline void *ERR_PTR(long error)
{
return (void *) error;
}
static inline long PTR_ERR(const void *ptr)
{
return (long) ptr;
}
/* 判断指针是否有错
*/
static inline long IS_ERR(const void *ptr)
{
return IS_ERR_VALUE((unsigned long)ptr);
}
PTR_ERROR和ERR_PTR只是对错误进行转换
PTR_ERROR指针转错误
ERR_PTR错误转指针
2.2 register_chrdev、class_create、device_create
-
register_chrdev
注册字符设备 -
class_create
创建设备节点可以在/sys/class下面看到

-
device_create
在class_create创建的设备节点下创建dev
同时在/dev下创建对应的设备。给应用层提供操作接口

struct device *device_create(struct class *class, struct device *parent,
dev_t devt, void *drvdata, const char *fmt, ...)
class : 该设备依附的类
parent : 父设备
devt : 设备号(此处的设备号为主次设备号)
drvdata : 私有数据
fmt : 设备名

浙公网安备 33010602011771号