openwrt USB热插拔(hotplug)

目录

前言

一、hotplug相关子目录

block 文件夹脚本中的变量

二、相关内核勾选

三、脚本示例

总结



前言

openwrt USB外挂U盘的时候很需要热插拔功能(内核版本21.02内测版本)

openwrt官网传送门

当某些事件发生时,Procd(init系统和进程管理守护进程)执行位于/etc/hotplug.d/中的脚本,例如当接口启动或关闭时,检测到新的存储驱动器时,或者按下按钮时.

当使用PPPoE连接或者在不稳定的网络中,或使用硬件按钮时非常有用。

该功能模块模拟/扩展了长期未用的Hotplug2程序包所执行的操作。


提示:以下是本篇文章正文内容,下面案例可供参考

一、hotplug相关子目录

在 /etc/hotplug.d 文件夹你可以发现 block ifacenet 和 ntp 等文件夹.

触发事件触发后,Procd将按字母顺序执行该触发器子文件夹中的所有脚本。 这就是为什么那里的大多数脚本都使用数字前缀。

  • block 文件夹用于块设备事件(块设备已连接/已断开连接)

  • iface 文件夹用于接口事件(当LAN或WAN等接口连接/断开时)

  • net 文件夹用于:(可能与网络相关)

  • ntp 文件夹用于时间同步事件(Time step,时间服务器层变化)

  • button 文件夹用于按钮事件 (缺省不创建, 由 /etc/rc.button 代替)

  • usb 文件夹用于类似3g-modem和tty*的USB设备

对于其他类型的触发器,可能(应该)是其他的。通过查看源码 in git 他们可以是按钮, 声音设备, 串口和USB串口加密狗。

block 文件夹脚本中的变量

对于 block文件夹中的脚本,他们是这些(相关的)环境变量

变量名描述
ACTION“add” 或 “remove”
DEVICENAME与下面的DEVNAME相同
DEVNAME设备或分区名称(如果连接驱动器,你会得到一个使用“sda”的热插拔调用,另一个使用“sda1”进行热插拔调用)
DEVPATH完整的设备路径(如 “/devices/pci0000:00/0000:00:0b.0/usb1/1-1/1-1:1.0/host7/target7:0:0/7:0:0:0/block/sdc/sdc1 “)
DEVTYPEDEVNAME和DEVICENAME的名称是什么类型,当插入具有可读分区的设备时,该值为“partition”,当移除该设备时,该值为“disk”。
MAJOR主设备号
MINOR次要设备号
SEQNUM序号(一个数字)
SUBSYSTEM固定值 “block”

二、相关内核勾选

添加USB相关支持

Kernel modules —> USB Support —> <*> kmod-usb-core. ##默认已经选了
Kernel modules —> USB Support —> <*> kmod-usb-ohci. ##默认已选 old usb1.0
Kernel modules —> USB Support —> <*> kmod-usb-uhci. ## usb2.0
Kernel modules —> USB Support —> <*> kmod-usb-storage.

 OHCI、UHCI都是USB1.1的接口标准,而EHCI是对应USB2.0的接口标准,最新的xHCI是USB3.0的接口标准。

1.OHCI(Open Host Controller Interface)是支持USB1.1的标准,但它不仅仅是针对USB,还支持其他的一些接口,比如它还支持Apple的火线(Firewire,IEEE 1394)接口。与UHCI相比,OHCI的硬件复杂,硬件做的事情更多,所以实现对应的软件驱动的任务,就相对较简单。主要用于非x86的USB,如扩展卡、嵌入式开发板的USB主控。
2.UHCI(Universal Host Controller Interface),是Intel主导的对USB1.0、1.1的接口标准,与OHCI不兼容。UHCI的软件驱动的任务重,需要做得比较复杂,但可以使用较便宜、较简单的硬件的USB控制器。Intel和VIA使用UHCI,而其余的硬件提供商使用OHCI。
3.EHCI(Enhanced Host Controller Interface),是Intel主导的USB2.0的接口标准。EHCI仅提供USB2.0的高速功能,而依靠UHCI或OHCI来提供对全速(full-speed)或低速(low-speed)设备的支持。
4.xHCI(eXtensible Host Controller Interface),是最新最火的USB3.0的接口标准,它在速度、节能、虚拟化等方面都比前面3中有了较大的提高。xHCI支持所有种类速度的USB设备(USB 3.0 SuperSpeed, USB 2.0 Low-, Full-, and High-speed, USB 1.1 Low- and Full-speed)。xHCI的目的是为了替换前面3中(UHCI/OHCI/EHCI)。

添加文件系统支持

这里我只勾选了VFAT格式

Kernel modules —> Filesystems —> < > kmod-fs-ext4 (移动硬盘EXT4格式选择)
Kernel modules —> Filesystems —> <*> kmod-fs-vfat(FAT16 / FAT32 格式 选择)
Kernel modules —> Filesystems —> < > kmod-fs-ntfs (NTFS 格式 选择)

添加USB挂载

注意:如果不勾选,etc/hotplug.d/block 会不存在

Base system —> <*>block-mount

三、脚本示例

源码添加位置:penwrt/target/linux/ramips/base-files/etc/hotplug.d/block (package/base-files/files/etc/hotplug.d/block/)

如果没有hotplug.d/block 自己新建就可以,脚本放到block/下

脚本的名称为:20-udisk-mount

关于linux下 dev/sda    dev/sda1  ..........   dev/sdb  说明

意义如下:

  • 第一个软驱 /dev/fd0.

  • 第二个软驱 /dev/fd1.

  • 第一块硬盘 /dev/sda.

  • 第二块硬盘 /dev/sdb, 以此类推.

  • 第一个SCSI CD-ROM /dev/scd0, 可以用/dev/sr0.

sda1, sda2是sda这块硬盘上的两个分区。

如果没有分区比如dev/sda1 直接挂载 dev/sda 即可

脚本如下(示例):

#!/bin/ash
udisk_folder=/mnt/udisk

case "$ACTION" in
    add)
	    for i in $(ls /dev/ | grep 'sd[a-z][1-9]')
	    do
	        mkdir  $udisk_folder
	        chmod 777 $udisk_folder
	        mount -t vfat /dev/$i $udisk_folder
	        done
	    ;;
	remove)
		     umount $udisk_folder
	      ;;
esac

总结

总结了openwrt官网热插拔的相关资料和自动挂载脚本

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值