本文將借助飛凌嵌入式OK3568-C開發板為大家介紹實現USBNET模式的方法,在這之前需要先知道什么是USB Gadget——USB Gadget是指所開發的電子設備以USB從設備的模式通過USB連接到主機。舉個例子:將手機通過USB線插入PC后,手機就是USB Gadget。同理,在本文的操作中就是將手機替換成了OK3568-C開發板。
Gadget框架提出了一套標準API,在底層,USB設備控制器(UDC) 驅動則實現這一套API,不同的UDC(通常是SoC的一部分) 需要不同的驅動, 甚至基于同樣的UDC的不同板卡也需要對代碼進行修改。我們想要實現USBNET也需要驅動,它的名字叫做RNDIS。RNDIS驅動在內核中是存在的,只需要找到配置項并編譯進內核即可。
首先進入源碼kernel目錄,進入menuconfig圖形配置界面:
![wKgaomUECROAYC5GAAAQXBiO6F0943.png](https://file1.elecfans.com/web2/M00/A4/AE/wKgaomUECROAYC5GAAAQXBiO6F0943.png)
進入menuconfig時需要指定環境,不然直接執行make menuconfig進入的圖形配置界面為X86架構。如下圖進入的為ARM架構是正確的圖形配置界面:
![wKgZomUECROAWlF_AAAbISfZ894988.png](https://file1.elecfans.com/web2/M00/A3/43/wKgZomUECROAWlF_AAAbISfZ894988.png)
按 /,可以進入搜索界面:
![wKgaomUECROACfkEAAAUgFQG7vo900.png](https://file1.elecfans.com/web2/M00/A4/AE/wKgaomUECROACfkEAAAUgFQG7vo900.png)
直接搜索rndis,找到寫有USB Gadget字樣的目錄,可以看到有多個路徑,可以直接進入USB Gadget目錄下去看,那個就是配置RNDIS的選項。
![wKgZomUECROAASRlAABWvZJN2jM760.png](https://file1.elecfans.com/web2/M00/A3/43/wKgZomUECROAASRlAABWvZJN2jM760.png)
經過尋找最終路徑如下圖所示:
![wKgaomUECRKAEfScAAAm_bActYY976.png](https://file1.elecfans.com/web2/M00/A4/AE/wKgaomUECRKAEfScAAAm_bActYY976.png)
將RNDIS驅動開啟,并選中一些網絡協議配置,如下圖圈中所示:
![wKgaomUECROAJUBeAADpZUy3QL024.jpeg](https://file1.elecfans.com/web2/M00/A4/AE/wKgaomUECROAJUBeAADpZUy3QL024.jpeg)
找到USB Gadget precomposed configurations,將RNDIS編譯進內核(如果選擇編譯成模塊,單獨編譯內核不會生成 .ko文件,為了省去繁瑣掛載步驟,本篇就將RNDIS編譯進內核)。
![wKgaomUECROAFQhpAAAZNg45opg66.jpeg](https://file1.elecfans.com/web2/M00/A4/AE/wKgaomUECROAFQhpAAAZNg45opg66.jpeg)
配置完成,選擇Exit按鍵直到退出,“是否保存”選擇yes即可:
![wKgZomUECROADPCbAAAV8BhZY8c027.png](https://file1.elecfans.com/web2/M00/A3/43/wKgZomUECROADPCbAAAV8BhZY8c027.png)
返回源碼目錄進入build.sh腳本,注釋掉defconfig生成.config文件的命令,使menuconfig配置生效,注釋位置如下:
![wKgZomUECROAZIEwAABYINLFi7g669.png](https://file1.elecfans.com/web2/M00/A3/43/wKgZomUECROAZIEwAABYINLFi7g669.png)
保存退出,單獨編譯內核,在源碼目錄下執行./build.sh kernel。編譯完成之后會在kernel目錄下生成boot.img文件。
![wKgaomUECROAZO1LAAAY5iHuN1E075.png](https://file1.elecfans.com/web2/M00/A4/AE/wKgaomUECROAZO1LAAAY5iHuN1E075.png)
單步更新鏡像使用瑞芯微官方提供的燒寫工具——RKDevTool。按住Recovery鍵按Reset,直到燒寫工具顯示發現一個LOADER設備后松開Recovery鍵。
![wKgZomUECROARKQlAAAZH9Lh1ZU004.png](https://file1.elecfans.com/web2/M00/A3/43/wKgZomUECROARKQlAAAZH9Lh1ZU004.png)
替換圖中位置,點擊設備分區表,完成后,點擊執行,設備重啟后,即為燒錄完成,右側也會有燒錄進度。開發板重啟后,ifconfig -a查看可以看到生成usb0節點。
![wKgaomUECROAeemjAABIpOJQMX8192.png](https://file1.elecfans.com/web2/M00/A4/AE/wKgaomUECROAeemjAABIpOJQMX8192.png)
利用Linux USB Gadget設備驅動可以實現一些比較有意思的功能:
1. 一個嵌入式產品中的某個存儲設備,或是一個存儲設備的某個分區,可以作為一個U盤被PC識別;
2. 一個嵌入式設備通過USB連接到PC后,在PC端會出現一個新的網絡連接,在嵌入式設備上也會有一個網卡設備,你可以配置它們的IP地址,并進行網絡通訊,俗稱USBNET。
此次使用的是USB3.0接口,因此需要detect激活Type-C 5V轉3.3V Type-A,硬件改動為p40的pin1連接c23的正極。將播碼開關撥至ON,插入雙公頭USB線;
強制使USB輸出為device
echo peripheral > /sys/devices/platform/fe8a0000.usb2-phy/otg_mode
打印信息如圖所示:
![wKgZomUECROAIyNlAAAz3JBrQzw866.png](https://file1.elecfans.com/web2/M00/A3/43/wKgZomUECROAIyNlAAAz3JBrQzw866.png)
可以在設備管理器網絡適配器上看到這個節點,配置一個IP
![wKgZomUECROAOxdrAAAG_dJVzUM732.png](https://file1.elecfans.com/web2/M00/A3/43/wKgZomUECROAOxdrAAAG_dJVzUM732.png)
查看網絡連接可以看到一個未識別網絡,將這個也配置上IP,注意需要跟OK3568-C開發板配置的IP在同一網段:
![wKgaomUECROAXJ5BAAAUeypxzBg136.png](https://file1.elecfans.com/web2/M00/A4/AE/wKgaomUECROAXJ5BAAAUeypxzBg136.png)
使用OK3568-C開發板去ping剛才電腦配置的IP,發現可以ping通。
![wKgZomUECRSAadcMAAAj-ONUZpc943.png](https://file1.elecfans.com/web2/M00/A3/43/wKgZomUECRSAadcMAAAj-ONUZpc943.png)
通過以上信息可以看出,OK3568-C開發板已實現USBNET功能,實現網絡共享。
-
ARM
+關注
關注
134文章
9169瀏覽量
369222 -
嵌入式
+關注
關注
5092文章
19178瀏覽量
307696 -
usb
+關注
關注
60文章
7980瀏覽量
266099 -
網絡
+關注
關注
14文章
7600瀏覽量
89251 -
開發板
+關注
關注
25文章
5121瀏覽量
98201 -
飛凌嵌入式
+關注
關注
1文章
94瀏覽量
221
發布評論請先 登錄
相關推薦
評論