歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

WIFI模塊RT3070的ARM Linux移植

軟硬件平台:

宿主機:Fedora10 VMware虛擬機

目標版:tiny6410,Linux2.6.38

交叉編譯工具:arm-linux- 4.5.1

網卡:Ralink3070模塊


步驟:

1、編譯驅動的預操作:編譯arm版本的內核源碼。

從tiny6410的光碟中獲取內核源碼,此內核源碼已經經過友善之臂的移植,可以直接編譯移植入tiny6410中。

cp linux-2.6.38-20110718.tar.gz /usr/src/kernels/

cd /usr/src/kernels

tar -zxvf linux-2.6.38-20110718.tar.gz

cd linux-2.6.38

cp config_mini6410_n43 .config

make menuconfig

進入內核配置界面,內核配置中需要做的修改如下:

[*] Networking support  --->

      [*]  Wireless  --->

              <*>  cfg80211 - wireless configuration API

              [*]  Wireless extensions sysfs files

              <*>  Generic IEEE 802.11 Networking Stack (mac80211)

Device Drivers  --->

      [*] Network device support  --->

              [*]  Wireless LAN  --->

                    <*>  IEEE 802.11 for Host AP (Prism2/2.5/3 and WEP/TKIP/CCMP)

                    [*]    Support downloading firmware images with Host AP driver

                    [*]      Support for non-volatile firmware download

                    <M>  Ralink driver support  --->

                            <M>  Ralink rt27xx/rt28xx/rt30xx (USB) support

然後make,編譯通過後會在arch/arm/boot/目錄下生成可燒寫入開發板的zImage內核鏡像。


2、編譯rt3070模塊的驅動

在雷凌的官網下載linux版本的rt3070驅動2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO.bz2,解壓後的目錄名稱太長,所以可以對其做修改方便使用,然後進入到目錄中

tar –jxf 2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO.bz2

mv 2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO rt3070

cd rt3070

目錄中的README_STA_usb文件介紹了編譯和加載驅動的一些信息。需要對os/linux/目錄下的conf.mk文件進行修改,這裡只貼出要修改的部分:

vim os/linux/config.mk

# Support Wpa_Supplicant

HAS_WPA_SUPPLICANT=y

# Support Native WpaSupplicant for Network Maganger

HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y

Makefile也要進行修改,芯片類型改為3070,默認的PLATFORM為PC,那麼將後面的ifeq($(PLATFORM),PC)下的內核源碼路徑指定為上述的交叉編譯過的內核源碼目錄,交叉編譯工具指定為arm-linux-,當然之前應該把交叉工具鏈安裝好,這裡不再詳述。

vim Makefile

ifeq ($(CHIPSET),)
CHIPSET = 3070
endif

……

ifeq ($(PLATFORM),PC)

# Linux 2.6

LINUX_SRC = /usr/src/kernels/linux-2.6.38

# Linux 2.4 Change to your local setting

#LINUX_SRC = /usr/src/linux-2.4

LINUX_SRC_MODULE = /lib/modules/$(shell uname -r)/kernel/drivers/net/wireless/

CROSS_COMPILE = /usr/local/FriendlyARM/toolschain/4.5.1/bin/arm-linux-

endif

然後如果直接make,會報如下錯誤:

/home/cabbage/Desktop/rt3070/os/linux/../../chips/rtmp_chip.c: In function 'RtmpChipOpsHook':

/home/cabbage/Desktop/rt3070/os/linux/../../chips/rtmp_chip.c:470: error: implicit declaration of function 'RT33xx_Init'

make[2]: *** [/home/cabbage/Desktop/rt3070/os/linux/../../chips/rtmp_chip.o] Error 1

make[1]: *** [_module_/home/cabbage/Desktop/rt3070/os/linux] Error 2

make[1]: Leaving directory `/usr/src/kernels/linux-2.6.38'

make: *** [LINUX] Error 2

在網上查到似乎是因為改變了CHIPSET所導致的錯誤。修改chips/目錄下的rtmp_chip.c文件,定位到470行,修改後如下:

#ifdef RT30xx


        if (IS_RT30xx(pAd))

        {

                if (IS_RT3390(pAd))

                    ;//RT33xx_Init(pAd);

                else

                        RT30xx_Init(pAd);

        }

#endif /* RT30xx */

然後再make,編譯通過後會在os/linux/下生成rt3070sta.ko,這就是模塊的驅動。 但是這裡我出現了一個問題,查看rt3070sta.ko這個文件的大小,居然達到了12m,這是不合理的,原因應該是包含了大量調試信息,用arm-linux-strip可將它的大小裁剪為750k左右。

#arm-linux-strip -S rt3070sta.ko

其中-S參數是必須的,否則在加載驅動的時候會報找不到版本信息的錯誤。

Copyright © Linux教程網 All Rights Reserved