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.hqwc.cn/news/341009.html

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

相关文章

Backtrader 文档学习-Strategy with Signals

Backtrader 文档学习-Strategy with Signals backtrader可以不通过重写策略的方式触发交易,尽管重写策略是首选通用的方式。 下面介绍通过使用信号也是可以实现交易触发的。 1.定义signal import backtrader as btdata bt.feeds.OneOfTheFeeds(datanamemydatana…

关于报错 curl: (56) Recv failure: Connection reset by peer

curl ip没问题 curl localhost 则报错 curl: (56) Recv failure: Connection reset by peer 出现这个报错有很多原因, 其中之一就是terminal代理 而关闭代理应用之后, 其实由于配置的终端都是 export指定的代理 所以导致还是一直报错. 通过 curl -v 可以发现 指向了代理ip和…

【HarmonyOS4.0】第八篇-ArkUI系统组件(三)

【HarmonyOS4.0】第七篇-ArkUI系统组件(三) 七、二维码组件 二维码的使用场景,比如扫码添加好友,扫码骑车,扫码支付等等,ArkUI开发框架提供了 RQCode 组件生成一个二维码。 接口: QRCode(value: string)参数: 参数…

一起来了解综合能源服务认证

首先,综合能源服务认证是有国家政策支持的, 《能源生产和消费革命战略(2016-2030)》中指出:1、能源生产端要以绿色低碳为方向,推动能源集中式和分布式开发并举,大幅提高新能源和可再生能源比重&#xff1b…

【昕宝爸爸小模块】ConcurrentHashMap为什么不允许null值

ConcurrentHashMap为什么不允许null值 一、✅典型解析二、✅要实现一个HashMap怎么做2.1 ✅需要考虑以下几个方面2.2 ✅基于数组和链表的HashMap实现Demo2.3 ✅扩容后如何解决链表长度过长的问题 三、✅拓展知识仓3.1 ✅在多线程环境下如何保证数据的正确性和性能3.2 ✅那如何在…

第3章:python的判断语句

学一门语言,无外乎多敲,多用,记得回顾昨天写过的代码呀 布尔类型和比较运算符 布尔类型的定义 使用比较运算符进行比较运算得到布尔类型的结果 比较运算符 """ 演示布尔类型的定义 以及比较运算符的应用 ​ """…

功能消费迈向精智生活,绿联如何撬动3C数码新增量?

根据行业生命周期理论,当前国产移动数码周边市场俨然已迈入成熟期,相关企业也完成一轮腾飞,正在为新的发展蓄能。 其中,绿联的发展历程可以说是行业进化升级的缩影。产品层面,已完成从“数据线厂商”到专业数码科技公…

nextjs + ahooks 报错 Cannot use import statement outside a module

在 nextjs 中使用 ahooks 时,报错 SyntaxError: Cannot use import statement outside a module,如下图所示: 解决方案 transpilePackages 官网介绍 Next.js can automatically transpile and bundle dependencies from local packages (lik…

Python的安装与卸载【Windows系统】

在 Windows 上安装与卸载 Python Python的安装 下载Python 安装Python 下载完后打开安装包 注意最底下的"Add Python 3.8 to Path"(将Python加入环境变量)一定要勾选!!!这样就可以免去之后环境配置的烦恼…

用win系统搭建Minecraft世界服务器,MC开服教程,小白开服教程

雨云VPS用Windows系统搭建我的世界世界服务器,Minecraft开服教程,小白开服教程,MC 1.19.4版本服务器搭建教程。 此教程使用 Mohist 1.19.4 服务端,此服务端支持Forge模组和Bukkit/Spigot/Paper插件,如果需要开其他服务…

有经常要寄快递的友友吗?那到底有没有更便利的寄快递的方法?

有经常要寄快递的友友吗?那到底有没有更便利的寄快递的方法? 我们大家都知道快递行业的发展是非常迅猛的,这是人们的需求所促生出来的一个行业。现在的快递公司也非常的多,每个快递公司都是有很多的快递员的,在我们需要寄快递的…

北斗卫星助力智慧公园实现智能化管理

北斗卫星助力智慧公园实现智能化管理 智慧公园是以信息技术为核心,以人工智能为驱动,运用物联网技术对公园进行智能化管理和服务的创新模式。而北斗卫星系统的应用,为智慧公园提供了更强大的支持和保障。下面我们来详细了解一下北斗卫星在智…