柚子快報(bào)激活碼778899分享:于開(kāi)發(fā)板上添加adb功能
柚子快報(bào)激活碼778899分享:于開(kāi)發(fā)板上添加adb功能
文章目錄
1 USB gadget2 configfs3 添加adb功能于開(kāi)發(fā)板3.1 移植adb程序3.2 gadget相關(guān)功能3.3 配置腳本
4 驗(yàn)證使用4.1 啟動(dòng)adb功能及驗(yàn)證是否啟動(dòng)成功4.2 其他命令
1 USB gadget
USB gadget 是一種在嵌入式系統(tǒng)中模擬 USB 設(shè)備的功能。它允許將嵌入式設(shè)備(例如單板計(jì)算機(jī)、嵌入式開(kāi)發(fā)板或智能手機(jī))配置為通過(guò) USB 接口與主機(jī)進(jìn)行通信,就像普通的 USB 設(shè)備一樣。
通常情況下,USB gadget 可以模擬各種類型的 USB 設(shè)備,例如存儲(chǔ)設(shè)備(Mass Storage)、串行設(shè)備(Serial)、網(wǎng)絡(luò)設(shè)備(Ethernet)、音頻設(shè)備(Audio)等。通過(guò)配置不同的 gadget 功能,嵌入式系統(tǒng)可以在 USB 總線上表現(xiàn)為不同類型的設(shè)備,從而與主機(jī)進(jìn)行通信和交互。
使用 USB gadget,開(kāi)發(fā)人員和制造商可以實(shí)現(xiàn)以下功能:
調(diào)試和調(diào)試功能:通過(guò)配置 USB gadget 為 Android Debug Bridge (ADB) 功能,可以方便地進(jìn)行嵌入式系統(tǒng)的調(diào)試和調(diào)試。 數(shù)據(jù)傳輸:通過(guò)配置 USB gadget 為存儲(chǔ)設(shè)備(Mass Storage),可以將嵌入式系統(tǒng)作為 USB 存儲(chǔ)設(shè)備,實(shí)現(xiàn)數(shù)據(jù)的讀取和寫入。 網(wǎng)絡(luò)連接:通過(guò)配置 USB gadget 為網(wǎng)絡(luò)設(shè)備(Ethernet),可以將嵌入式系統(tǒng)連接到主機(jī)以進(jìn)行網(wǎng)絡(luò)通信。 外設(shè)控制:通過(guò)配置 USB gadget 為 HID(Human Interface Device)或其他外設(shè)類型,可以模擬鍵盤、鼠標(biāo)或其他外設(shè),使嵌入式系統(tǒng)能夠與主機(jī)進(jìn)行交互。
USB gadget 的配置通常通過(guò)在 Linux 內(nèi)核中啟用相應(yīng)的選項(xiàng),并通過(guò) sysfs 或 configfs 進(jìn)行動(dòng)態(tài)配置。這使得嵌入式系統(tǒng)可以根據(jù)需求靈活地配置和切換不同的 USB gadget 功能。
總之,USB gadget 允許嵌入式系統(tǒng)通過(guò) USB 接口模擬各種類型的 USB 設(shè)備,從而實(shí)現(xiàn)與主機(jī)的通信和交互。它在嵌入式系統(tǒng)開(kāi)發(fā)、調(diào)試和數(shù)據(jù)傳輸?shù)确矫婢哂袕V泛的應(yīng)用。
2 configfs
Configfs 是 Linux 內(nèi)核提供的一種文件系統(tǒng),用于動(dòng)態(tài)配置內(nèi)核的功能和設(shè)備。在 USB gadget 的上下文中,configfs 用于配置 USB gadget 的功能和屬性。
Configfs 提供了一種以文件和目錄的形式表示和配置內(nèi)核對(duì)象的方式。在 USB gadget 中,configfs 允許用戶在運(yùn)行時(shí)創(chuàng)建和配置 gadget 功能和配置,而無(wú)需重新編譯或重新加載內(nèi)核模塊。
在 configfs 中,USB gadget 的配置位于 /sys/kernel/config/usb_gadget/ 目錄下。通過(guò)在該目錄下創(chuàng)建和配置文件和目錄,可以定義 USB gadget 的功能、屬性和配置。
以下是 configfs 中 USB gadget 配置的一些重要子目錄和文件:
g1:表示 USB gadget 的一個(gè)實(shí)例,可以根據(jù)需要?jiǎng)?chuàng)建多個(gè)實(shí)例。
g1/functions/:包含 USB gadget 可用的功能目錄。例如,可以在此目錄下創(chuàng)建 ffs 目錄來(lái)配置 FunctionFS 功能。
當(dāng)功能目錄下無(wú)法建立你想要的功能目錄,是因?yàn)槟銢](méi)有打開(kāi)內(nèi)核這部分功能
eg:mkdir: can't create directory 'ffs.adb': No such file or directory 代表內(nèi)核未打開(kāi)function filesystem功能
內(nèi)核路徑:.../drivers/usb/gadget/function 修改makefile及配置文件啟動(dòng)
g1/configs/:包含 USB gadget 可用的配置目錄??梢栽诖四夸浵聞?chuàng)建多個(gè)配置,每個(gè)配置可以關(guān)聯(lián)一個(gè)或多個(gè)功能。
g1/UDC:包含 USB Device Controller(UDC)的名稱(例如 udc-x.y)。將 UDC 變量設(shè)置為適當(dāng)?shù)?UDC 驅(qū)動(dòng)程序,以將 USB gadget 與 UDC 關(guān)聯(lián)起來(lái)。
需要注意的是,configfs 是一種高級(jí)的內(nèi)核功能,使用它需要一定的了解和熟悉。具體的配置和操作細(xì)節(jié)可能會(huì)因系統(tǒng)環(huán)境和內(nèi)核版本的不同而有所變化。相關(guān)的文檔和資源可以提供更詳細(xì)的使用指南和示例。
3 添加adb功能于開(kāi)發(fā)板
3.1 移植adb程序
請(qǐng)參考:移植adbd
3.2 gadget相關(guān)功能
打開(kāi)以下內(nèi)核配置選項(xiàng),啟動(dòng)ffs功能
CONFIG_USB_F_FS=y
CONFIG_USB_CONFIGFS_SERIAL=y
CONFIG_USB_CONFIGFS_F_FS=y
3.3 配置腳本
更多設(shè)備及具體原因可參考:usb gadget configfs
#!/bin/sh
case "$1" in
start)
test -d /sys/kernel/config || mkdir /sys/kernel/config
mount -t configfs none /sys/kernel/config
mkdir /sys/kernel/config/usb_gadget/g1
cd /sys/kernel/config/usb_gadget/g1
echo 0x2207 > idVendor
echo 0x0006 > idProduct
mkdir strings/0x409
echo 0123456789ABCDEF > strings/0x409/serialnumber
echo "rockchip" > strings/0x409/manufacturer
echo "rk30xx" > strings/0x409/product
mkdir configs/b.1
mkdir configs/b.1/strings/0x409
echo "adb" > configs/b.1/strings/0x409/configuration
#echo "Conf 1" > configs/b.1/strings/0x409/configuration
#echo 120 > configs/b.1/MaxPower
cur_path=`pwd`
mkdir -p $cur_path'/functions/ffs.adb'
ln -s /sys/kernel/config/usb_gadget/g1/functions/ffs.adb /sys/kernel/config/usb_gadget/g1/configs/b.1/ffs.adb
mkdir -p /dev/usb-ffs/adb
mount -o uid=2000,gid=2000 -t functionfs adb /dev/usb-ffs/adb
cd /
adbd &
UDC=`ls /sys/class/udc/| awk '{print $1}'`
sleep 1 && echo $UDC > /sys/kernel/config/usb_gadget/g1/UDC &
;;
stop)
echo none > /sys/kernel/config/usb_gadget/g1/UDC
;;
restart|reload|force-reload)
echo "Error: argument '$1' not supported" >&2
exit 3
;;
*)
echo "Usage: adbd start|stop" >&2
exit 3
;;
esac
4 驗(yàn)證使用
4.1 啟動(dòng)adb功能及驗(yàn)證是否啟動(dòng)成功
串口連接后,執(zhí)行以下命令
. S30adbd start
腳本運(yùn)行成功會(huì)有以下打印
[ 70.427528] file system registered
# install_listener('tcp:5037','*smartsocket*')
[ 70.484788] read descriptors
[ 70.484840] read strings
[ 71.467810] dwc2 ff400000.usb: bound driver configfs-gadget
[ 71.673140] dwc2 ff400000.usb: new device is high-speed
[ 71.809231] dwc2 ff400000.usb: new device is high-speed
[ 71.882259] dwc2 ff400000.usb: new address 6
[ 71.906431] android_work: sent uevent USB_STATE=CONNECTED
[ 71.907887] configfs-gadget gadget: high-speed config #1: b
[ 71.908134] android_work: sent uevent USB_STATE=CONFIGURED
同時(shí)pc端可以用lsusb觀測(cè)到新的usb設(shè)備,而adb devices則可以看到
List of devices attached
0123456789ABCDEF device
4.2 其他命令
連接終端 adb shell
發(fā)送文件 adb push [local] [remote]
拉取文件 adb pull [remote] [local]
pc安裝adb以及更多可用命令可參考rk-adb說(shuō)明
柚子快報(bào)激活碼778899分享:于開(kāi)發(fā)板上添加adb功能
好文閱讀
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。