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