免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1277 | 回复: 0
打印 上一主题 下一主题

字符设备驱动入门级(一) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-05 13:37 |只看该作者 |倒序浏览
这里主要涉及字符设备的架构,各个函数的具体内容的研究可以后再进行更为深入的学习
还是那句,排除干扰,勇往直前!
字符设备驱动的组成:
1. 模块的加载与卸载函数
主要有以下几块
    定义设备结构体
    模块加载函数
    模块卸载函数
其中重要的有cdev结构体,主要完成设备号相关的及和文件操作函数的连接,同时提供申请内存等操作   
如:cdev_init()用于初始化cdev成员,并建立cdev与file_operations的连接
    cdev_alloc()用于动态的申请一个cdev内存
    cdev_add()向系统添加一个cdev,完成驱动模块的注册或者说加载
    cdev_del()删除一个cdev,完成驱动模块的注销或者说是卸载
    同时要完成注册和注销还需要配合以下函数
    注册时:register_chrdev_region()或者alloc_chrdev_region()
    注销时:unregister_chrdev_region()
2,file_operations结构体中的成员函数
    最基本的几个
    读函数 xxx_read()
    写函数 xxx_write()
    IO控制函数  xxx_ioctl()
    ......
文件操作结构体模板
    struct file_operations xxx_fops=
    {
        .owner = THIS_MODULE,
        .read = xxx_read,
        .write = xxx_write,
        .ioctl = xxx_ioctl,
        ...
    };
   
3,另外就是一些包含的头文件了
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
测试结果
[root@Hunt-PC globalmem]# ls
globalmem.c   globalmem.mod.c  globalmem.o  Module.markers  Module.symvers
globalmem.ko  globalmem.mod.o  Makefile     modules.order
[root@Hunt-PC globalmem]# insmod globalmem.ko
insmod: error inserting 'globalmem.ko': -1 Device or resource busy
查看发现254设备号已被使用了,更换了未使用的就OK了,或者动态分配,没有尝试,不会,呵呵


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/102267/showart_2111873.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP