外貿(mào)網(wǎng)站建設(shè)公司渠道安卓系統(tǒng)優(yōu)化軟件
五、USB行為控制
隨身WIFI對外交互的接口只有WIFI和USB接口。如果要想接入其他硬件設(shè)備,拓展USB接口至關(guān)重要,對于USB接口的控制,參考如下鏈接:
-
openstick項目官方教程:控制usb行為
-
HandsomeMod/gc: A Simple Tool To Control Usb Gadget (github.com)
USB OTG是USB協(xié)議規(guī)范中的一部分,它支持從設(shè)備和主設(shè)備之間的雙向通信。所以說USB 接口有主從2個模式,刷完openstick系統(tǒng),USB默認處于 Gadget(從)模式,openstick作者開發(fā)了一個gc工具管理USB的Gadget 模式。
5.1 Gadget 模式
USB Gadget支持模擬多種設(shè)備的復合設(shè)備。虛擬復合設(shè)備可以在一個USB插槽中模擬多個USB設(shè)備,并允許以不同功能的與USB主機進行通信。
USB Gadget默認配置了2種設(shè)備,設(shè)備類型是ffs和rndis,名稱分別為adb和rndis.1。adb可以讓我們調(diào)試或燒錄鏡像, rndis.1讓我們可以通過USB 與隨身WIFI進行網(wǎng)絡(luò)通訊。原作者開發(fā)的gc工具用法如下:
# 列出當前usb活動的devicegc -l# 加入一個串口設(shè)備# 有效的關(guān)鍵字為 serial ffs hid midi printer uvc mass rndis ecm acmgc -a serial# 刪除指定串口設(shè)備 (X 為列表中的對應(yīng)的config名稱)gc -r serial.X# 清除所有的gadgetgc -c# 關(guān)閉gadgetgc -d# 開啟gadgetgc -e
USB 作為從設(shè)備的玩法我并沒有深入太久,到此為止。
5.2 配置為主模式
如果想要真正把隨身WIFI搞成一臺電腦,肯定是要把USB配置為主模式。
OpenStick沒有usb-id腳,只能手動將usb切換為主模式來插入u盤等設(shè)備,你可以將以下語句加入 /usr/sbin/mobian-usb-gadget setup()的最開頭來實現(xiàn)開機切換,所有usb device功能將會失效。意味著無法通過USB進行SSH連接,所以要保證隨身WIFI可以連接外部網(wǎng)絡(luò),可以無線SSH訪問。我個人采用的方案就是隨身WIFI連接WIFI網(wǎng)絡(luò),將22端口反向代理到我的云服務(wù)器。通過我的云服務(wù)器ip地址(域名)SSH訪問。
echo host > /sys/kernel/debug/usb/ci_hdrc.0/role #gadget
除此之外,我們還需要在硬件上簡單拓展一下:
USB拓展塢需要買支持5V供電的,我在淘寶買的。如果動手能力較強,也可以選擇使用Zy143L畫的定制隨身WIFI-USB拓展塢,已經(jīng)開源。
5.3 插入U盤
- 插入U盤后,輸入
lsblk
命令查看已有的塊文件設(shè)備。可以看到剛插入的U盤的設(shè)備名稱為sda,僅有一個分區(qū)sda1。
-
創(chuàng)建一個目錄來掛載新分區(qū)。使用
mkdir /mnt/data
命令在/mnt目錄下創(chuàng)建一個名為data的目錄。 -
將新分區(qū)掛載到指定的目錄中。使用如下命令將/dev/sda1分區(qū)掛載到/mnt/data目錄:
mount /dev/sda1 /mnt/data
-
使用
df -Th
命令將列出所有的掛載點以及文件系統(tǒng)的類型??梢钥吹轿覀儎倓倰燧d好的文件系統(tǒng),文件系統(tǒng)的類型是ntfs。
-
為了使每次U盤插入的時候都可以自動掛載,我們需要修改配置文件。
nano /etc/fstab
來編輯/etc/fstab
文件。(也可以使用其他編輯器,如vi或vim)在文件的最后添加一個新的行,/dev/sda1 /mnt/data ntfs defaults 0 2
解釋一下這個示例行:
/dev/sda1
是新設(shè)備文件的分區(qū)。/mnt/data
是之前創(chuàng)建的目錄。ntfs
是文件系統(tǒng)類型(如果您使用其他文件系統(tǒng),請相應(yīng)更改此項)。defaults
是掛載選項。默認選項包含了一般的掛載參數(shù),如果您需要其他參數(shù),可以在此處添加。0
是用于備份分區(qū)的標志,默認為0即可。2
是“在開機時自動掛載”選項,將其設(shè)置為2。
-
ls /mnt/data
就可以查看U盤的內(nèi)容啦
5.4 USB主模式自啟動腳本
開機啟動時自動將USB接口切換為主模式是相對危險的,因為隨身WIFI需要通過網(wǎng)絡(luò)或者USB接口與外界通信。我刷的隨身WIFI modem不可用,只可以通過WIFI連接網(wǎng)絡(luò)。當遇到以下情形時,隨身WIFI就磚了,就需要重新9008刷備份包了。(磚了一次)
- USB為主模式、modem不可用、WIFI意外連接失敗
所以通過其他方式觸發(fā)USB切換到主模式會更安全一點,我想到了3個方式:
-
手動啟動:缺點是很麻煩
-
按鍵啟動:隨身WIFI上有一個按鍵,但是我沒有在sysfs找到按鍵的設(shè)備節(jié)點,無法訪問
-
網(wǎng)絡(luò)狀態(tài)變化時啟動:當隨身WIFI連接上網(wǎng)絡(luò)時啟動
個人認為第三個方式最合適。隨身WIFI默認的網(wǎng)絡(luò)管理工具NetworkManager,我們可以使用它來在 Linux 連接 WiFi 網(wǎng)絡(luò)后自動執(zhí)行特定的腳本。以下是具體步驟:
- 在
/etc/NetworkManager/dispatcher.d/
目錄下創(chuàng)建腳本,命名為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# 關(guān)閉主模式echo gadget > /sys/kernel/debug/usb/ci_hdrc.0/role;;
esac
- 修改文件執(zhí)行權(quán)限。
chmod +x /etc/NetworkManager/dispatcher.d/USBctl.sh
- 編輯 NetworkManager 的配置文件
/etc/NetworkManager/NetworkManager.conf
,在[main]
段中添加以下內(nèi)容,用于啟用dispatcher.d
目錄中的腳本。
[main]
dispatcher=dispatcher.d
- 重新啟動 NetworkManager 服務(wù)。
systemctl restart NetworkManager
# systemctl status NetworkManager-dispatcher.service # 打印日志用于調(diào)試
現(xiàn)在,當隨身WIFI連接 WiFi 網(wǎng)絡(luò)時,腳本 /etc/NetworkManager/dispatcher.d/ifup-post-wifi.sh
中的命令將自動執(zhí)行。即綠燈亮起,USB設(shè)置為主模式。
NetworkManager-dispatcher(8) — Arch manual pages (archlinux.org)
用 NM-dispatcher 實現(xiàn) WiFi 開關(guān)的自動控制 - sbw Blog