ln -s /config/usb_gadget/g1/functions/ffs.adb /config/usb_gadget/g1/configs/b.1/f2 为什么需要挂 不挂不行吗?挂到底是
ln -s /config/usb_gadget/g1/functions/ffs.adb /config/usb_gadget/g1/configs/b.1/f2 为什么需要挂 不挂不行吗?挂到底是挂什么? 为什么需要config/usb_gadget/g1/UDC echo “11201000.usb0”
这三个问题问到了 Linux 内核 USB 驱动设计最优雅的地方!
用“组装一台智能汽车”的大白话,为你一次性讲透:
1. 为什么需要挂ffs.adb?挂到底是挂什么?
functions/ffs.adb到底是什么?
它是存放放在仓库里的“ADB 调试功能模块(乐高积木/汽车零部件)”。- “挂”(
ln -s软链接)到底是在干嘛?configs/b.1/是我们要发给电脑的“发货清单(汽车底盘)”。
执行ln -s .../ffs.adb .../configs/b.1/f2,本质上就是:把仓库里的“ADB 零件”,安装到发货清单的“2 号插槽(f2)”上!
2. 不挂行不行?
完全行!但这取决于你要什么功能:
- 如果你只想要串口(纯 设备 通讯):
你完全可以不挂ffs.adb!只挂acm.gs2到f1即可。此时子 设备 在电脑眼里就是一台纯串口设备。 - 如果你既要串口,又要 ADB 调试(组合模式):
你就必须挂ffs.adb!如果你不挂,电脑连接 USB 后,就只会看到串口,完全找不到 ADB!
3. 为什么需要echo "11201000.usb0" > UDC?
这一步是最最关键的“合上总电源开关”动作!
- 之前的
ln -s组装在干嘛?
之前所有的ln -s软链接,都仅仅是在 Linux 内存里画蓝图、组装软件。此时物理 USB 数据线上依然是0伏特(死电平),电脑对这一切一无所知。 11201000.usb0是什么?
它是子 设备 主板上那块联发科 USB 硬件网卡芯片(控制器)的真实物理名字。- 写向
UDC代表什么?echo "11201000.usb0" > UDC相当于你拧动了汽车钥匙,合上了总电源开关!
内核收到命令,会瞬间把你在内存里画好的蓝图(f1串口 +f2ADB),正式刷进这块11201000.usb0硬件芯片里!芯片随即给物理 USB 线通电(拉高到 3.3V),电脑这才轰的一声识别到了设备!
📊 总结图解
1. functions/ (零部件仓库) ──(含有 acm.gs2 串口, ffs.adb 调试器) │ │ 用 ln -s 软链接(拼装到插槽 f1, f2) ▼ 2. configs/b.1/ (汽车发货清单) ──(组装出了一个“串口+ADB”复合设备) │ │ 写向 UDC (拧动钥匙,给硬件通电) ▼ 3. 11201000.usb0 (物理芯片) ──(物理线上升到 3.3V,电脑/母 设备 正式识别!)