RK3568驱动指南|第十篇 热插拔-第118章 使用udev挂载U盘和T卡实验

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工智能应用。RK3568 支持安卓 11 和 linux 系统,主要面向物联网网关、NVR 存储、工控平板、工业检测、工控盒、卡拉 OK、云终端、车载中控等行业。


【公众号】迅为电子

【粉丝群】824412014(加群获取驱动文档+例程)

【视频观看】嵌入式学习之Linux驱动(第十期_热插拔_全新升级)_基于RK3568

【购买链接】迅为RK3568开发板瑞芯微Linux安卓鸿蒙ARM核心板人工智能AI主板


第118章 使用udev挂载U盘和T卡实验

在前面章节中所讲解的都是关于热插拔的理论和较为简单的实验,而为了加深大家对热插拔的理解以及在可以在实际工作中进行应用,所以在本章节将进行实践,使用udev挂载U盘和T卡。

118.1 配置buildroot文件系统支持udev

上一章中我们编写了一个名为mdev的应用程序,用来处理uevent事件,而实际上udev和mdev的可执行程序都是很复杂的,也并不需要我们自己来写,只需要在构建buildroot文件系统时勾选对应的选项即可。首先来到buildroot的源码目录下,如下图(图 118-1)然后使用以下命令加载rk3568的默认配置文件)所示:

图 118-1

然后使用以下命令加载rk3568的默认配置文件并进入到图形化配置界面,如下图(图 118-2)所示:

make rockchip_rk3568_defconfig

make menuconfig

图 118-2

由于本章节使用的是udev所以需要在在System configuration菜单中,选择/dev management (Dynamic using devtmpfs + eudev),如下图(图 118-3)所示:

 

图 118-3

默认情况下选中的就是udev,相应的镜像已经放在了“iTOP-RK3568开发板【底板V1.7版本】\03_【iTOP-RK3568开发板】指南教程\02_Linux驱动配套资料\04_Linux驱动程序\82_udev_u盘_TF卡”目录下如下图所示:

烧写该镜像之后,可以在串口终端输入以下命令来查看udev是否已经启用了,如下图(图 118-4)所示:

ps -aux | grep -nR udev

图 118-4

检查到/sbin/udevd进程就表示当前系统使用的是udev,至此配置buildroot文件系统支持udev就完成了。

118.2使用udev挂载U盘

本小节编写完成的文件对应的网盘路径为:iTOP-RK3568开发板【底板V1.7版本】\03_【iTOP-RK3568开发板】指南教程\02_Linux驱动配套资料\04_Linux驱动例程04_Linux驱动程序\82_udev_u盘_TF卡\U盘

在上一小节中配置buildroot使能了udev,而要想使用udev来实现U盘的自动挂载,还需在开发板的/etc/udev/rules.d目录下创建相应的规则文件(/etc/udev/rules.d目录不存在可以手动创建,一般都已经存在了),这里我们创建一个名为001.rules的文件,如下图(图 118-5)所示:

图 118-5

然后向该文件中添加以下内容:

KERNEL=="sd[a-z][0-9]", SUBSYSTEM=="block", ACTION=="add", RUN+="/etc/udev/rules.d/usb/usb-add.sh %k"
SUBSYSTEM=="block", ACTION=="remove", RUN+="/etc/udev/rules.d/usb/usb-remove.sh"

(1)KERNEL=="sd[a-z][0-9]"

KERNEL:表示匹配设备的内核名。

"sd[a-z][0-9]":是一个正则表达式模式,sd:表示设备名以 "sd" 开头,[a-z]:表示设备名的第三个字符是小写字母,[0-9]:表示设备名的第四个字符是数字。

这个模式用于匹配 USB 存储设备的块设备节点,如 /dev/sda1、/dev/sdb2 等。

(2)SUBSYSTEM=="block"

SUBSYSTEM:表示匹配设备的子系统名称。

"block":表示设备的子系统是块设备子系统,即与磁盘、分区等相关的设备。

这部分规则是为了确保只匹配块设备子系统下的设备。

(3)ACTION=="add"和 ACTION=="remove"

ACTION:表示匹配设备的动作。

"add":表示设备被添加。

"remove":表示设备被yichu。

这部分规则是为了处理设备被添加和被删除的事件。

(5)RUN+="/etc/udev/rules.d/usb/usb-add.sh %k"

RUN+="...":表示在匹配的设备上执行指定的命令。

"/etc/udev/rules.d/usb/usb-add.sh":是要执行的命令的路径,即在设备添加时执行 /etc/udev/rules.d/usb/usb-add.sh 脚本文件。

%k:是 Udev 提供的一个变量,表示匹配的设备的内核名。

可以注意到当块设备被添加的时候会执行/etc/udev/rules.d/usb/usb-add.sh脚本,块设备被删除的时候会执行/etc/udev/rules.d/usb/usb-remove.sh脚本,所以接下来我们要完善这两个脚本内容,首先在/etc/udev/rules.d/目录下创建名为usb的文件夹,并在这个创建usb-add.sh和usb-remove.sh脚本,如下图(图 118-6) 所示:

图 118-6

然后在 /etc/udev/rules.d/usb/usb-add.sh 文件中写入以下内容:

#!/bin/sh
/bin/mount -t vfat /dev/$1 /mnt

在 /etc/udev/rules.d/usb/usb-remove.sh 文件中写入以下内容:

#!/bin/sh
sync
/bin/umount -l /mnt

添加完成如下图(图 118-7)所示:

图 118-7

添加完成之后还需要使用chmod命令赋予两个脚本的可执行权限,如下图(图 118-8)所示:

图 118-8

至此关于udev自动挂载U盘的相关配置文件完成了,首先输入以下df命令查看当前的挂载情况,如下图(图 118-9)所示:

图 118-9

可以看到当前并没有关于U盘相关的挂载信息,然后插入U盘,相关打印如下(图 118-10)所示:

图 118-10

然后重新使用df命令查看当前的挂载情况,如下图(图 118-11)所示:

图 118-11

可以看到U盘sda1就成功挂载到了/mnt目录,然后拔掉U盘,重新使用df命令查看当前挂载情况,可以发现/dev/sda1设备已经消失了,如下图所示:

图 118-12

至此,使用udev自动挂载U盘实验就完成了。

118.3使用udev挂载TF卡

本小节编写完成的文件对应的网盘路径为:iTOP-RK3568开发板【底板V1.7版本】\03_【iTOP-RK3568开发板】指南教程\02_Linux驱动配套资料\04_Linux驱动例程04_Linux驱动程序\82_udev_u盘_TF卡\TF卡

在上一个小节中我们实现了U盘的自动挂载,而为了帮助同学们举一反三,本小节要使用udev实现TF卡的自动挂载,将TF卡挂载到/mnt目录下,在不做任何修改的情况下,直接插入TF卡,会发现TF卡直接挂载到了/mnt/sdcard目录,如下图所示:

图 118-13

这是因为在/lib/udev/rules.d目录下已经帮我们添加了很多的udev规则,如下图所示:

图 118-14

这里的规则文件跟我们上一小节自己创建的规则文件所实现的作用是相同的,只是 /etc/udev/rules.d/目录的规则文件比/lib/udev/rules.d目录的规则文件优先级高。

所以要实现TF卡自动挂载到/mnt命令让就需要进入到 /etc/udev/rules.d/目录下,这次我们创建一个名为002.rules的文件,如下图所示:

图 118-15

然后向该文件中添加以下内容:

KERNEL=="mmcblk[0-9]p[0-9]", SUBSYSTEM=="block", ACTION=="add", RUN+="/etc/udev/rules.d/tf/tf-add.sh %k"
SUBSYSTEM=="block", ACTION=="remove", RUN+="/etc/udev/rules.d/tf/tf-remove.sh"

(1)KERNEL=="mmcblk[0-9]p[0-9]"

KERNEL:表示匹配设备的内核名。

"mmcblk[a-z][0-9]":是一个正则表达式模式,mmcblk:表示设备名以 "mmcblk" 开头,[0-9]:表示设备名的第7个字符和第9个字符是数字。

这个模式用于匹配TF卡存储设备的块设备节点,如 /dev/mmcblk1p1 等。

(2)SUBSYSTEM=="block"

SUBSYSTEM:表示匹配设备的子系统名称。

"block":表示设备的子系统是块设备子系统,即与磁盘、分区等相关的设备。

这部分规则是为了确保只匹配块设备子系统下的设备。

(3)ACTION=="add"和 ACTION=="remove"

ACTION:表示匹配设备的动作。

"add":表示设备被添加。

"remove":表示设备被yichu。

这部分规则是为了处理设备被添加和被删除的事件。

(5)RUN+="/etc/udev/rules.d/tf/tf-add.sh %k"

RUN+="...":表示在匹配的设备上执行指定的命令。

"/etc/udev/rules.d/tf/tf-add.sh":是要执行的命令的路径,即在设备添加时执行 /etc/udev/rules.d/tf/tf-add.sh 脚本文件。

%k:是 Udev 提供的一个变量,表示匹配的设备的内核名。

当TF卡块设备被添加的时候会执行/etc/udev/rules.d/usb/tf-add.sh脚本,TF卡块设备被删除的时候会执行/etc/udev/rules.d/tf/tf-remove.sh脚本,所以接下来我们要完善这两个脚本内容,首先在/etc/udev/rules.d/目录下创建名为tf的文件夹,并在这个创建tf-add.sh和tf-remove.sh脚本,如下图 所示:

图 118-16

然后在 /etc/udev/rules.d/usb/tf-add.sh 文件中写入以下内容:

#!/bin/sh
/bin/mount -t vfat /dev/$1 /mnt

在 /etc/udev/rules.d/usb/tf-remove.sh 文件中写入以下内容:

#!/bin/sh
sync
/bin/umount -l /mnt

添加完成如下图所示:

图 118-17

添加完成之后还需要使用chmod命令赋予两个脚本的可执行权限,如下图所示

图 118-18

至此关于udev自动挂载TF卡的相关配置文件完成了,首先输入以下df命令查看当前的挂载情况,如下图所示:

图 118-19

可以看到当前并没有关于TF卡相关的挂载信息,然后插入U盘,相关打印如下所示:

图 118-20

然后重新使用df命令查看当前的挂载情况,如下图所示:

图 118-21

可以看到TF卡mmcblk1p1就成功挂载到了/mnt目录,然后拔掉U盘,重新使用df命令查看当前挂载情况,可以发现/dev/mmcblk1p1设备已经消失了,如下图所示:

图 118-22

至此,使用udev自动挂载TF卡的实验就完成了。


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

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

相关文章

CTF-PWN-沙箱逃脱-【seccomp和prtcl-1】

文章目录 啥是seccomp#ifndef #define #endif使用使用格式 seccomp无参数条件禁用系统调用有参数条件禁用系统调用 prctl实例 seccomp_export_bpf 啥是seccomp 就是可以禁用掉某些系统调用,然后只能允许某些系统调用 #ifndef #define #endif使用 #ifndef #defin…

Day4Qt

1.头文件: #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTime>//时间类 #include <QTimer>//时间事件类 #include <QTimerEvent>//定时器类 #include <QTextToSpeech> namespace Ui { class Widget; }class Widget : publi…

JMeter 批量接口测试

一、背景 最近在进行某中台的接口测试准备&#xff0c;发现接口数量非常多&#xff0c;有6、70个&#xff0c;而且每个接口都有大量的参数并且需要进行各种参数验证来测试接口是否能够正确返回响应值。想了几种方案后&#xff0c;决定尝试使用JMeter的csv读取来实现批量的接口…

vscode 创建文件自动添加注释信息

随机记录 目录 1. 背景介绍 2. "Docstring Generator"扩展 2.1 安装 2.2 设置注释信息 3. 自动配置py 文件头注释 1. 背景介绍 在VS Code中&#xff0c;您可以使用扩展来为新创建的Python文件自动添加头部注释信息。有几个常用的扩展可以实现此功能&#xff0…

Vue3:使用解构赋值来读取对象里的键-值对(值也是对象)

一、前言 在Vue3中&#xff0c;想要读取一个对象的“键—值”对&#xff08;值也是一个对象&#xff09;&#xff0c;数据格式如下&#xff1a; {1:{courseName: 课程1, study: 951526, visit: 3785553}&#xff0c;2:{courseName: 课程2, study: 181630, visit: 380830}&…

springboot+ipage分页频繁请求会报错 自动添加多一个limit

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near LIMIT 500 at line 3 这个原因是因为springboot配置mysql的连接池太…

nginx sendfile

http模块中有一个sendfile指令&#xff0c;默认开启的 简单来说就是启用sendfile()系统调用来替换read()和write()调用&#xff0c;减少系统上下文切换从而提高性能&#xff0c; 当 nginx 是静态文件服务器时&#xff0c;能极大提高nginx的性能表现&#xff0c; 而当 nginx 是…

在线问卷调查的优势:提升数据收集与分析效率的关键要素

无论是在工作中还是学习中&#xff0c;我们经常会使用问卷调查法来解决一些问题。不过&#xff0c;问卷调查有两种形式——线上和线下&#xff0c;这两者之间有什么优势和不足呢&#xff1f; 纸质问卷&#xff1a; 1、优势&#xff1a; 我们在使用纸质问卷的时候&#xff0c;通…

十年磨一剑,写在美国比特币现货ETF获批后

出品&#xff5c;欧科云链研究院 作者&#xff5c;Hedy Bi 两天前&#xff0c;我们提出&#xff0c;对于比特币现货ETF市场。十年磨一剑&#xff0c;今天&#xff0c;这一里程碑终于到来。美国证监会&#xff08;SEC&#xff09;批准了11只比特币现货ETF&#xff0c;将会在芝…

【计算机网络】TCP原理 | 可靠性机制分析(三)

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【网络编程】【Java系列】 本专栏旨在分享学习网络编程、计算机网络的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目…

气温如同过山车?探索气候变化对肠道微生物组的影响

谷禾健康 今年的天气&#xff0c;如此的奇怪&#xff1a; 短袖和羽绒服之间&#xff0c;只差了一个降温 忽冷忽热&#xff0c;气温仿佛过山车... 11月初多地气温破纪录&#xff0c;冬天集体迟到... 早穿皮袄午穿纱&#xff0c;每天不知道穿啥... 再不冷都不好意思过圣诞了... 好…

XCTF:CatCatCat[WriteUP]

从题目中下载到一张图片和一个txt文件 编码的开头是&#xff1a;U2FsdGVkX1所以是rabbit加密 尝试使用密钥&#xff1a;91 密码不对&#xff0c;无法解密所以从图片下手 使用010Editor搜索图片文本内容 尝试搜索password、flag等敏感字体 直接拿到rabbit解密需要的密钥是&am…

软件测试|Python中如何控制输出小数点位数

简介 在数据处理、科学计算和金融分析等领域&#xff0c;经常需要对浮点数的输出进行格式化&#xff0c;以控制小数点后的位数。Python提供了多种方法来实现这个目标。在本文中&#xff0c;我们将深入探讨几种指定输出小数点位数的方法&#xff0c;帮助我们在不同场景下选择合…

大模型实战笔记04——XTuner 大模型单卡低成本微调实战

大模型实战笔记04——XTuner 大模型单卡低成本微调实战 1、Finetune简介 2、XTuner 3、8GB显存玩转LLM 4、动手实战环节 注&#xff1a; 笔记内容均为截图 课程视频地址&#xff1a;https://www.bilibili.com/video/BV1yK4y1B75J/?spm_id_from333.788&vd_source2882acf…

RT-Thread:STM32实时时钟 RTC开启及应用

说明&#xff1a;STM32F103/407系列基于 RT-Thread 系统的 RTC 开启及应用 应用流程介绍。 1. RTC功能开启 1.1 开启系统RTC驱动 1.2 打开系统RTC相关的宏 1.3 打开库函数 RTC 相关的宏 完成以上系统配置&#xff0c;编译无误情况下RTC 就已经开启了。 2. RTC 应用 官方 AP…

Java项目:117SpringBoot动漫论坛网站

博主主页&#xff1a;Java旅途 简介&#xff1a;分享计算机知识、学习路线、系统源码及教程 文末获取源码 117SpringBoot动漫论坛网站 一、项目介绍 动漫论坛网站是由SpringBootMybatis开发的&#xff0c;旅游网站分为前台和后台&#xff0c;前台为用户浏览&#xff0c;后台进…

关于java的稀疏数组

关于java的稀疏数组 我们在前面的文章中了解了冒泡排序和优化冒泡排序&#xff0c;在本篇文章中我们来介绍一下稀疏数组&#xff0c;我们学会了可以自己动手试一试&#x1f600; 稀疏数组 在介绍稀疏数组之前&#xff0c;我们先来了解一下五子棋。 我们这里有一个11 x 11的棋…

虚拟机Linux硬盘扩容

扩容前(20G)&#xff1a; 扩容后(60G)&#xff1a; 步骤&#xff1a; 1. 点击 虚拟机 -> 设置 -> 硬件 -> 硬盘(SCSI) -> 扩展(E)... -> 输入想要扩容大大小 -> 扩展(E) 2. 运行虚拟机&#xff0c;查看根目录属于那个文件系统&#xff0c;我的是 /dev/sda1…

Unity编辑器扩展(外挂)

每日一句:未来的样子藏在现在的努力里 目录 什么是编译器开发 C#特性[System.Serializable] 特殊目录 命名空间 /*检视器属性控制*/ //添加变量悬浮提示文字 //给数值设定范围&#xff08;最小0&#xff0c;最大150&#xff09; //指定输入框&#xff0c;拥有5行 //默认…

软件测试|使用Pytest、Allure Step和Allure Attach创建详细测试报告

引言 在软件开发过程中&#xff0c;测试是不可或缺的一部分。为了更好地展示测试结果并定位问题&#xff0c;结合Pytest测试框架和Allure测试报告工具可以创建清晰、详细的测试报告。本文将介绍如何使用Pytest、Allure的allure.step()和allure.attach()功能来创建具有丰富信息…