第9章 Linux驱动程序设计
chropen=0; len=0; cdev_init(chardev,char_ops); if(cdev_add(chardev, dev, 1)0) { printk(KERN_ALERT添加字符设备chardev出错!\n); } return 0; } module_init(char_init); 3.设备打开 在设备打开部分,一般都用于完成一个具体的外围硬件设备,由open函数完成。open函数提供给驱动程序以初始化的能力,从而为以后的操作做准备。在用insmod加载驱动后也有一个初始化动作,但这个初始化是相对于整个Linux内核来说的,或者说是针对整个module在外部的全局意义上的初始化;而open函数的初始化则是相对于设备操作来说的,是属于驱动内部的初始化,比如初始化read操作时的某个变量(如file结构体),或设备、清空buffer等。 设备打开的代码如下: static int char_open(struct inode *inode,struct file *file) { if(chropen==0) { chropen++; } else{ printk(KERN_ALERT添加字符设备chardev已经被打开!\n); return -1; } printk(KERN_ALERT打开字符设备chardev!\n); try_module_get(THIS_MODULE); return 0; } open函数的原型如下(在file_operations结构体中的定义):? int (*open)(struct inode *inode, struct file *filp) ? 在open函数原型中,有inode和filp两个参数,都是外部应用程序在操作设备时通过系统调用传递给驱动module的。于是驱动module就可以通过这两个参数来确定要打开的具体设备了。 4.关闭设备 关闭设备即实现一个打开设备的反操作。关闭设备完成如下任务: 释放open分配的,保存在file-private_data中的所有内容。 在最后一次关闭操作时关闭设备。 关闭设代码如下: static int char_release(struct inode *inode,struct file *file) { chropen--; printk(KERN_ALERT注消字符设备chardev!\n); module_put(THIS_MODULE); return 0; } 5.读写操作 驱动module的file_operations结构体中可以定义很多设备操作服务函数,实现这些函数与系统调用,或者外部应用程序交互,而不管具体的设备操作。下面以read函数为例介绍驱动函数的调用过程。 (1)read实现过程。read函数的原型如下:? ssize_t read(struct file *filp, char __user *buf, size_t count, loff_t *f_pos) read实现过程 (2)write的实现过程。write的函数原型如下: static int char_write(struct file *filp, const char __user *buffer, size_t length, loff_t *offset) static int char_read(struct file *filp, char __user *buffer, size_t length, loff_t *offset) { if(length12) { if(copy_to_user(buffer, hello world!,12)) { printk(KERN_ALERT字符设备chardev读操作出错!\n); return 0; } }else { if(copy_to_user(buffer, hello world!, length)) { printk(KERN_ALERT字符设备chardev读操作出错!\n); return 0; } } printk(KERN_ALERT添加字符设备chardev读操作成功!\n); return 1; } s
您可能关注的文档
最近下载
- 2025年版维医医师资格考试大纲.docx VIP
- 常用汉字表(2500字).pdf VIP
- 高中英语2025届高考热点环保主题作文素材(词汇+模板).doc VIP
- 2026年春季统编版(部编版)2024新教材二年级下册道德与法治教学计划、教学设计及教学反思(附目录).docx
- 高中英语2025届高考热点青少年心理健康主题作文固定搭配短语汇总.doc VIP
- (2025春)部编版一年级下册道德与法治全册教案 (新版本).docx
- 国家电网招聘考试综合能力(判断推理)模拟试卷2.docx VIP
- 运动损伤与康复-全套PPT课件.pptx
- 凌文铨组织承诺问卷.doc VIP
- 医美整形现场咨询绝对成交技巧话术.docx VIP
原创力文档

文档评论(0)