简单的杂项设备驱动编写

简单的杂项设备驱动编写,第1张

简单的杂项设备驱动编写

文章目录
  • 前言
  • 一、基本知识
  • 二、杂项设备驱动文件的编写
    • 1.misc.c文件
    • 2.Makefile文件
  • 三、杂项设备驱动的加载与卸载
    • 1.驱动的编译与发送
    • 2.驱动的加载和卸载
  • 总结


前言

本文的主要内容是杂项设备驱动的编写。


一、基本知识

Linux下有三大设备驱动:
1.字符设备
IO的传输过程是以字符为单位的,没有缓冲,比如I2C,SPI等都是字符设备,杂项设备也是字符设备。
2.块设备
IO的传输过程都是以块为单位的,跟存储相关的一般都属于块设备。
3.网络设备
与字符设备和块设备不同,网络设备是以socket套接字来访问的。
杂项设备是字符设备的一种,它可以自动生成设备节点,其设备节点在/dev/目录下。杂项设备的主设备号是相同的,都是10,次设备号是不同的,主设备号相同就可以节省内核资源。
杂项设备名称及设备号可以通过下面的命令来查看。

cat /proc/misc

主设备名称及设备号可以通过下面的命令来查看。

cat /proc/devices


二、杂项设备驱动文件的编写 1.misc.c文件

misc.c文件的内容如下:
miscdevice结构体的介绍在内核源码的/linux-4.1.15/include/linux/miscdevice.h目录下。
file_operations结构体的介绍在内核源码的/linux-4.1.15/include/linux/fs.h目录下。
以下代码只包含了结构体中的一部分内容,详细的内容大家可以打开头文件自己查看。

#include "linux/init.h"
#include "linux/module.h"
#include "linux/miscdevice.h"  //杂项设备头文件
#include "linux/fs.h" //文件 *** 作集头文件

struct file_operations misc_fops = {  //文件 *** 作集结构体
    .owner = THIS_MODULE
};

struct miscdevice misc_dev={  //杂项设备结构体
    .minor = MISC_DYNAMIC_MINOR, //次设备号
    .name = "misc_device",   //设备节点的名字
    .fops = &misc_fops   //文件 *** 作集
};

static int misc_init(void)
{
    int ret;  //次设备号
    ret = misc_register(&misc_dev);
    if(ret < 0)
    {
        printk("miscdevice registered error!n");
	    return -1;
    }
	printk("miscdevice registered successfully!n");
    return 0;
}
static int misc_exit(void)
{
    misc_deregister(&misc_dev);
	printk("misc exit!n");
}
module_init(misc_init);
module_exit(misc_exit);
MODULE_LICENSE("GPL");
2.Makefile文件

Makefile文件的内容如下:

obj-m += misc.o  #这里的.o文件名称要与.c文件的文件名称相同
KDIR:=/linux/linux-4.1.15
PWD?=$(shell pwd)
all:
	make -C $(KDIR) M=$(PWD) modules
clean:
	make -C $(KDIR) M=$(PWD) clean

三、杂项设备驱动的加载与卸载 1.驱动的编译与发送

驱动编译过程中遇到的问题可以参见:IMX6开发板从镜像的烧写、内核源码编译到第一个驱动运行的详细步骤
在Ubuntu系统下写好上面的两个文件后使用make命令进行编译,生成misc.ko驱动文件,再通过如下命令发送到开发板。

scp misc.ko [email protected]:/lyx

下图就是杂项设备驱动编译并成功发送到开发板的截图。

2.驱动的加载和卸载

在开发板上接收到驱动文件后,使用如下命令加载。

insmod misc.ko

运行截图如下:

使用如下命令查看咱们的设备节点的名字misc_device(代码中写啥名这里就生成啥名)是否已经在/dev/目录下。

ls /dev/misc_device

卸载驱动,再次查看,该文件在/dev/目录下已经不存在了。

在命令行输入以下命令来查看杂项设备的次设备号。

cat /proc/misc

次设备号查看的截图如下。

总结

以上就是杂项设备驱动的所有内容,通过这个例子我们可以举一反三,在以后遇到更复杂、更困难的驱动编写时,我们可以回过头来将此作为参考。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/4745193.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-08
下一篇 2022-11-08

发表评论

登录后才能评论

评论列表(0条)

保存