【讯为Linux驱动笔记1】申请一个字符设备

Linux下每个设备都需要有一个专属设备号:主设备号 + 次设备号

【申请字符设备】

主设备号:一类驱动:如:USB驱动

次设备号:这类驱动下的某个设备 如:键盘鼠标

设备号是32位的dev_t类型的,高12位主设备号,低20位次设备号

随便打开一个例程:

1.1怎么分配设备号?

1.静态申请 :

register_chrdev_region(dev_t ,unsigned ,const char *)

dev_t :设备号起始值,比如MKDEV(100,0)

unsigned :次设备号的数量

const char * :设备名称 ,随意取

2.动态申请:

alloc_chrdev_region(dev_t ,unsigned ,unsigned ,const char *)

dev_t : 保存自动申请的设备号

unsigned : 次设备号的起始,一般为0

unsigned : 次设备号的数量

const char * :设备名称 ,随意取

1.2设备号释放

unregister_chrdev_region(dev_t, unsigned))

dev_t :设备号

unsigned :设备号的数量

【实验1】申请字符设备号

通过驱动传参,将设备号传进驱动

static int major = 0;
static int minor = 0;
module_param(major ,int ,S_IRUGO);
module_param(minor ,int ,S_IRUGO);dev_t dev_num;static int moduleparam_init()
{int ret;if(major) /* 判断设备号有没有传进来成功 */{printk("major is %d\n",major);printk("minor is %d\n",minor);dev_num = MKDEV(major, minor); /* 静态申请设备号 */ret = register_chrdev_region(dev_num, DEVICE_NUMBER,DEVICE_SNAME);  if(ret<0){printk("register_chrdev_region error\n");}/* 静态注册设备号成功,则打印 */printk("register_chrdev_region ok\n");}else{/* 没有传递进来,就动态申请 */ret = alloc_chrdev_region(&dev_num,0,1);  if(ret<0){printk("alloc_chrdev_region error\n");}//动态注册设备号成功,则打印printk("alloc_chrdev_region ok\n");  major_num = MAJOR(dev_num); //将主设备号取出来minor_num = MINOR(dev_num);//将次设备号取出来printk("major_num = %d\n",major_num);//打印传入进来的主设备号printk("minor_num = %d\n",minor_num);//打印传入进来的次设备号}return 0;
}static void hello_exit(void)
{unregister_chrdev_region(MKDEV(major_num,minor_num),DEVICE_NUMBER);//注销设备号printk("gooodbye! \n");
}module_init(moduleparam_init);
module_init(moduleparam_exit);

【实验结果】

修改Makefile:

编译生成.ko文件

1.动态方法:

加载模块:insmod dev_t.ko

******************

会打印主设备号和次设备号

2.静态方法:

查看设备号:cat proc/devices

手动给设备号:insmod dev_t.ko major = 222 minor =0

再查看设备号。

PS:perm指定了在sysfs中相应文件的访问权限。访问权限与linux文件爱你访问权限相同的方式管理,如0644,或使用stat.h中的宏如S_IRUGO表示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/650701.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

酒店大厅装智能酒精壁炉前和装后对比

安装智能酒精壁炉前后&#xff0c;酒店大厅的氛围和效果会有显著的对比&#xff1a; 装前&#xff1a; 普通装饰&#xff1a; 大厅可能显得比较普通&#xff0c;缺乏独特的装饰和氛围元素。 空间感较弱&#xff1a; 大厅可能缺乏焦点和吸引力&#xff0c;客人进入后感觉空间…

C# 生成图形验证码

目录 应用场景 开发运行环境 设计 生成内容 生成图片 实现 核心代码 调用示例 小结 应用场景 我们当用户登录系统时经常会用到图形验证码技术&#xff0c;要求用户识别图片中的内容&#xff0c;并正确输入&#xff0c;方可尝试登录。类似的场景还有用户注册或者涉及…

65.网络游戏逆向分析与漏洞攻防-利用数据包构建角色信息-根据解析好的角色数据还原对应数据结构

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果&#xff0c;代码看不懂是正常的&#xff0c;只要会抄就行&#xff0c;抄着抄着就能懂了 内容…

Java对象不再使用时,为什么要赋值为 null

相信大家在面试Java开发的时候,会遇到比较多的问题是Java的内存管理,这里面涉及到Java垃圾回收机制,以及JVM调优等等,那么今天跟大家讨论一个问题:Java对象不再使用时,为什么要赋值为 null ? 1、Java内存管理 在Java中,对象是在堆内存中分配的。 这部分内存用于存储…

YES-100B数显压力试验机

一、简介 本机采用主机与液压系统集于一体的结构形式&#xff0c;结构紧凑&#xff0c;小巧玲珑。采用液压加荷、电子测力&#xff0c;具有加荷数率显示&#xff0c;峰值保持等功能&#xff0c;并配有微型打印机。本机适用于水泥抗压、建筑砂浆抗压试验&#xff0c;也可用于混…

Jammy@Jetson Orin - Tensorflow Keras Get Started: 000 setup for tutorial

JammyJetson Orin - Tensorflow & Keras Get Started: 000 setup for tutorial 1. 源由2. 搭建环境2.1 安装IDE环境2.2 安装numpy2.3 安装keras2.4 安装JAX2.5 安装tensorflow2.6 安装PyTorch2.7 安装nbdiff 3. 测试DEMO3.1 numpy版本兼容问题3.2 karas API - model.compil…

YOLOV5 TensorRT部署 BatchedNMS(engine模型推理)(下)

主要是在王新宇代码的基础上改进,引入对BatchedNMS的解码 文章目录 1. 修改yolov5.cpp2.修改yololayer.h1. 修改yolov5.cpp 首先增加全局变量,名字根据转onnx时修改的节点名字来,查看onnx文件可以看到,顺序不要弄错。 const char *INPUT_NAME = “images”; const char …

在Git中如何查看工作目录与暂存区的差异?

文章目录 在Git中查看工作目录与暂存区的差异查看工作目录与暂存区差异的命令示例代码及说明&#xff1a; 在Git中查看工作目录与暂存区的差异 当你在使用Git进行版本控制时&#xff0c;经常需要了解工作目录&#xff08;Working Directory&#xff09;中的文件与暂存区&#…

【Linux系统编程】基础指令(二)

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

1分钟掌握 Python 函数参数

任何编程语言函数都是非常重要的一部分&#xff0c;而在进行函数调用时&#xff0c;了解函数的参数传递方式是非常有必要的。Python中支持哪些传参方式呢&#xff1f; Python中的传参方式是比较灵活的&#xff0c;主要包括以下六种&#xff1a; 按照位置传参按照关键字传参默…

算法基础:并查集详解

并查集 并查集&#xff0c;在一些有N个元素的集合应用问题中&#xff0c;我们通常是在开始时让每个元素构成一个单元素的集合&#xff0c;然后按一定顺序将属于同一组的元素所在的集合合并&#xff0c;其间要反复查找一个元素在哪个集合中。这一类问题近几年来反复出现在信息学…

开源框架-链路追踪(SkyWalking)

SkyWalking 极简入门 | Apache SkyWalking 开发环境配置&#xff1a; -javaagent:D:\xxxxx\yyyy\skywalking-agent.jar -DSW_AGENT_NAMEspringboot-xxxx-demo -DSW_AGENT_COLLECTOR_BACKEND_SERVICES127.0.0.1:11800