RK3568平台 热插拔机制

一.热插拔的基本概念

热插拔是指在设备运行的情况下,能够安全地插入或拔出硬件设备,而无需关闭或重启系统。这意味着你可以在计算机或其他电子设备上插入或拔出硬件组件(比如USB设备,扩展卡,硬件驱动器等),而无需关机或中断正在进行的操作。

比如鼠标,键盘,打印机,存储设备等。

二.热插拔用到的文件系统

mdev:mdev 是一个轻量级的热插拔设备文件系统,通常用于嵌入式Linux 系统。它是udev的简化版本,使用 uevent_helper 机制来处理设备的插入和拔出事件。mdev 在设备插入时调用相应的用户程序来创建设备节点。

udev:udev 是目前在 PC 机上广泛使用的热插拔设备文件系统。它基于netlink 机制,监听内核发送的 uevent 来处理设备的插入和拔出。udev 能够动态创建和管理设备节点,并在设备插入时加载适当的驱动程序。它提供了丰富的配置选项,使用户能够灵活地管理设备文件。

udev 是目前应用最广泛的设备文件系统,而mdev主要用于嵌入式系统中,提供了轻量级的设备管理功能。

三.内核发送事件到用户空间

kobject_uevent 函数,用于生成和发送uevent 事件到用户空间。

int kobject_uevent(struct kobject *kobj, enum kobject_action action);

kobj : 要发送 uevent 事件的内核对象(kobject)

action: 表示触发 uevent 的动作,可以是设备的插入,拔出,属性变化等。

驱动程序:

#include <linux/module.h>
#include <linux/init.h>
#include <linux/slab.h>
#include <linux/configfs.h>
#include <linux/kernel.h>
#include <linux/kobject.h>struct kobject *mykobject01;
struct kset *mykset;
struct kobj_type mytype;// 模块的初始化函数
static int mykobj_init(void)
{int ret;// 创建并添加一个ksetmykset = kset_create_and_add("mykset", NULL, NULL);// 分配并初始化一个kobjectmykobject01 = kzalloc(sizeof(struct kobject), GFP_KERNEL);mykobject01->kset = mykset;// 初始化并添加kobject到ksetret = kobject_init_and_add(mykobject01, &mytype, NULL, "%s", "mykobject01");// 触发一个uevent事件,表示kobject的属性发生了变化ret = kobject_uevent(mykobject01, KOBJ_CHANGE);return 0;
}// 模块退出函数
static void mykobj_exit(void)
{// 释放kobjectkobject_put(mykobject01);kset_unregister(mykset);
}module_init(mykobj_init);  // 指定模块的初始化函数
module_exit(mykobj_exit);  // 指定模块的退出函数MODULE_LICENSE("GPL");    // 模块使用的许可证
MODULE_AUTHOR("topeet");  // 模块的作者

驱动加载之后,如上图所示 udev 接收到 change 动作,说明uevent 事件已经发送成功了。/mykset/mykobject01 是 kobject 在根目录/sys/下的路径。

四.使用 udev 挂载 U 盘

待更新。。。。。。

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

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

相关文章

LeetCode Hot100 回顾(二)

子串 560.和为K的子数组 使用前缀和预处理一下题目给的数组, 然后用二重循环遍历一遍就可以了。 239.滑动窗口最大值 看题面比较容易想到的是用优先级队列来解决, 但是STL中的priority_queue不支持随机删除, 如果要用优先级队列来解决这道题的话比较复杂。这道题的一种正确…

K8S搭建(centos)完整版

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

信奥一本通:2022:【例4.7】最小n值

说简单一点&#xff0c;就是让你输入m&#xff0c;然后计算2分之一 三分之一 一直加下去&#xff0c;直到能大于m 然后输出在这个过程中是多少次&#xff0c;也就是n&#xff0c;那么我们怎么把分数加起来&#xff0c;就只能把分数变为小数&#xff0c;可以发现&#xff0c;上…

Windows驱动开发之环境搭建,长期Waiting for connecting...思路

Windows驱动开发之环境搭建 1、前期准备 Vmware虚拟机软件 Windows10 iso安装包 Visual Studio2022 IDE软件 SDK安装&#xff08;一定要勾选上debug选项&#xff0c;windbg在里面&#xff09; WDK&#xff08;Windows驱动程序工具包&#xff09; WDK安装请参考官方文档&…

4D毫米波雷达分类和工程实现

4D毫米波目标检测信息丰富&#xff0c;可获得目标3维位置信息、径向速度vr和rcs等&#xff0c;能够对目标准确分类。 4D毫米波和激光做好时空同步&#xff0c;可以用激光目标给4D毫米波做标注&#xff0c;提升标注效率。 1 激光用做4D毫米波分类真值 128线激光推理的结果作为4…

Kotlin快速入门系列9

Kotlin对象表达式和对象声明 对象表达式 有时&#xff0c;我们想要创建一个对当前类有些许修改的对象同时又不想重新声明一个子类。如果是Java&#xff0c;可以用匿名内部类的概念来解决这个问题。kotlin的对象表达式和对象声明就是为了实现这一点(创建一个对某个类做了轻微改…

【开源操作系统】上海道宁为您带来稳定、安全、开源和易用的操作系统——Ubuntu,为您的数字化生活保驾护航

Ubuntu是 源于非洲的一种传统价值观 意为“人性、关爱和共享” 这种价值观在 开源、稳定、安全、易用的 Ubuntu操作系统中 得到了完美的体现 除此之外&#xff0c;Ubuntu还具有 强大的安全性 它自带了诸多安全功能 如防火墙、加密文件系统等 可以有效地保护用户的隐私…

java组装复杂的map结构

如下图数据库查出来的记录要组装成如下图所示的map结构。 直接上代码 package com.rt.test.other;import org.apache.commons.lang.StringUtils;import java.util.*;public class TestMap {public static void main(String[] args) {Map<String,String> mapnew LinkedHa…

15EG使用vivado2023.1点亮PL led

打开VIVADO2023.1 创建一个新的工程 输入项目名称和地址&#xff0c;下面那个选项为是否使用项目名称新建一个文件夹&#xff0c;我这里已经建了一个pl_only_led文件夹&#xff0c;所以不勾选 选择RTL工程&#xff0c;勾选不添加文件 搜索15eg&#xff0c;选择xqzu15eg-ffrb115…

treeview

QML自定义一个TreeView&#xff0c;使用ListView递归 在 Qt5 的 QtQuick.Controls 2.x 中还没有 TreeView 这个控件&#xff08;在 Qt6 中出了一个继承自 TableView 的 TreeView&#xff09;&#xff0c;而且 QtQuick.Controls 1.x 中的也需要配合 C model 来自定义&#xff0c…

【数论】【分类讨论】【C++算法】1611使整数变为 0 的最少操作次数

作者推荐 【动态规划】【字符串】【行程码】1531. 压缩字符串 涉及知识点 数论 数学 分类讨论 LeetCoce1611. 使整数变为 0 的最少操作次数 给你一个整数 n&#xff0c;你需要重复执行多次下述操作将其转换为 0 &#xff1a; 翻转 n 的二进制表示中最右侧位&#xff08;第…

Ubuntu 22.04 中文乱码解决方案

sudo apkg-reconfigure locales 按空格键选中