通俗易懂:linux杂项设备注册

 

如何将自己的驱动程序添加到内核,让用户可以访问到我们的驱动呢。我们可以通过把驱动程序以杂项设备的形式注册到内核,并且自动生成设备节点。这样用户层就可以通过对设备节点的操作完成对驱动的控制。

 

设备节点可以理解为内核提供给应用层可以操作的文件。存放路径为/dev ,可以在这里查看到所有的可用设备。

 

1:图解杂项设备的注册流程

 

2:杂项设备注册框架代码

#include <linux/init.h>

#include <linux/module.h>

#include <linux/platform_device.h>

#include <linux/of.h>

#include <linux/of_gpio.h>

#include <linux/miscdevice.h>

#include <linux/fs.h>

 

/*文件操作集,用于上层应用的调用*/

static struct file_operations XXX_fops = {

       .owner = THIS_MODULE,

       /*

       ......

       */

};

 

/*注册杂项设备机构体*/

static struct miscdevice XXX_dev = {

       .minor = MISC_DYNAMIC_MINOR,   /*自动分配次设备号*/

       .name  = "misc_dev",           /*创建成功后生成节点 /dev/misc_dev*/

       .fops  = &XXX_fops,            /*文件操作集结构体成员导入*/

};

 

/*驱动模块加载函数*/

static int XXX_init(void)

{

int ret;

 

    printk(KERN_ALERT "module insmod success!\n");

       /*向内核注册杂项设备*/

       ret = misc_register(&XXX_dev);

       if(ret<0)

       {

      printk(KERN_ALERT "misc device register fail!\n");

         return -1;

       }

         printk(KERN_ALERT "misc device register success!\n");

         return 0;

}

 

/*驱动模块卸载函数*/

static void XXX_exit(void)

{  

       /*从内核注销杂项设备*/

       misc_deregister(&XXX_dev);

       printk(KERN_ALERT "module rmmod success!\n");    

}

 

module_init(XXX_init);

module_exit(XXX_exit);

 

MODULE_LICENSE("Dual BSD/GPL");

MODULE_AUTHOR("小小技术宅");

 

3:测试编写好的驱动

打开超级终端加载驱动

 

显示模块已经加载成功,并且杂项设备注册成功。

查看是否生成了设备节点

 

这里已经成功生成了设备节点。

卸载模块,并且查看设备节点是否注销

 

到这里我们就完成杂项设备的注册!应用层的程序就可以通过调用这个设备节点对驱动进行操作了!

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小的技术宅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值