18_热拔插驱动

news/2024/10/31 1:26:15/

18_热拔插驱动

文章目录

  • 18_热拔插驱动
  • 1、介绍
  • 2、分析class_device_create函数
  • 3、示例
    • 3.1、装载buttons驱动
    • 3.2、卸载buttons驱动
  • 4、自动挂载U盘
    • 4.1、U盘介绍
    • 4.2、分析mdev
    • 4.3、写mdev.conf进行U盘测试
      • 4.3.1、文件装载
      • 4.3.2、U盘自动挂载到mnt目录

1、介绍

热拔插即:hotplug/uevent机制。
问:在以前写的驱动程序中分配了主设备号,创建了file_operatinons结构体,为什么还要创建类?还要在类下面创建设备呢?
答:以前说为了让mdev根据这些信息来创建设备节点
在这里插入图片描述

2、分析class_device_create函数

class_device_createclass_device_registerclass_device_addkobject_uevent(&class_dev->kobj, KOBJ_ADD);kobject_uevent_env(kobj, action, NULL);// action_string = "add";action_string = action_to_string(action);/* 分配保存环境变量的内存 *//* environment values */buffer = kmalloc(BUFFER_SIZE, GFP_KERNEL);/* 设置环境变量 */envp [i++] = scratch;scratch += sprintf(scratch, "ACTION=%s", action_string) + 1;envp [i++] = scratch;scratch += sprintf (scratch, "DEVPATH=%s", devpath) + 1;envp [i++] = scratch;scratch += sprintf(scratch, "SUBSYSTEM=%s", subsystem) + 1;/ * 调用应用程序: 比如mdev* 启动脚本 echo /sbin/mdev > /proc/sys/kernel/hotplug * 设置了uevent_helper为“/sbin/mdev“* /argv [0] = uevent_helper;  // = "/sbin/mdev"argv [1] = (char *)subsystem;argv [2] = NULL;call_usermodehelper (argv[0], argv, envp, 0);

其中环境变量可通过env命令来查看:
在这里插入图片描述
这些环境变量就是sh程序的环境变量:
在这里插入图片描述
为什么确定调用的应用程序为mdev呢:?如下:
cat /etc/init.d/rcS
在这里插入图片描述
在类下面创建一个设备时,最终会导致mdev程序的运行,调用用户模式下的辅助程序call_usermodehelper 。在设置环境变量之后,运行mdev,mdev根据设备好的环境变量来创建设备节点。

3、示例

操作vi lib/kobject_uevent.c +208,在里面加上:printk("100ask: uevent_helper = %s\n", uevent_helper);for(i = 0; i < envp[i]; i++){/* 应用程序的环境变量 */printk("envp[%d] = %s\n", i, envp[i]);}

3.1、装载buttons驱动

在这里插入图片描述
可以看出buttons中创建类和设备最终就会调用一个应用程序uevent_helper,这个应用程序一般就设备为 /sbin/mdev。之后mdev这个应用程序就会根据这些环境变量创建设备节点。
来分析: busybox mdev.c
100ask: uevent_helper = /sbin/mdev
envp[0] = HOME=/
envp[1] = PATH=/sbin:/bin:/usr/sbin:/usr/bin
envp[2] = ACTION=add
envp[3] = DEVPATH=/class/sixth_drv/buttons
envp[4] = SUBSYSTEM=sixth_drv
envp[5] = SEQNUM=720
envp[6] = MAJOR=252
envp[7] = MINOR=0

mdev_main
//temp = /sys/class/sixth_drv/buttons
make_device(temp, 0);
/* 确定设备文件名,类型,主次设备号 */
device_name = bb_basename(path); //= “buttons”
//‘c’ == > 字符设备节点
//根据"/sys/class/sixth_drv/buttons/dev"的内容确定主次设备号
mknod(device_name, mode | type, makedev(major, minor)

3.2、卸载buttons驱动

在这里插入图片描述
也会调用到应用程序call_usermodehelper,还是会根据环境变量:envp[2] = ACTION=remove来删除设备节点
在这里插入图片描述

4、自动挂载U盘

4.1、U盘介绍

在这里插入图片描述

4.2、分析mdev

在busybos工程下,文件mdev.c里的make_device函数中:
如果没有配置文件的话,只创建设备节点:
在这里插入图片描述
如果有配置文件的话,根据配置文件操作:
在这里插入图片描述
问:是否可以通过配置文件来执行我的挂载命令呢?
答:可以,在mdev.txt中有配置文件的介绍
mdev.conf的格式:

<device regex> <uid>:<gid> <octal permissions> [<@|$|*> <command>]
device regex:正则表达式,表示哪一个设备
uid: owner
gid: 组ID
octal permissions:以8进制表示的属性
@:创建设备节点之后执行命令
$:删除设备节点之前执行命令
*: 创建设备节点之后 和 删除设备节点之前都可以来执行命令
command:要执行的命令
其中8进制属性默认为660,即rw-:可读、可写、不可执行

在这里插入图片描述
例如:(c表示字符设备、b表示块设备)
在这里插入图片描述
从左到右:
c(字符设备)rw-(用户对这个文件的权限)rw-(用户同一个组的成员权限) —(其他用户的权限)
正则表达式介绍:
在这里插入图片描述

4.3、写mdev.conf进行U盘测试

装载leds.ko查看权限:
在这里插入图片描述
vi /etc/mdev.conf修改为:

4.3.1、文件装载

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

在这里插入图片描述

4.3.2、U盘自动挂载到mnt目录

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


http://www.ppmy.cn/news/483444.html

相关文章

SpringBoot + Vue前后端分离项目实战 || 一:Vue前端设计

文章目录 环境配置开发工具下载Vue前端模板前端项目启动前端说明及修改修改导航栏自定义菜单与子菜单增加导航标签功能 前端数据格式 B站视频讲解&#xff1a;2023全网最简单但实用的SpringBootVue前后端分离项目实战 不想看视频可浏览此文章笔记&#xff0c;比较详细 环境配置…

HDMI热拔插电路举例说明

HDMI_PLUG 最近设计关于HDMI的接口设计&#xff0c;在热拔插上纠结了很久&#xff0c;现在总结下。 如图 我们HDMI接口的18脚为外部输入电压5V&#xff0c;而19脚是我们的检测脚&#xff0c;该脚在内部是有一个500k的电阻接到地&#xff0c;所以我们外部用一个1k的电阻就可把…

USB协议详解第28讲(USB硬件设计和热拔插原理)

目录 1.USB引脚接线定义 2.低速USB设备硬件设计原理 3.全速、高速USB设备硬件设计原理 4.USB设备插入检测和速度检测 4.1低速设备连接检测时序图 4.2全速设备连接检测时序图。 4.3设备断开时序图 1.USB引脚接线定义 对于四线制的USB&#xff0c;即USB1.0、USB1.1和USB2…

热插拔技术--以ADM1177为例说明

综述 ADM1177是一款热插拔控制器&#xff0c;并且还支持电压电流采集&#xff08;12bitADC&#xff09;和传输(IIC).本文着重说明热插拔技术&#xff0c;所以仅说明ADM热插拔处理过程&#xff0c;对于ADC和IIC部分不予说明&#xff0c;请读者自行研究。 热插拔的应用背景 服务…

(十七)Linux的热拔插UDEV机制

学习日志&#xff08;十七&#xff09; Linux的热拔插UDEV机制 Udev设备工具 Udev简介 udev是一个设备管理工具&#xff1b; udev以守护进程的形式运行&#xff0c;通过侦听内核发出来的uevent来管理/dev目录下的设备文件。 udev在用户空间运行&#xff0c;而不在内核空间…

带电插拔损坏设备原理_那些设备可以热插拔?

我们常常会看到一个词语热插拔&#xff0c; 对于从事 IT 人事来讲并不陌生&#xff0c; 但对于一般普通用户 来讲热插拔就一知半解了&#xff0c;那么什么是热插拔呢&#xff0c;热插拔是什么意思呢&#xff0c;热插拔就是指带电 插拔电脑 (IT) 上的设备&#xff0c; 英文 (hot…

DP83848+网线热拔插

过程说明 1掉电和中断 掉电和中断功能在设备的7脚上复用。默认情况下&#xff0c;这个pin作为断电输入&#xff0c;中断功能被禁用。设置MICR位0 (INT_OE)(0x11h)将引脚配置为一个激活的低电平中断输出。 2掉电控制模式 PWRDOWN_INT引脚可以被断言为低电平以将设备置于Power D…

认识和使用热插拔的正确姿势

热插拔功能是PCIe SSD的一项重要功能&#xff0c; 能大大简化设备更换和调试步骤。特别是在服务器厂商推出支持 U.2 接口的产品后&#xff0c;对热插拔的需求更加广泛。热插拔在 PBlaze5 PCIe SSD应用非常成熟。这篇文章旨在为使用 PBlaze5为代表的U.2接口的PCIe SSD进行热插拔…