随身WIFI折腾日记(四)---拓展USB接口读取U盘内容

news/2024/11/19 5:35:02/

五、USB行为控制

随身WIFI对外交互的接口只有WIFI和USB接口。如果要想接入其他硬件设备,拓展USB接口至关重要,对于USB接口的控制,参考如下链接:

  • openstick项目官方教程:控制usb行为

  • HandsomeMod/gc: A Simple Tool To Control Usb Gadget (github.com)

USB OTG是USB协议规范中的一部分,它支持从设备和主设备之间的双向通信。所以说USB 接口有主从2个模式,刷完openstick系统,USB默认处于 Gadget(从)模式,openstick作者开发了一个gc工具管理USB的Gadget 模式。

5.1 Gadget 模式

USB Gadget支持模拟多种设备的复合设备。虚拟复合设备可以在一个USB插槽中模拟多个USB设备,并允许以不同功能的与USB主机进行通信。

image-20230521231917922

USB Gadget默认配置了2种设备,设备类型是ffs和rndis,名称分别为adb和rndis.1。adb可以让我们调试或烧录镜像, rndis.1让我们可以通过USB 与随身WIFI进行网络通讯。原作者开发的gc工具用法如下:

    # 列出当前usb活动的devicegc -l# 加入一个串口设备# 有效的关键字为 serial ffs hid midi printer uvc mass rndis ecm acmgc -a serial# 删除指定串口设备 (X 为列表中的对应的config名称)gc -r serial.X# 清除所有的gadgetgc -c# 关闭gadgetgc -d# 开启gadgetgc -e

USB 作为从设备的玩法我并没有深入太久,到此为止。

5.2 配置为主模式

如果想要真正把随身WIFI搞成一台电脑,肯定是要把USB配置为主模式。

OpenStick没有usb-id脚,只能手动将usb切换为主模式来插入u盘等设备,你可以将以下语句加入 /usr/sbin/mobian-usb-gadget setup()的最开头来实现开机切换所有usb device功能将会失效。意味着无法通过USB进行SSH连接,所以要保证随身WIFI可以连接外部网络,可以无线SSH访问。我个人采用的方案就是随身WIFI连接WIFI网络,将22端口反向代理到我的云服务器。通过我的云服务器ip地址(域名)SSH访问。

echo host > /sys/kernel/debug/usb/ci_hdrc.0/role   #gadget

除此之外,我们还需要在硬件上简单拓展一下:

image-20230521235212004

USB拓展坞需要买支持5V供电的,我在淘宝买的。如果动手能力较强,也可以选择使用Zy143L画的定制随身WIFI-USB拓展坞,已经开源。

5.3 插入U盘

  1. 插入U盘后,输入lsblk命令查看已有的块文件设备。可以看到刚插入的U盘的设备名称为sda,仅有一个分区sda1

image-20230521223412051

  1. 创建一个目录来挂载新分区。使用mkdir /mnt/data命令在/mnt目录下创建一个名为data的目录。

  2. 将新分区挂载到指定的目录中。使用如下命令将/dev/sda1分区挂载到/mnt/data目录:mount /dev/sda1 /mnt/data

  3. 使用df -Th命令将列出所有的挂载点以及文件系统的类型。可以看到我们刚刚挂载好的文件系统,文件系统的类型是ntfs

image-20230521224212953

  1. 为了使每次U盘插入的时候都可以自动挂载,我们需要修改配置文件。 nano /etc/fstab来编辑/etc/fstab文件。(也可以使用其他编辑器,如vi或vim)在文件的最后添加一个新的行,

    /dev/sda1 /mnt/data ntfs defaults 0 2
    

    解释一下这个示例行:

    • /dev/sda1是新设备文件的分区。
    • /mnt/data是之前创建的目录。
    • ntfs是文件系统类型(如果您使用其他文件系统,请相应更改此项)。
    • defaults是挂载选项。默认选项包含了一般的挂载参数,如果您需要其他参数,可以在此处添加。
    • 0是用于备份分区的标志,默认为0即可。
    • 2是“在开机时自动挂载”选项,将其设置为2。
  2. ls /mnt/data 就可以查看U盘的内容啦

    image-20230521230120362

5.4 USB主模式自启动脚本

开机启动时自动将USB接口切换为主模式是相对危险的,因为随身WIFI需要通过网络或者USB接口与外界通信。我刷的随身WIFI modem不可用,只可以通过WIFI连接网络。当遇到以下情形时,随身WIFI就砖了,就需要重新9008刷备份包了。(砖了一次)

  • USB为主模式、modem不可用、WIFI意外连接失败

所以通过其他方式触发USB切换到主模式会更安全一点,我想到了3个方式:

  • 手动启动:缺点是很麻烦

  • 按键启动:随身WIFI上有一个按键,但是我没有在sysfs找到按键的设备节点,无法访问

  • 网络状态变化时启动:当随身WIFI连接上网络时启动

个人认为第三个方式最合适。随身WIFI默认的网络管理工具NetworkManager,我们可以使用它来在 Linux 连接 WiFi 网络后自动执行特定的脚本。以下是具体步骤:

  1. /etc/NetworkManager/dispatcher.d/ 目录下创建脚本,命名为 USBctl.sh
#!/bin/sh
echo "wlan change with:" $1 $2
case "$2" inup)echo "WiFi Connected" # 绿灯亮echovim default-on > /sys/class/leds/green:internet/trigger# 切换为主模式echo host > /sys/kernel/debug/usb/ci_hdrc.0/role;;down)echo "WiFi Closed" # 绿灯灭echo none > /sys/class/leds/green:internet/trigger# 关闭主模式echo gadget > /sys/kernel/debug/usb/ci_hdrc.0/role;;
esac
  1. 修改文件执行权限。
chmod +x /etc/NetworkManager/dispatcher.d/USBctl.sh
  1. 编辑 NetworkManager 的配置文件 /etc/NetworkManager/NetworkManager.conf,在 [main] 段中添加以下内容,用于启用 dispatcher.d 目录中的脚本。
[main]
dispatcher=dispatcher.d
  1. 重新启动 NetworkManager 服务。
systemctl  restart NetworkManager 
# systemctl status NetworkManager-dispatcher.service  # 打印日志用于调试

现在,当随身WIFI连接 WiFi 网络时,脚本 /etc/NetworkManager/dispatcher.d/ifup-post-wifi.sh 中的命令将自动执行。即绿灯亮起,USB设置为主模式。

NetworkManager-dispatcher(8) — Arch manual pages (archlinux.org)

用 NM-dispatcher 实现 WiFi 开关的自动控制 - sbw Blog


http://www.ppmy.cn/news/75747.html

相关文章

tps和qps的区别是什么?怎么理解

区别:QPS指的是“每秒查询率”;而TPS指的是“事务数/秒”。理解:Tps即每秒处理事务数,对于一个页面的一次访问,形成一个Tps;而一次页面请求,可能产生多次对服务器的请求,服务器对这些…

【TES714】JFM7K325T(复旦微FPGA)+HI3531DV200(华为海思)的综合视频处理平台设计原理图及调试经验

板卡概述 TES714是自主研制的一款5路HD-SDI视频采集图像处理平台,该平台采用上海复旦微的高性能Kintex系列FPGA加上华为海思的高性能视频处理器HI3531DV200来实现。 华为海思的HI3531DV200是一款集成了ARM A53四核处理器性能强大的神经网络引擎,支持多种…

逻辑备份和还原

逻辑备份和还原 什么物理备份和还原 (1)逻辑备份是对整个数据库或数据库中的部分对象利用逻辑备份工具导出数据到备份文件 (2)在需要的数据库恢复的情况下利用逻辑备份还原工具吧备份文件恢复到数据库中 使用场景主要用于数据…

04 Android开机启动之Zygote

Android开机启动之Zygote 一、认识Zygote进程 Zygote中文翻译为“受精卵”,正如其名,它主要用于孵化子进程。在Android系统中有以下两种程序: java应用程序,主要基于ART虚拟机,所有的应用程序apk都属于这类 native程序,也就是利用C或C++语言开发的程序,如bootanimatio…

老司机解读香农定理、奈奎斯特定理、编码与调制

工程师都会考虑一个问题:信道上到底可以传输多大的数据,或者指定的信道上的极限传输率是多少。这就是信道容量的问题。例如,在xDSL系统中,我们使用的传输介质是仅有几兆带宽的电话线,而上面要传送几兆、十几兆甚至几十…

信号完整性分析基础知识之传输线和反射(七):带负载传输线、感性不连续引起的反射

带负载传输线 如果在传输线上有一个小的容性负载,信号会出现失真,上升时间也会降低。每个分立电容都会降低信号在其附近看到的阻抗。如果传输线上分布有多个容性负载(例如一个总线上每隔1.2inch有一个2pF的连接器残桩,或者一个内…

04-jQuery-选择器

一、基本选择器 1、标签选择器(元素选择器) 元素选择器可以选取HTML文档中所有匹配的元素。例如,如果要选取所有段落元素(p) $("p") //这将返回页面中所有的段落元素。 2、id选择器 id选择器根据元素的…

作为IT行业过来人,我有4个重要建议给年轻程序员!

见字如面,我是军哥! 作为一名 40 岁的 IT 老兵,我在年轻时踩了不少坑,至少有两打,我总结了其中最重要的 4 个并一次性分享给你,文章不长,你一定要看完哈~ 1、重视基础还不够&#xf…