新聞中心

        EEPW首頁 > 電源與新能源 > 設計應用 > USB無線網卡的Linux驅動移植

        USB無線網卡的Linux驅動移植

        作者: 時間:2013-04-04 來源:網絡 收藏

        引言

        本文引用地址:http://www.104case.com/article/175406.htm

        COMFAST CF150NS USB無線網卡使用IEEE802.11n無線技術,無線傳輸速率最高達150 Mbps。相比傳統的54 Mbps IEEE802.11g產品,擁有更高的無線帶寬,讓局域網內的數據傳輸更加高效,能有效地減少網絡延遲,使語音視頻、網絡游戲、在線點播更流暢。CF150NS還使用了CCA(Clear Channel Assessment)空頻道檢測技術,在檢測到周邊有無線信號干擾時,可自動調整頻寬模式,避開信道干擾,使無線信號更加穩定。當干擾消失時,又可自動捆綁空閑信道,充分利用信道捆綁優勢,提升無線性能。CF150NS主要技術參數:主芯片Realtek 8188SU,接口USB2.0,頻率范圍為2.4~2.48 GHz,支持IEEE802.11n/g/b無線標準;無線速率最高可達150 Mbps(IEEE802.11n);工作模式AdHoc和Infrastructre可選;加密特性為64/128位WEP、WPA/WPA2、WPAPSK/WPA2PSK(TKIP/AES);支持的操作系統為Windows/Linux/Mac[1]。

        1 移植要求

        移植目標是在原有ARM監測系統的基礎上實現USB無線網卡功能擴展,為系統提供數據遠程無線采集方案。原ARM監測系統是在優龍YLE2440開發板上開發的,其Linux內核版本為2.6.12.7。USB無線網卡是外部無線網絡系統提供的指定產品COMFAST CF150NS,其主芯片Realtek 8188SU的Linux內核版本要求是2.6.18~2.6.33。也就是說,整個移植過程要求USB無線網卡驅動必須是Realtek 8188SU,且工作環境是Linux2.6.12.7。Realtek公司對8188SU主芯片驅動提供的建議是PC機Fedora Linux 2.6.24測試通過。經測試,若直接將驅動使用Linux 2.6.12.7內核編譯,將出現大量錯誤。如何將驅動移植到Linux 2.6.12.7還需要進一步研究。

        2 移植過程

        2.1 移植環境搭建

        移植過程采用VM虛擬機下安裝RedHat9.0來完成。具體配置:PC操作系統為VMware Workstation5.5 RedHat 9.0(Linux 2.4.20);硬件為優龍YLE2440開發板;操作系統為Linux 2.6.12.7,安裝位置為/test/yle2440_2.6.12;交叉編譯器為gcc3.4.1,安裝位置為/usr/local/arm/3.4.1/bin/;Busybox安裝位置為/test/busybox;文件系統為/test/rootfs/;文件系統生成工具為mkcramfs;USB無線網卡驅動源碼為/test/8188su/driver/8188su;無線管理工具wirelesstools為/test/wireless_tools.29.tar.gz。另外,還需要準備Linux 2.6.24內核[2]。

        2.2 Linux內核配置[3]

        進入內核安裝目錄/test/yle2440_2.6.12,運行內核配置:

        [root@localhost test]# make menuconfig

        (1) 增加WLAN支持

        選擇[Device Driver]→[Networking support]→[Wireless LAN (nonhamradio)]→[Wireless LAN drivers (nonhamradio) Wireless Extensions]。

        (2) 增加DHCP支持

        選擇[Device Driver]→[Networkingsupport]→[Networking options]。務必選中“Packet socket”和“IP: DHCP support”、“Network packet filtering framework(Netfilter)”選項。

        另外,還需要udhcpc的配置文件。拷貝Busybox目錄/examples/udhcp下的simple.script到文件系統/usr/share/udhcpc/下,并重命名為default.script。將default.script中的

        RESOLV_CONF=/etc/resolv.conf

        修改為

        RESOLV_CONF=/tmp/resolv.conf

        運行“mkcramfs rootfs rootfs.cramfs”生成根文件系統rootfs.cramfs,并重新下載到目標板。

        2.3 Linux內核文件修改

        首先將Linux2.6.24內核中的netdevice.h、wireless.h、iw_handler.h拷貝至Linux2.6.12內核相應目錄下。然后以Linux2.6.24內核為藍本進行文件建立、修改和替換。需要替換的文本清單為:

        ① /include/linux/目錄,wireless.h、skbuff.h、textsearch.h、netdevice.h、slab.h、ip.h、icmp.h、socket.h;

        ② /include/net/目錄,iw_handler.h、sock.h;

        ③ /include/sound/目錄,core.h;

        ④ /net/core/目錄,dev.c、skbuff.c、wireless.c、neighbour.h;

        ⑤ /net/ipv4/目錄,ip_output.c、devinet.c、socket.c;

        ⑥ /net/netlink目錄,af_netlink.c;

        ⑦ /mm/目錄,slab.c。

        文件替換完畢進行內核編譯:

        make zImage

        生成內核zImage后下載到目標板。在內核編譯的過程中,還會出現許多錯誤,主要是C90語法錯誤、所調用函數數據類型不匹配、段符號未定義等問題。主要的修改內容:

        ① 內核編譯時若出現C90語法和C99語法錯誤,只需按照本編譯系統所采用的編譯標準進行語法修改。例如,/net/core/dev.c中函數“net_rx_action”的第1713~1729行提示有語法錯誤。其中,第1713行的錯誤按照C90語法修改即可消除,其他錯誤為所調用函數數據類型不匹配所致,修改所調用函數的數據類型即可。

        ② 出現提示“.data=no_cong_thresh”未定義之類的錯誤時,在相應源碼中將其注釋即可。

        ③ Wireless_seq_show函數錯誤直接采用2.6.24版本替換2.6.12版本即可。

        ④ net_sysctl_strdup類錯誤和警告一定要消除,消除方法是替換neighbour.h文件及相關文件。

        2.4 USB無線網卡驅動編譯

        首先,下載主芯片Realtek 8188SU的最新驅動RTL8188SU_usb_linux_v2.6.6.0.20101111.zip,然后解壓進入相應目錄修改config、Makefile文件。

        (1) 修改config

        [root@localhost 8188su]# gvim config

        修改第16行,關閉PC模式:

        16 CONFIG_PLATFORM_I386_PC=n

        修改第18行,打開ARM模式

        18 CONFIG_PLATFORM_ARM_S3C=y

        (2) 修改Makefile

        修改交叉編譯器和ARM內核安裝目錄:

        [root@localhost 8188su]# gvim Makefile

        修改第94行為gcc交叉編譯器所在路徑:

        CROSS_COMPILE:=/usr/local/arm/3.4.1/bin/armlinux

        修改第95行,直接注釋掉以下語句:

        #KVER:= 2.6.24.7_$(ARCH)

        修改第96行,指定2.6.12內核路徑:

        KSRC:= /test/yle2440_2.6.12

        修改完畢后,直接make即可在目錄下生成8712u.ko。下載8712u.ko驅動到目標板。

        2.5 安裝wirelesstools[3]

        無線網卡配置需要使用一些無線網絡管理工具,如wpa_supplicant、wirelesstools等。本項目使用wirelesstools來實現。首先下載wireless_tools.29.tar.gz,然后解壓、編譯、安裝。 下面介紹具體步驟。

        ① 解壓。

        tar zxvf wireless_tools.29.tar.gz

        ② 修改Makefile。

        修改第8行,設置可執行文件安裝路徑:

        PREFIX=/usr/local/wireless

        修改第12行,設置gcc交叉編譯器:

        CC=/usr/local/arm/3.4.1/bin/armlinuxgcc

        修改第15行,設置ar交叉編譯器:

        AR=/usr/local/arm/3.4.1/bin/armlinuxar

        修改第16行,設置ranlib交叉編譯器:

        RANLIB=/usr/local/arm/3.4.1/bin/armlinuxranlib

        ③ 運行make命令。

        ④ 運行make install命令。可執行文件安裝于/usr/local/wireless目錄下。

        ⑤ 拷貝兩個庫libiw.so和libiw.so.29到文件系統/test/rootfs/lib目錄下,運行chmod 777命令后重新生成壓縮根文件rootfs.cramfs,并下載到ARM板。

        linux相關文章:linux教程



        上一頁 1 2 下一頁

        關鍵詞:

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 隆尧县| 亳州市| 鹤峰县| 合阳县| 闸北区| 蒲城县| 浦江县| 望谟县| 平陆县| 德庆县| 云林县| 丰城市| 上思县| 博客| 荆州市| 东源县| 县级市| 牟定县| 韩城市| 珠海市| 平顶山市| 长乐市| 菏泽市| 灵寿县| 天柱县| 沾化县| 文水县| 察雅县| 庐江县| 门源| 新津县| 清水河县| 九龙县| 桐庐县| 西乡县| 安新县| 寻乌县| 元谋县| 彰化市| 徐闻县| 息烽县|