【轉】RT3070驅動移植
STA驅動的移植
#tar jxvf 2010_0831_RT3070_Linux_STA_v2.3.0.0_DPO.bz2 cd 2010_0831_RT3070_Linux_STA_v2.3.0.0_DPO |
修改原有的Makefile檔案如下(只給出需要修改的部分,“-”表示刪除的行,“+”表示新增的行):
+#Makefile for RT3070 on MBC-SAM9G45 +#2010_11_13 by liyi RT28xx_MODE = STA TARGET = LINUX CHIPSET = 3070 -PLATFORM = PC +PLATFORM = IXP ifeq ($(PLATFORM),IXP) -LINUX_SRC = /project -CROSS_COMPILE = arm-linux- +LINUX_SRC = /home/Embest_SAM9G45/linux-2.6.30 +CROSS_COMPILE = /usr/local/arm2007q1/bin/arm-none-linux-gnueabi- endif |
修改os/linux資料夾中的config.mk檔案,需要修改的地方如下(只給出需要修改的部分):
# Support Wpa_Supplicant - HAS_WPA_SUPPLICANT=n +HAS_WPA_SUPPLICANT=y # Support Native WpaSupplicant for Network Maganger -HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=n +HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y ifeq ($(PLATFORM),IXP) - WFLAGS += -DRT_BIG_ENDIAN +#WFLAGS += -DRT_BIG_ENDIAN endif ifeq ($(PLATFORM),IXP) EXTRA_CFLAGS := -v $(WFLAGS) -I$(RT28xx_DIR)/include endif ifeq ($(PLATFORM),IXP) -CFLAGS := -v -D__KERNEL__ -DMODULE -I$(LINUX_SRC)/include -I$(RT28xx_DIR)/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -Uarm -fno-common -pipe -mapcs-32 -D__LINUX_ARM_ARCH__=5 -mcpu=xscale -mtune=xscale -malignment-traps -msoft-float $(WFLAGS) -EXTRA_CFLAGS := -v $(WFLAGS) -I$(RT28xx_DIR)/include -export CFLAGS - + endif |
修改完成以後,通過以下命令編譯:
make ARCH=arm KBUILD_NOPEDANTIC=1 |
如果不加KBUILD_NOPEDANTIC=1將出現CFLAGS was changed in …. Fix it to use EXTRA_CFLAGS的錯誤,編譯不能通過。編譯完成後,會在os/linux資料夾中生成rt3070sta.ko的驅動模組。此模組通過下載工具可以下載到/mnt目錄。
在驅動目錄下新建一個資料夾Wireless/RT2870STA,將RT2870STA.dat複製進Wireless/RT2870STAm目錄下,同時將此資料夾拷貝進開發板。從超級終端進入開發板目錄/mnt使用以下命令將Wireless資料夾拷貝到/etc目錄下,將rt3070sta.ko拷貝進/home/root使用者目錄下:
#cp /mnt/Wireless /usr –r #cp /mnt/rt3070sta.ko /home/root |
開啟root目錄,載入驅動模組:
#cd /home/root #insmod rt3070sta.ko |
如果加載出現一下錯誤:
#insmod rt3070sta.ko insmod: error inserting 'rt3070sta.ko': -1 Unknown symbol in module #dmesg | grep rt3070 [ 2443.154486] rt2070ap: Unknown symbol usb_alloc_urb [ 2443.154628] rt2070ap: Unknown symbol usb_free_urb [ 2443.155032] rt2070ap: Unknown symbol usb_register_driver [ 2443.155324] rt2070ap: Unknown symbol usb_put_dev [ 2443.155439] rt2070ap: Unknown symbol usb_get_dev [ 2443.155652] rt2070ap: Unknown symbol usb_submit_urb [ 2443.156164] rt2070ap: Unknown symbol usb_control_msg [ 2443.156553] rt2070ap: Unknown symbol usb_deregister [ 2443.157013] rt2070ap: Unknown symbol usb_kill_urb [ 2443.157116] rt2070ap: Unknown symbol usb_buffer_free [ 2443.157443] rt2070ap: Unknown symbol find_vpid [ 2443.157675] rt2070ap: Unknown symbol usb_buffer_alloc |
則需要在檔案os/linux/usb_main_dev.c檔案的開頭加上如下一行程式碼:
MODULE_LICENSE(“GPL”); |
然後重新編譯、重新載入,即可得到正確的結果。
用ifconfig-a命令檢視網路,如果載入成功,不會有任何提示,同時可以檢視到ra0裝置的存在。
載入上模組過後,可以用相關命令設定無線網絡卡。命令包括iwpriv、iwconfig、iwlist、ifconfig等。比如設定無線網絡卡地址為192.168.1.5:
ifconfig ra0 192.168.1.5 |
設定無線網路模式為ad-hoc模式:
iwpriv ra0 set NetworkType=Adhoc |
設定SSID名為isn313:
iwconf ra0 essid isn313 |
檢視無線網路:
iwlist ra0 scanning |
SoftAP驅動移植
解壓驅動2010_0203_RT3070_SoftAP_v2.4.0.1_DPA.bz2,然後進入目錄:
tar jxvf 2010_0203_RT3070_SoftAP_v2.4.0.1_DPA.bz2 cd 2010_0203_RT3070_SoftAP_v2.4.0.1_DPA |
修改Makefile如下(“-”表示刪除的行,“+”表示新增的行):
+#Makefile for RT3070 on MBC-SAM9G45 +#2010_11_13 by liyi RT28xx_MODE = AP TARGET = LINUX CHIPSET = 3070 -PLATFORM = PC +PLATFORM = IXP ……… ifeq ($(PLATFORM),IXP) -Linux_SRC = /project……….. -CROSS_COMPILE = arm-linux- +LINUX_SRC = /home/Embest_SAM9G45/linux-2.6.30 +CROSS_COMPILE = /usr/local/arm2007q1/bin/arm-none-linux-gnueabi- endif |
注意,在2010_0203_RT3070_SoftAP_v2.4.0.1_DPA.bz2驅動中,有三個資料夾,分別為MODULE、NETIF、UTIL,在這三個檔案中均有Makefile,所有的Makefile都需要如上修改,同樣,三個資料夾中的config.mk檔案也都需要修改。
修改config.mk配置檔案。
ifeq ($(PLATFORM),IXP) - WFLAGS += -DRT_BIG_ENDIAN +#WFLAGS += -DRT_BIG_ENDIAN endif ifeq ($(PLATFORM),IXP) #WFLAGS += -DRT_BIG_ENDIAN endif ifeq ($(PLATFORM),IXP) CFLAGS := -v -D__KERNEL__ -DMODULE -I$(LINUX_SRC)/include -I$(RT28xx_DIR)/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -Uarm -fno-common -pipe -mapcs-32 -D__LINUX_ARM_ARCH__=5 -mcpu=xscale -mtune=xscale -malignment-traps -msoft-float $(WFLAGS) EXTRA_CFLAGS := -v $(WFLAGS) -I$(RT28xx_DIR)/include export CFLAGS endif |
所有的config.mk都修改好以後,通過以下命令進行編譯:
make ARCH=arm KBUILD_NOPEDANTIC=1 |
如果編譯不能通過,請檢查是否所有的資料夾中的Makefile和config.mk都已經修改。編譯通過後,將在三個資料夾中分別生成三個可載入模組:rt3070ap.ko,rtutil3070ap.ko,rtnet3070ap.ko。通過USB介面將這三個模組和rt2870ap.dat檔案下載到開發板目錄下。並將檔案移動到相應位置:
#mkdir /etc/Wireless/ #mkdir /etc/Wireless/RT2870AP/ #cp /mnt/rt2870ap.dat /etc/Wireless/RT2870AP/RT2870AP.dat #cp /mnt/rt3070ap.ko /home/root #cp /mnt/rtutil3070ap.ko /home/root #cp /mnt/rtnet3070ap.ko /home/root |
第三行中,在RT2870AP資料夾中的.dat檔名必須是大寫的,否則模組將無法讀取。
移動好後,進入root目錄並載入模組:
#cd /home/root #insmod rtutil3070ap.ko #insmod rt3070ap.ko #insmod rtnet3070ap.ko #ifconfig ra0 up |
此處,載入模組一定要按此順序載入,否則將出現以下錯誤(用dmesg函式可檢視相關錯誤資訊):
#insmod rt3070sta.ko insmod: error inserting 'rt3070sta.ko': -1 Unknown symbol in module #dmesg | grep rt3070 [ 1011.612979] rt3070ap: Unknown symbol rausb_buffer_free [ 1011.613153] rt3070ap: Unknown symbol RtmpOSTaskNotifyToExit [ 1011.613410] rt3070ap: Unknown symbol rausb_buffer_alloc [ 1011.613536] rt3070ap: Unknown symbol RTMPFreeNdisPacket [ 1011.613692] rt3070ap: Unknown symbol AdapterBlockAllocateMemory [ 1011.613816] rt3070ap: Unknown symbol RTMP_IndicateMediaState [ 1011.614106] rt3070ap: Unknown symbol RTMP_SetPeriodicTimer [ 1011.614241] rt3070ap: Unknown symbol os_alloc_mem [ 1011.614373] rt3070ap: Unknown symbol ClonePacket [ 1011.614505] rt3070ap: Unknown symbol RTDebugLevel [ 1011.614646] rt3070ap: Unknown symbol announce_802_3_packet [ 1011.614780] rt3070ap: Unknown symbol Sniff2BytesFromNdisBuffer [ 1011.614916] rt3070ap: Unknown symbol RTMP_OS_Add_Timer [ 1011.615043] rt3070ap: Unknown symbol rausb_submit_urb [ 1011.615167] rt3070ap: Unknown symbol RTMP_AllocateFragPacketBuffer [ 1011.615292] rt3070ap: Unknown symbol rausb_alloc_urb [ 1011.615491] rt3070ap: Unknown symbol RtmpOSNetPktAlloc [ 1011.615616] rt3070ap: Unknown symbol VLAN_8023_Header_Copy [ 1011.615739] rt3070ap: Unknown symbol RTMP_OS_Mod_Timer [ 1011.615863] rt3070ap: Unknown symbol os_free_mem [ 1011.616005] rt3070ap: Unknown symbol rausb_control_msg [ 1011.616079] rt3070ap: Unknown symbol duplicate_pkt_with_TKIP_MIC [ 1011.616079] rt3070ap: Unknown symbol duplicate_pkt_with_VLAN [ 1011.616079] rt3070ap: Unknown symbol DuplicatePacket [ 1011.616079] rt3070ap: Unknown symbol RtmpOSTaskCustomize [ 1011.616079] rt3070ap: Unknown symbol RTMP_OS_Del_Timer [ 1011.616079] rt3070ap: Unknown symbol rausb_free_urb [ 1011.616079] rt3070ap: Unknown symbol get_netdev_from_bssid [ 1011.616079] rt3070ap: Unknown symbol hex_dump [ 1011.616079] rt3070ap: Unknown symbol RtmpOSFileOpen [ 1011.616079] rt3070ap: Unknown symbol RTMPFreeAdapter [ 1011.616079] rt3070ap: Unknown symbol RtmpOSFSInfoChange [ 1011.616079] rt3070ap: Unknown symbol wlan_802_11_to_802_3_packet [ 1011.618201] rt3070ap: Unknown symbol RTMP_GetCurrentSystemTime [ 1011.618341] rt3070ap: Unknown symbol RTMPAllocateNdisPacket [ 1011.618498] rt3070ap: Unknown symbol RTMPSendWirelessEvent [ 1011.618621] rt3070ap: Unknown symbol RTMPL2FrameTxAction [ 1011.618747] rt3070ap: Unknown symbol rausb_kill_urb [ 1011.618899] rt3070ap: Unknown symbol RTMP_OS_Init_Timer [ 1011.619022] rt3070ap: Unknown symbol RTMPusecDelay [ 1011.619147] rt3070ap: Unknown symbol update_os_packet_info [ 1011.619312] rt3070ap: Unknown symbol RtmpOSFileRead [ 1011.619517] rt3070ap: Unknown symbol RtmpOSFileClose [ 1011.619641] rt3070ap: Unknown symbol RTMP_QueryPacketInfo [ 1011.619764] rt3070ap: Unknown symbol RtmpOSFileWrite |
在載入過程中若出現以下錯誤:
[421.461365] rt3070ap: module license 'RALINK' taints kernel. [421.461723] Disabling lock debugging due to kernel taint |
請修改UTIL/os/linux/usb_main_dev.c檔案,在檔案的開頭加上如下一行程式:
MODULE_LICENSE(“GPL”) |
重新編譯:
#make clean #make KBUILD_NOPEDANTIC=1 |
然後再重新下載,按順序載入模組即可成功。
模組載入成功後,用一下命令可檢視相關資訊:
#ifconfig –a eth0Link encap:EthernetHWaddr 3A:1F:34:08:54:54 BROADCAST MULTICASTMTU:1500Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B)TX bytes:0 (0.0 B) Interrupt:25 Base address:0xc000 loLink encap:Local Loopback inet addr:127.0.0.1Mask:255.0.0.0 UP LOOPBACK RUNNINGMTU:16436Metric:1 RX packets:8 errors:0 dropped:0 overruns:0 frame:0 TX packets:8 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:576 (576.0 B)TX bytes:576 (576.0 B) ra0Link encap:EthernetHWaddr 00:00:00:00:00:00 BROADCAST MULTICASTMTU:1500Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000
|