rtc_cdev = cdev_alloc(); cdev_init(rtc_cdev, &rtc_fops); // 申请设备号 dev = MKDEV(222, 0); register_chrdev_region(dev, 1, "rtc-demo"); // 将cdev加入kobj树 cdev_add(rtc_cdev, dev, 1); return 0; } static void __exit rtc_exit(void) { // 将cdev从kobj树移除 cdev_del(...
* cdev_del() - remove a cdev from the system * @p: the cdev structure to be removed * * cdev_del() removes @p from the system, possibly freeing the structure * itself. */ void cdev_del(struct cdev *p) { cdev_unmap(p->dev, p->count); kobject_put(&p->kobj); } 此函数就...
原型voidcdev_init(structcdev *cdev,conststructfile_operations *fops)功能 用于初始化cdev结构体,并填充其成员ops 参数 cdev:字符设备 fops :驱动操作函数集合 返回值 无 该函数实现如下: /** * cdev_init() - initialize a cdev structure * @cdev: the structure to initialize * @fops: the file_operat...
2. cdev_alloc原型 struct cdev *cdev_alloc(void) 功能 用于分配cdev结构体,并添加到内核中 参数 返回值 成功:返回分配的cdev结构体变量指针 失败: 返回NULL 该函数实现如下: /** * cdev_alloc - allocate a cdev structure * * Allocates and returns a cdev structure, or NULL on failure. */ struct...
void cdev_del(struct cdev *p) 参数p 就是要删除的字符设备 下面我们写个代码来巩固下这个小节的内容,主要跟前面程序的差异还是hello_driver.c #include <linux/types.h> #include <linux/init.h> #include <linux/interrupt.h> #include <linux/mm.h> ...
}staticvoid__exitmy_cdev_exit(void){// 注销cdevcdev_del(&my_cdev); } module_init(my_cdev_init); module_exit(my_cdev_exit); MODULE_LICENSE("GPL"); 复制代码 在这个示例中,我们定义了一个简单的字符设备驱动程序,它包含open、release、read和write操作。在每个操作中,我们检查是否发生了错误,并在...
d -- void cdev_del(struct cdev *p); 该函数向内核注销一个struct cdev结构,即正式通知内核由struct cdev *p代表的字符设备已经不可以使用了。 从上述的接口讨论中,我们发现对于struct cdev的初始化和注册的过程中,我们需要提供几个东西 (1) struct file_operations结构指针; ...
在Linux字符设备驱动中,模块加载函数通过register_chrdev_region( ) 或alloc_chrdev_region( )来静态或者动态获取设备号,通过cdev_init( )建立cdev与file_operations之间的连接,通过cdev_add( )向系统添加一个cdev以完成注册。模块卸载函数通过cdev_del( )来注销cdev,通过unregister_chrdev_region( )来释放设备号。
("register_chrdev_region fail \n");returnresult;}cdev_init(&cdev,&hello_ops);error = cdev_add(&cdev,devno,1);if(error < 0){printk("cdev_add fail \n");unregister_chrdev_region(devno,1);returnerror;}return0;}staticvoid hello_exit(void){printk("hello_exit \n");cdev_del(cdev);...
void cdev_put(strcut cdev *p); 与 count 计数相关的操作。 int cdev_add(struct cdev *,dev_t ,unsigned ); 向系统中添加一个 cdev,注册字符设备,需要在驱动被加载的时候调用。 void cdev_del(struct cdev *); 从系统中删除一个 cdev,注销字符设备,需要在驱动被卸载的时候调用。