Post

随身WiFi的USB模拟

随身WiFi的USB模拟 墓前由于内核限制,暂时搁置 USB模拟 当前随身WiFi插上Windows后默认Linux作为从设备,Windows作为主设备 判断USB模拟方法 通过问ai敲命令,得知他的USB是基于ConfigFS,而不是传统的Gadget内核模块,这就有很强的拓展性 (说人话,可玩性

随身WiFi 阅读 11 点赞 0 评论 0

随身WiFi的USB模拟

墓前由于内核限制,暂时搁置

USB模拟

当前随身WiFi插上Windows后默认Linux作为从设备,Windows作为主设备

判断USB模拟方法

通过问ai敲命令,得知他的USB是基于ConfigFS,而不是传统的Gadget内核模块,这就有很强的拓展性 (说人话,可玩性)
命令及输出如下

root@4G-wifi ~# lsmod | grep g_
rpmsg_wwan_ctrl        12288  0
nf_defrag_ipv6         24576  1 nf_conntrack
nf_defrag_ipv4         12288  1 nf_conntrack
rng_core               20480  1 qcom_rng
root@4G-wifi ~# ls /sys/kernel/config/usb_gadget/g1/functions/
ffs.adb/  rndis.rndis.1/
root@4G-wifi ~# cat /sys/kernel/config/usb_gadget/g1/strings/0x409/product
HandsomeMod Device
root@4G-wifi ~#

可知当前Debian模拟的是一个RNDIS(虚拟网卡)+ADB(调试接口)

判断是否生效

判断当前是否生效需执行cat /sys/kernel/config/usb_gadget/g1/UDC 如有输出则说明模拟已生效,若无输出说明未激活,USB模拟未生效,需执行以下命令

# 先查看可用控制器
ls /sys/class/udc/
# 将输出的控制器名称写入
echo $(ls /sys/class/udc/) > /sys/kernel/config/usb_gadget/g1/UDC

修改USB模拟功能

先形成下图简易概念

创建功能
添加functions/文件夹
启用功能
链接到configs/c.1/下
激活功能
写入UDC

==修改USB模拟功能前必须先停用UDC,修改完后才能启用==(至少在启用/删除功能,即ln -s 到configs/c.1时需要停用)

# 停用UDC
echo "" > /sys/kernel/config/usb_gadget/g1/UDC
# 启用UDC
echo $(ls /sys/class/udc/ | head -1) > /sys/kernel/config/usb_gadget/g1/UDC

添加U盘功能

==需要注意文件系统、分区权限问题==

  • 创建img镜像文件并挂载
    1. 停用UDC
      echo "" > /sys/kernel/config/usb_gadget/g1/UDC
    2. 创建功能链接
      mkdir /sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0
    3. 创建img文件(以100M为例)
      • 固定大小
        dd if=/dev/zero of=/path/to/your.img bs=1M count=100
      • 稀疏镜像
        • truncate创建
          truncate -s 100M /path/to/your.img
        • dd跳写法
          dd if=/dev/zero of=/path/to/your.img bs=1M seek=100 count=0
    4. 格式化(这一步可以跳过后在Windows上完成)
      • 格式化命令格式为mkfs.<文件系统名> <img、待分区设备>
      • 格式化为FAT32格式mkfs.vfat /path/to/your.img
      • 格式化为ext4格式mkfs.ext4 /path/to/your.img
      • 格式化为ntfs格式mkfs.ntfs /path/to/your.img
    5. 把img文件路径写入lun(逻辑单元)(即指向img文件)
      echo /path/to/your.img > /sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0/lun.0/file
    6. 设置Windows下读写权限(0为可读写,1为只读)
      echo 0 >/sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0/lun.0/ro
    7. 在Linux上挂载img文件(可选,便于直接访问文件)
      mount -o loop /path/to/your.img /path
    8. 链接到现有配置
      ln -s /sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0 /sys/kernel/config/usb_gadget/g1/configs/c.1/
      这一步目录可能不是c.1,根据实际情况更正
    9. 重新启用UDC
      echo $(ls /sys/class/udc/ | head -1) > /sys/kernel/config/usb_gadget/g1/UDC
  • 直接挂载某个分区
    1. 前期和创建img的一二步一致
    2. 通过lsblk命令获取欲挂载的块设备分区文件名称
    3. 将块设备指向分区
      echo /dev/path >/sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0/lun.0/file
    4. 设置读写权限
      echo 0 >/sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0/lun.0/ro
    5. 后期同创建img的八九步

继续阅读

全部归档

评论