把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實現轉發,我還不能自己新增,只能到此為止了。
[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)