http://www.linuxeden.com/html/softuse/20100630/103609.html
arm平台是三星2440,Linux內核是2.6.24,威盛VNT6656的USB無線網卡;開發平台是Fedora10,內核是2.6.27。遭遇的問題主要有如下幾個:
一、驅動程序的版本不對
開始在網上找了個VNT6656的Linux驅動程序,直接先在本地機器上編譯。結果錯誤太多太多,改了一批還有一大批,主要問題是很多的“結構體”不對,而且開始還得把CFLAGS全部換成EXTRA_CFLAGS。最終才反應過來,可能下的驅動程序版本有問題。
到http://www.viaarena.com/ 下載最新的驅動:http://www.viaarena.com/Driver/VT6656_Linux_src_v1.19_12_x86.zip 。之前的驅動是1.13版本的。根本的問題在於,沒有認真讀驅動說明文檔,開始的版本根本不支持Fedora10。
那麼,到底兩個驅動有什麼不同呢?原因在於,在Linux2.6.24以後的內核中,網絡部分有了改動,而且是網絡部分很重要的結構體被改動了,第一個驅動肯定是基於2.6.24之前的內核。比如,struct sk_buff,在這裡可以看到具體的不同點,文中提到的《Professional Linux Kernel Architecture》可以網上下一下,確實不錯,內容包含2.6.24以後比較新的內容。
二、編譯驅動模塊
驅動程序是是要編譯成模塊的,直接make就是編譯本地機器上的驅動,很順利,生成的vntwusb.ko可以在本地機器上加載成功,使用正常,竊喜。接下來把Makefie裡面的CC、LD等交叉編譯工具變量設為arm-linux-gcc、arm-linux-ld。繼續make,又出錯了,具體錯誤忘了。正確的方法是,make -C $(KERNEL_DIR) M=$(MODULE_DIR) ,-C指名內核所在文件夾,不寫就按照默認的。默認的是本地機器上的內核,本人所在機器默認內核是/usr/src/kernels /2.6.27.5-117.fc10.i686,這樣肯定不行。 M指名要編譯模塊所在的路徑。實際命令是
make -C /media/Study/temp/utu-Linux2.6.24_for_utu2440_2009-03-15 M=/media/Study/temp/VT6656_Linux_src_v1.19_12_x86/driver。
繼續編譯,依然有錯,因為Makefile還沒改好。把Makefile裡的KSRC變量直接賦值KSRC=/media/Study/temp /utu-Linux2.6.24_for_utu2440_2009-03-15,Makefile裡面還有KSP等搗亂的變量,直接都刪掉即可。 make 時候還要新增加一個選項,
KSRC=/media/Study/temp/utu-Linux2.6.24_for_utu2440_2009-03-15
,不加好像不行,鬱悶。 。 。繼續編譯,會在ioctl.c line:298 出現段錯誤segmentation fault,把這一行註釋掉
// pList->sBSSIDList[ii].wBeaconInterval = pBSS->wBeaconInterval;
這樣就可以得到我們需要的vntwusb.ko。不解的是,在按照本地機器的內核編譯就沒有任何問題。
三、還要編譯內核
有了驅動模塊,在板子上加載時出現“Unknown symbol in module”的錯誤。原來板子預裝的內核是不帶wifi也即802.11模塊的。回想下,在編譯結束時也打印了一個警告信息,說是wireless send event 沒註冊之類的。 。重新編譯內核時可以直接找到板子默認配置文件,把裡面wireless部分改一下,並改文件名為.config作為默認配置.make menuconfig當然也可以。改動如下:
#
# Wireless
#
CONFIG_CFG80211=y
CONFIG_NL80211=y
CONFIG_WIRELESS_EXT=y
CONFIG_IEEE80211=y
# CONFIG_IEEE80211_DEBUG is not set
CONFIG_IEEE80211_CRYPT_WEP=y
# CONFIG_IEEE80211_CRYPT_CCMP is not set
# CONFIG_IEEE80211_CRYPT_TKIP is not set
# CONFIG_RFKILL is not set
內核編譯好了,下載到板子裡去就好了。 。
四、如何在板子上使用無線網卡呢?
前提,USB Host驅動需要已經安裝好了。加載vntw6656.ko模塊成功之後,要使用無線網卡還需把驅動程序包裡的wetctl工具編譯一下,修改Makefile直接make就行,編譯好了考到板子的/sbin/裡。另外程序包裡還有個腳本文件,使用時可以根據需要改動。DESIRED_SSID=“TestAP”是新建的無線連接名字,BSSTYPE=adhoc,建立點對點的adhoc網絡,可以讓其他網絡尋找到。加 入附件的網絡,把
/sbin/wetctl $DEVICE join \
infra\ #BSSTYPE類型
“ChianNet” \ #想要連接的無線網絡名稱
11 \ #channel
$PSMODE \
$AUTHTYPE
幾個選項改掉就行。也可以直接用wetctl幾個命令
wetctl eth1 [scan、link 、list、 join等]
ifconfig 兩個個命令
ifconfig eth1 192.168.1.110
ifconfig eth1 up
留言列表