1. 程式人生 > >把arm開發板做成USB網絡卡(RNDIS /Ethernet Gadget)

把arm開發板做成USB網絡卡(RNDIS /Ethernet Gadget)

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

/*******************************************************

原文地址: http://hi.baidu.com/deep_pro/item/ec40c00ad48b8ef7a010340f
說明:下邊有補充! *********************************************************/

       折騰了好幾天,終於把Linux Gadget裝置驅動搞得有點入門了。
       以前看的那個把mini2440當做滑鼠的那個驅動程式http://www.arm9home.com/bbs/read.php?tid-2538.html
       真的有點誤導。他說一個晚上就搞定了,這是讓我汗顏的水平。
       

裡真正的一線開發工程師的差距還很大啊

       終於有點明白 /driver/usb/Gadget 下的原始碼作用了,媽的,
       以前還總是在核心已經有一個驅動佔用了usb slave的時候還強行載入那個模擬滑鼠的驅動,
       看著insmod: cannot insert 'zebra_mouse.ko': Device or resource busy 很抓狂
       其實只要把usb slave口的線拔下再插上,這才能觸發USB裝置識別

       

華清遠見大牛老師劉洪濤寫的
       http://blog.csdn.net/hongtao_liu/archive/2009/09/15/4555645.aspx

       不知道能不能輪到他給我們上課,看了第三期驅動課表,只有10多天,唉

       那個fs2410開發板暫時拿不到手,那就在mini2440上玩玩吧
       重新編譯核心(2.6.29)
       2.6.29核心 
       Device Drivers ---> USB support --->   USB Gadget Support ---> 
       其中 USB Peripheral Controller 選 S3C2410 USB Device Controller
       然後再選一個核心自帶的Gadget驅動程式來做演示,這裡就選 Ethernet Gadget (with CDC Ethernet support)   
              因為這個驅動不需要傳入引數,所以給個Y而不是M,省事

       



       make之後燒寫zImage到mini1440
       等到Linux完全啟動之後,拔下usb slave口的接頭再插上,就會彈出發現(RNDIS /Ethernet Gadget)裝置的資訊

       只是這個RNDIS 驅動實在難搞,據說在 activesync 裡有,但是我裝了沒有反應
       只有自己下載了微軟的RNDIS USB kit 2005,抽取出驅動並自己改了模板裡的inf檔案才算安裝成功

       我改好的RNDIS網絡卡驅動下載
       http://download.csdn.net/source/1742242

       inf檔案裡只改了vid和pid,這個可以從裝置管理器裡查到(即使還沒有驅動程式)
       

       這裡vid是0525 pid a4a2
       後來想想完全可以吧製造商什麼的也改了,那應該很好玩

       然後就多了一個網路連線,設定為ip 192.168.1.2 閘道器192.168.1.1 子網掩碼255.255.255.0
       此時這個網路連線還是斷開狀態

       dnw連線開發板,ifconfig usb0 192.168.1.1 ,就會發現網路聯通了  (kangear注:測試OK)
       互ping可以,還可以http://192.168.1.1訪問開發板裡內建的web伺服器 (kangear注:測試OK)

       至於使用開發板讓PC上網,這個應該是很多wm手機具備的功能,RNDIS我想就是為了這個目的設計的。
       可以mini2440裡沒有iptable什麼複雜的包轉發程式,將usb0通過eth0實現轉發,我還不能自己新增,只能到此為止了。


kangear補充: 對於: http://www.arm9home.net/simple/index.php?t3326.html 裡的測試方法: [email protected]:~$ 
[email protected]:~$ ftp 192.168.0.202
Connected to 192.168.0.202.
220 FriendlyARM FTP server (Version 6.4/OpenBSD/Linux-ftpd-0.17) ready.
Name (192.168.0.202:alex): 
331 Password required for alex.
Password:
530 Login incorrect.
Login failed.
ftp> 
我的測試結果: [[email protected] linux-2.6.32.2]# ftp 192.168.1.230 Connected to 192.168.1.230 (192.168.1.230). 220 FriendlyARM FTP server (Version 6.4/OpenBSD/Linux-ftpd-0.17) ready. Name (192.168.1.230:root):  331 Password required for root. Password: 530 Login incorrect. Login failed. ftp>  ( 註釋:我不知道賬號密碼就直接敲回車了,不過看可以看出已經能連線了)
就差原博主沒有實現的當成真網絡卡用的功能了,不過我找到一些相關知識,搞懂後應該就可以了《 如何開啟Linux雙網絡卡的轉發功能

以上的ping能最後實驗是自己騙自己,去總結的時候發現的,實質並不是用的usb線來ping,看了這篇文章《開發板作為USB裝置模擬網絡卡(linux usb 網絡卡)--gadget&&rndis|cdc》才真正意義上的ping通了。以下是轉載的關鍵部分:


最後還有一個問題,就是開發板有網絡卡,還模擬USB為網絡卡的情況,一定要保證usb虛擬的網絡卡和WINDOWS上USB網絡卡在同一個IP段,並且不能和開發板原先的網絡卡的IP段一樣,要不累死你都PING不到~

著是我網絡卡設定的情況

windows

usb網絡卡

IP:192.168.2.50 掩碼:255.255.255.0 閘道器:(這個隨意,看個人喜好,如果設定閘道器最好開發板也設定)192.168.2.1

正常網絡卡

IP:192.168.1.235 掩碼:255.255.255.0 閘道器:192.168.1.1

開發板

usb網絡卡

IP:192.168.2.70 掩碼:255.255.255.0 閘道器:192.168.2.1

正常網絡卡

IP:192.168.1.70 掩碼:255.255.255.0 閘道器:192.168.1.1

檢視開發板閘道器

route -n

設定開發板閘道器

route add default gw 192.168.2.1

這樣之後應該就能和WINDOWS PING通了~

kangear的測試結果:
[[email protected] 桌面]# ftp 192.168.2.230Connected to 192.168.2.230 (192.168.2.230).220 FriendlyARM FTP server (Version 6.4/OpenBSD/Linux-ftpd-0.17) ready.Name (192.168.2.230:root): plg331 Password required for plg.Password:230 User plg logged in.Remote system type is UNIX.Using binary mode to transfer files.ftp> ftp> 

(ftp的帳戶和密碼是參考 這裡,帳戶:plg,密碼:plg)

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述