字符设备驱动入门级(一)

这里主要涉及字符设备的架构,各个函数的具体内容的研究可以后再进行更为深入的学习

还是那句,排除干扰,勇往直前!

字符设备驱动的组成:

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 <linux/module.h>
#include <linux/types.h>
#include <linux/fs.h>
#include <linux/errno.h>
#include <linux/mm.h>
#include <linux/sched.h>
#include <linux/init.h>
#include <linux/cdev.h>
#include <asm/io.h>
#include <asm/system.h>
#include <asm/uaccess.h>

测试结果
[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了,或者动态分配,没有尝试,不会,呵呵

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值