(四)嵌入式 Linux驱动程序设计之杂项设备驱动

(四)嵌入式 Linux驱动程序设计之杂项设备驱动

接上篇:(三)嵌入式 Linux驱动程序设计之驱动编译进内核

linux三大设备驱动
字符设备:IO的传输过程是以字符为单位的,没有缓冲,如:I2C,SPI;
块设备:IO传输过程以块为单位,根存储相关的都是块设备,如:tf卡,EMMC;
网络设备:以套接字来访问的.

1.杂项设备驱动属于字符设备,杂项设备可以自动生成设备节点.我们系统里有很多杂项设备,开发板可以使用cat /proc/misc/查看;虚拟机在/dev/下;
[root@qemu_imx6ul:/dev]# cat /proc/misc 
 59 ubi_ctrl
 60 memory_bandwidth
 61 network_throughput
 62 network_latency
 63 cpu_dma_latency
130 watchdog
237 loop-control
183 hw_random
229 fuse
235 autofs

2.杂项设备除了比字符设备代码简单,而且杂项设备的主设备号是相同的,均为10,次设备号是不同的,主设备号相同就可以节省内核资源;
3.设备号包含:主设备号和次设备号,主设备号在linux下是唯一的次设备号是不一定唯一的;设备号是计算机识别设备的一种方式,主设备相同就被视为同一类设备;主设备号可以理解为电话号码的区号,次设备号为电话号.
主设备号可以通过命令cat /proc/devices查看(开发板和虚拟机都可以查看);
4.开发板:内核源码路径下/include/linux/miscdevice.h可以看到杂项设备相关结构体描述

在这里插入图片描述在这里插入图片描述在这里插入图片描述

注意:因为杂项设备主设备号固定为10,次设备号一般使用宏:该文件中的#define MISC_DYNAMIC_MINOR 255来自动分配
注册杂项设备:extern int misc_register(struct miscdevice* misc)
注销杂项设备:extern int misc_deregister(struct miscdevice* misc)

file_operations文件操作集定义在include/linux/fs.h里面
在这里插入图片描述这个结构体作用:里面每一个结构体成员都对应一个调用.

5.注册杂项设备流程
5.1填充miscdevice这个结构体;
5.2填充file_operations结构体;
5.3注册杂项设备并生成设备节点.
例子:注册杂项设备并生成杂项设备节点
//第一步  包含头文件
#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="hello_misc",
	.fops=&misc_fops
};

static int misc_init(void)
{
	int ret;
	ret=misc_register(&misc_dev);
	if(ret<0)
	{
		printk("misc register is error\n");
		return -1;
	}
    printk("misc\n");
    return 0;
}
static int misc_exit(void)
{
	misc_deregister(&misc_dev);
    printk("bye bye\n");
    return 0;
}

//第二步  驱动模块入口和出口
module_init(misc_init);
module_exit(misc_exit);

//第三步 声明模块拥有开源许可证
MODULE_LICENSE("GPL");

使用make编译后拷贝ko文件到开发板运行查看效果.

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值