Hasen的linux设备驱动开发学习之旅--支持多设备的字符设备驱动
来源:互联网 发布:怎么查自己的淘宝账号 编辑:程序博客网 时间:2024/05/22 15:41
/** * Author:hasen * 参考 :《linux设备驱动开发详解》 * 简介:android小菜鸟的linux * 设备驱动开发学习之旅 * 主题:支持多设备的字符设备驱动 * Date:2014-10-31 *//*globalmem设备文件打开函数*/int globalmem_open(struct inode *inode ,struct file *filp){/*将设备结构体指针赋值给文件私有数据指针*/struct globalmem_dev *dev ;dev = container_of(inode->i_cdev,globalmem_dev,cdev) ;filp->private_data = dev ;return 0 ;}/*globalmem设备驱动模块加载函数*/int globalmem_init(void){int result ;dev_t devno = MKDEV(globalmem_major ,0) ;/*申请字符设备驱动区域*/if(globalmem_major)result = register_chrdev_region(devno,2,"globalmem") ;else{/*动态获得主设备号*/result = alloc_chrdev_region(&devno,0,2,"globalmem") ;globalmem_major = MAJOR(devno) ;}if(result < 0)return result ;/*动态申请设备结构体的内存*/globalmem_devp = kmalloc(2*sizeof(struct globalmem_dev),GFP_KERNEL) ;if(!globalmem_devp){ /*申请失败*/result = -ENOMEM ;goto fail_malloc ;}memset(globalmem_devp,0,2*sizeof(struct globalmem_dev)) ;globalmem_setup_cdev(&globalmem_devp[0],0) ;globalmem_setup_cdev(&globalmem_devp[1],1) ;return 0 ;fail_malloc :unregister_chrdev_region(devno,1) ;return result ;}/*globalmem设备驱动模块卸载函数*/void globalmem_exit(void){cdev_del(&globalmem_devp[0]->cdev) ;/*删除cdev结构*/cdev_del(&globalmem_devp[1]->cdev) ;/*删除cdev结构*/kfree(globalmem_devp) ;unregister_chrdev_region(MKDEV(globalmem_major,0),2) ;/*注销设备区域*/}/*初始化并添加cdev结构体*/static void globalmem_setup_cdev(struct globalmem_dev *dev, int index){int err , devno = MKDEV(globalmem_major ,index) ;cdev_init(&dev->cdev,&globalmem_fops) ;dev->cdev.owner = THIS_MODULE ;err = cdev_add(&dev->cdev,devno,1) ;if(err)printk(KERN_NOTICE "Error %d adding globalmem %d\n",err,index) ;}/*其他的代码和《Hasen的linux设备驱动开发学习之旅--使用文件私有数据的字符设备驱动》相同*/
0 0
- Hasen的linux设备驱动开发学习之旅--支持多设备的字符设备驱动
- Hasen的linux设备驱动开发学习之旅--支持阻塞的设备驱动
- Hasen的linux设备驱动开发学习之旅--支持轮询操作的设备驱动
- Hasen的linux设备驱动开发学习之旅--中断
- Hasen的linux设备驱动开发学习之旅--时钟
- Hasen的linux设备驱动开发学习之旅--简单字符驱动实例globalmem
- linux设备驱动开发学习之旅--支持多设备的字符设备驱动
- Hasen的linux设备驱动开发学习之旅--使用文件私有数据的字符设备驱动
- Hasen的linux设备驱动开发学习之旅--增加了并发控制的设备驱动程序
- Hasen的linux设备驱动开发学习之旅--linux设备驱动中的并发与竞态
- Hasen的linux设备驱动开发学习之旅--阻塞与非阻塞I/O
- Hasen的linux设备驱动开发学习之旅--异步I/O
- Hasen的linux设备驱动开发学习之旅--异步通知
- linux设备驱动开发学习之旅--支持阻塞的设备驱动
- linux设备驱动开发学习之旅--支持轮询操作的设备驱动
- linux设备驱动开发学习之旅--使用文件私有数据的字符设备驱动
- Linux设备驱动开发基础---字符设备驱动程序开发之基于中断的按键驱动
- Linux设备驱动之《字符设备驱动》
- 最简单的贝叶斯分类器MATLAB实现
- [AC自动机+dp+变进制状压] hdu 3341 Lost's revenge
- DedeCMS列表页内容根据权重排序dede_arctiny 按weight排序
- linux 下无密码文件传输
- Call to undefined function imagecreate()
- Hasen的linux设备驱动开发学习之旅--支持多设备的字符设备驱动
- 远程连接
- 路由器和交换机的原理分别是什么
- 算法篇之排序(二)
- Python 正则表达式验证IPv4地址
- Redis 之 事务
- 探秘static——类不需实例化就能用?
- 【网络协议】HTTP协议笔记
- SVN中tag branch trunk用法详解