02 hello(字符驱动初步上手)

其他部分文章参考

第1课.Linux驱动的概述
第2课.字符设备驱动程序的开发
代码位置

1 编写驱动程序流程

  1. 确定主设备号,也可以让内核分配
  2. 定义feil_operations结构体
  3. 实现对应的drv_open/drv_read/drv_write等函数,填入file_operations
  4. file_operations结构体告诉内核
  5. 定义注册函数(在安装驱动时,调用此入口函数)
  6. 定义卸载函数(在卸载驱动时,卸载相关配置)
  7. 创建设备节点: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_ERRORERR_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     : 设备名
posted @ 2022-08-21 22:54  人民广场的二道贩子  阅读(42)  评论(0)    收藏  举报