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

news2025/1/13 2:43:50

五、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活动的device
    gc -l
    # 加入一个串口设备
    # 有效的关键字为 serial ffs hid midi printer uvc mass rndis ecm acm
    gc -a serial
    # 删除指定串口设备 (X 为列表中的对应的config名称)
    gc -r serial.X
    # 清除所有的gadget
    gc -c
    # 关闭gadget
    gc -d
    # 开启gadget
    gc -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" in
	up)
		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.coloradmin.cn/o/560799.html

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

相关文章

Opencv C++图像处理:点多边形测试 + 矩 + 凸包 + 映射 + 反向投影

文章目录 1、点多边形测试1.1、计算像素点是在轮廓内部、外部或边界上:cv::pointPolygonTest()1.2、计算最小值和最大值及其位置:cv::minMaxLoc()1.3、实战案例 2、矩2.1、计算多边形或光栅化形状的三阶以下的所有力矩:cv::moments()2.2、计算…

Regularization

在图像中的特征处理: 平均亮度的去除 SVD Whiten PCA 参数初始化策略 数据归一化: 标准归一化缩放归一化PCA/SVD 数据归一化对梯度的影响 归一化后,可以更快的搜索到最优值点 正则化 数据增强与早停 图像数据的增强主要是通过算法…

测试新手如何去学习接口自动化测试 ?从这一套测试框架开始 。

接口自动化测试框架系列之整体介绍 1.接口自动化测试1.自动化框架概述2.搭建自动化测试框架3.测试框架中所使用到的技术 1.接口自动化测试 自动化测试虽然是测试中比较热的一门技术 ,但凡一个测试岗位,你几乎都能看到有自动化测试的要求 。但不得不说&a…

关于深度学习方面的一些概念

1、自学习(self-taught learning)与半监督学习   自学习(self-taughtlearning)是不要求未标注数据 X u X_u Xu​和已标注数据 X l X_l Xl​来自同样的分布。另外一种带限制性的方式也被称为半监督学习,它要求 X u X_u Xu​和 X l X_l Xl​服…

[快速入门前端17] CSS 选择器(6) 选择器总结

基本选择器 选择器说明语法通配符作用范围为所有标签,用于页面整体样式* { color: red }元素作用于同种标签,不能进行差异化样式设定p { color: red }类别作用于我们自行设定的类别,是使用频率最高的选择器.myClass { color: red }ID选取当前…

15JS06——流程控制-循环

目标: 1、循环 2、for循环 3、双重for循环 4、while循环 5、do while循环 6、continue break 7、命名规范以及语法格式 一、循环 1、循环的目的 可以重复执行某些代码 2、JS中的循环 for循环 while循环 do…while循环 二、for循环 在程序中,一…

机器学习 - 决策树

决策树是一种流程图,可以帮助我们根据以前的经验进行决策 比如,一个人将尝试决定他/她是否应该参加喜剧节目 下面是要用到的数据集 AgeExperienceRankNationalityGo36109UKNO42124USANO2346NNO5244USANO43218USAYES 读取并打印数据集 import pandas…

Transformer、Bert、Gpt对比系列,超详细介绍transformer的原理,bert和gpt的区别

一、Transformer架构图 Transformer 是一种用于序列到序列学习的神经网络模型,主要用于自然语言处理任务,如机器翻译、文本摘要等。它在2017年由 Google 提出,采用了注意力机制来对输入序列进行编码和解码。 Transformer 模型由编码器和解码…

随身WIFI折腾日记(五)---远程视频监控

六、远程视频监控 为了实现基于随身WIFI的网络摄像头,我参考了如下视频课程: 韦东山老师手把手带你从0开始自己做一个视频监控项目 系统由三部分组成:推流端(随身WIFI)、流媒体服务器(云服务器)、拉流端(浏览器/VLC播放器) 方案&#xff1…

NetworkInterface类

文章目录 1. 简介2. 工厂方法3. 获取方法 1. 简介 NetworkInterface类表示一个本地IP地址。这可以是一个物理接口,如额外的以太网卡(常见于防火墙和路由器),也可以是一个虚拟接口,与机器的其它IP地址绑定到同个物理硬…

ensp实践dhcp服务

ensp实践dhcp服务 1、dhcp接口分配模式2、dhcp接口地址池分配模式3、dhcp布拉布拉布拉 1、dhcp接口分配模式 1.1、路由器AR1配置dhcp动态获取 <Huawei>system-view [Huawei]interface g0/0/0 [Huawei-GigabitEthernet0/0/0]ip address 10.1.1.1 24 [Huawei-GigabitEthe…

PixiJS 源码解读:绘制矩形,底层都做了什么?

大家好&#xff0c;我是前端西瓜哥&#xff0c;今天带大家看一下 PixiJS 的源码实现。 PixiJS 是一个非常流行的 Canvas 库&#xff0c;start 数将近 4w。 使用 PixiJS 简单易用的 API&#xff0c;我们可以在浏览器页面的 Canvas 元素上高性能地绘制图形&#xff0c;实现流畅…

基于深度学习的交通标志检测和识别(从原理到环境配置/代码运行)

项目是一个基于Python和OpenCV的交通标志检测和识别项目,旨在使用计算机视觉和深度学习技术对交通标志进行检测和分类。本文将从介绍项目原理和框架开始,详细介绍该项目的实现过程和技术细节,最后给出项目的安装和使用方法。 前后结果对比 识别前 识别后 一、 项目原理和框…

随身WIFI折腾日记(一)---霓虹灯

引言 通过对高通410芯片的随身WIFI刷写Debain系统&#xff0c;我们已经拥有了一台带4G功能的迷你ARM64单板电脑。现在我们可以基于此此平台进行一下二次开发。 随身WIFI的优势就是价格低廉&#xff0c;性能和树莓派zero2、树莓派3b差不多。 硬件配置如下&#xff1a; msm89…

随身WIFI折腾日记(二)---文件传输和软件安装

二、文件传输 我们可以通过SCP和SFTP工具和随身WIFI(USB连接)进行数据传输&#xff0c;上图以scp工具为例。 将本地电脑文件传输至随身WIFI&#xff0c;本地电脑上输入如下指令即可&#xff1a; scp /path/to/local/file user192.168.68.1:/path/to/remote/directory/注意&…

RK3568平台开发系列讲解(驱动基础篇)10min带你获取、了解与编译Kernel源代码

🚀返回专栏总目录 文章目录 一、Kernel获取二、Kernel根目录2.1 Documentation/2.1 arch/2.2 block/2.3 boot.its2.4 drivers/2.5 firmware/2.6 fs/2.7 include/2.8 init/2.9 ipc/2.10 kernel/2.11 lib/2.12 lo

(转载)从0开始学matlab(第13天)—画图进阶

我们将讨论简单的二维图象(之前已有所介绍)的附加特性。这些特性将允许我们控制 x&#xff0c;y 轴上的值的范围&#xff0c;在一个坐标系内打印多个图象&#xff0c;或创建多个图&#xff0c;或在一个图象窗口内创建多个子图像&#xff0c;或提供更加强大的轨迹文本字符控制。…

【c语言】全部知识点总结

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 给大家跳段街舞感谢支持&#xff01;ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ …

前端如何做单元测试? 看这篇就入门了

前言 对于现在的前端工程&#xff0c;一个标准完整的项目&#xff0c;通常情况单元测试是非常必要的。但很多时候我们只是完成了项目而忽略了项目测试。我认为其中一个很大的原因是很多人对单元测试认知不够&#xff0c;因此我写了这边文章&#xff0c;一方面期望通过这篇文章…

基于DDSRF正负序分离方法的不平衡电网PQ控制策略_平衡电流控制

0.前言 对于并网逆变器而言&#xff0c;电网会存在不平衡的情况。在这种情况下&#xff0c;不平衡的电网电压可以分解成为正序、负序和零序分量。并网逆变器通常期望能够实现单位功率因数并网&#xff0c;向电网注入对称的正弦电流&#xff0c;所以此时的微电网逆变器控制策略显…