开发板如何手动实现无线网卡和U盘热插拔

开发板如何手动实现无线网卡/U盘热插拔

前言

之前写了一篇怎么在随身WIFI 410 debian上加载几个无线网卡的驱动教程和编译文件分享,最后提了一嘴加载完后可以设置开机自启动,这篇来具体展开讲讲怎么做。同理可应用于linux其他开发板。

系统为debian11,内核为5.15。

准备工具

  • systemed
  • udev

这个基本上绝大部分linux系统都会预装好的,所以不用担心,没有装的话自行搜索怎么安装。

基本流程是:udev来调用systemd服务,因为udev可以实时监测usb的状态,所以可以实现热插拔。

创建systemd服务

  1. /etc/systemd/system/ 目录下创建服务文件,以my_custom_service命名(可以自己改):
sudo nano /etc/systemd/system/my_custom_service.service
  1. 编辑该文件,添加下面内容(这里以无线网卡驱动为例):
[Unit]
Description=Switch RTL8811CU Device to Networking Mode at Boot
After=set_usb_host_mode.service  # 确保在设置开发板为主机模式之后执行
Requires=set_usb_host_mode.service  # 确保先执行set_usb_host_mode

[Service]
Type=oneshot
ExecStartPre=/bin/sleep 5s
ExecStart=/usr/sbin/usb_modeswitch -KW -v 0bda -p c811
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

这里第9行的-v参数和-p参数要修改为之前那篇文章中提到的厂商id和设备id。

另外,上面的第3和第4行是执行条件,因为我自己另外新建了一个service来确保设备开机就切换为主机模式,也就是set_usb_host_mode.service这个服务,它的具体内容如下(如果有rc-local的话直接在里面添加切换主机模式的命令也是差不多效果的):

[Unit]
Description=Set USB to Host Mode at Boot
After=local-fs.target

[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo host > /sys/kernel/debug/usb/ci_hdrc.0/role'
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

创建udev规则

  1. 创建 udev 规则文件:
sudo nano /etc/udev/rules.d/99-my_custom_rule.rules
  1. 编辑规则文件,根据你的硬件设备属性来编写规则。这里以我们的网卡设备为例:
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="0bda", ATTR{idProduct}=="c811", RUN+="sudo systemctl restart my_custom_service.service"

这里最后restart后面要跟你自己上面定义的服务的名字。

保存并重启systemd和udev

sudo systemctl daemon-reload
sudo udevadm control --reload
sudo systemctl restart systemd-udevd

然后就可以随意热插拔了,U盘挂载是同理的,不过是需要指定一个挂载目录什么的,这里不具体展开了。

附图为自动挂载后就可以通过ifconfig查看到网口。

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值