Chinaunix首页 | 论坛 | 博客
  • 博客访问: 309107
  • 博文数量: 72
  • 博客积分: 3111
  • 博客等级: 中校
  • 技术积分: 668
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-30 15:45
个人简介

朝着心的方向前进

文章分类

全部博文(72)

文章存档

2014年(5)

2013年(1)

2012年(1)

2011年(1)

2010年(24)

2009年(40)

我的朋友

分类: LINUX

2009-12-05 13:37:42

这里主要涉及字符设备的架构,各个函数的具体内容的研究可以后再进行更为深入的学习
还是那句,排除干扰,勇往直前!
字符设备驱动的组成:
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了,或者动态分配,没有尝试,不会,呵呵
 
阅读(953) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~