FL2440无线路由器制作---RT3070 STA模式

本文详细介绍了如何在FL2440平台上添加RT3070无线网卡,实现STA模式的无线上网功能。包括内核配置、wpa_supplicant移植、wireless_tools和OpenSSL的整合,以及启动wpa_supplicant进行网络连接和配置。通过这些步骤,使得FL2440具备了无线连接的能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

FL2440RT3070线STA F L 2440 添 加 R T 3070 实 现 无 线 上 网 功 能 − − − S T A 模 式

>>>STAwpa_supplicant >>> 想 要 让 网 卡 设 备 成 为 S T A , 就 要 移 植 w p a _ s u p p l i c a n t

rtl30703070usb线MAC/BBP2.4GRF300Mbps r t l 3070 的 中 文 名 为 雷 凌 3070 , 是 台 湾 雷 凌 科 技 有 限 公 司 生 产 的 一 款 专 用 于 u s b 无 线 网 卡 的 处 理 芯 片 , 是 一 种 低 功 耗 高 度 集 成 的 M A C / B B P 和 2.4 G R F 单 一 芯 片 , 支 持 300 M b p s 的 吞 吐 量 。

RT3070线STAAPSTAAP R T 3070 无 线 网 卡 有 两 种 工 作 模 式 S T A 模 式 和 软 A P 模 式 , 分 别 由 S T A 驱 动 和 软 A P 驱 动 来 实 现 。 ​

APAP 软 A P 即 软 件 完 成 A P 功 能 。

FL2440使DM9000USBDM9000线 基 于 F L 2440 上 面 已 经 使 能 的 D M 9000 有 限 网 卡 和 U S B 驱 动 , 可 以 试 用 D M 9000 网 卡 实 现 介 入 网 线 实 现 上 网 功 能 。

查看网卡芯片支持的频率:802.11

​ Linux的内核对于RT3070的驱动已经比较完善,只需要修改增加内核对RT3070的支持便可以实现无线上网功能。

makemeunconfigwireless线 一 、 添 加 m a k e m e u n c o n f i g 选 项 支 持 w i r e l e s s 无 线 上 网

现在开始在Linux-3.0内核中添加支持:
[yan@localhost linux-3.0]$ export TERM=vt100
[yan@localhost linux-3.0]$ make meunconfig
[*] Networking support  --->  
            -*-   Wireless  --->  
                         <*>   cfg80211 - wireless configuration API                              //支持无线网段802.11
                         [*]     enable powersave by default  
                         [*]     cfg80211 wireless extensions compatibility
                         [*]   Wireless extensions sysfs files  
                         {*}   Common routines for IEEE802.11 drivers
                         <*>   Generic IEEE 802.11 Networking Stack (mac80211)
             [ ]   Enable mac80211 mesh networking (pre-802.11s) support    
             [ ]   Enable LED triggers 
             [ ]   Select mac80211 debugging features  --->         

Device Drivers  --->
            Generic Driver Options  --->
                        {*} Userspace firmware loading support                                        //支持固件,rt2870.bin
                        [*]   Include in-kernel firmware blobs in kernel binary
            [*] Network device support  --->  
                        [*]   Wireless LAN  --->  
                                    <*>   Ralink driver support  --->
                                            <*>   Ralink rt27xx/rt28xx/rt30xx (USB) support
                                            [*]     rt2800usb - Include support for rt33xx devices  
                                            [*]   Ralink debug output
重新编译、下载、烧录、开机:
[fl2440@uboot]# tftp 30008000 linuxrom-s3c2440.bin
[fl2440@uboot]# nand erase 100000 F00000
[fl2440@uboot]# nand write 30008000 100000 400000

或者
[fl2440@uboot]# set blx 'tftp 30008000 linuxrom-s3c2440.bin;nand erase 100000 F00000;nand write 30008000 100000 $fliezize'
[fl2440@uboot]# run blx

没有插入无线网卡设备,查看当前内核已有的网卡设备信息。由信息可知,没有wlan0,没有无线设备。

~ >: ifconfig -a

这里写图片描述

现在插入无线网卡设备RT3070后,重新启动开发板,会打印USB设备信息,插入不同的USB位置,会有不同。

这里写图片描述

输入ifconfig -a查看所有网卡设备信息:

这里写图片描述

​ 为什么网卡还没有出现,但是USB已经识别了。
想了一下是不是没有USB驱动?我去找了一下:添加USB驱动
USB驱动添加后,wlan0终于找到:

这里写图片描述

线wirelesstoolswpa_supplicantOpenSSL 二 、 无 线 网 络 配 置 工 具 w i r e l e s s t o o l s 和 w p a _ s u p p l i c a n t 以 及 O p e n S S L 移 植

​ 目前可以使用wireless-tools或wpa_supplicant工具来配置无线网络。但要注意对无线网络的配置是全局性的,而非针对具体的接口。wpa_supplicant是一个较好的选择,但缺点是它不支持所有的驱动。 另外,wpa_supplicant目前只能连接到那些你已经配置好ESSID的无线网络。而wireless-tools支持几乎所有的无线网卡和驱动,但它不能连接到那些只支持WPA的AP。

Wireless Tools移植

#下载源码,解压源码
[yan@localhost wireless]$ wget https://hewlettpackard.github.io/wireless-tools/wireless_tools.29.tar.gz

#修改Makefile
11   ## Compiler to use (modify this for cross compile).
12   CC = /opt/xtools/arm920t/bin/arm-linux-gcc
13   ## Other tools you need to modify for cross compile (static lib only).
14   AR = /opt/xtools/arm920t/bin/arm-linux-ar
15   RANLIB = /opt/xtools/arm920t/bin/arm-linux-ranlib

#编译
[yan@localhost wireless]$ make

这里写图片描述

复制这8个文件到开发板上的/bin//lib/,并赋予权限chmod a+x {file}

这里写图片描述

Openssl移植
#下载源码,解压源码
[yan@localhost wireless]$ wget https://www.openssl.org/source/old/0.9.x/openssl-0.9.8i.tar.gz

[yan@localhost openssl-0.9.8i]$ mkdir install
#修改Makefile
29   INSTALLTOP=/home/yan/FL2440_openfile/3rdparty/wireless/openssl-0.9.8i/install
32   OPENSSLDIR=/home/yan/FL2440_openfile/3rdparty/wireless/openssl-0.9.8i/install
62   CC=/opt/xtools/arm920t/bin/arm-linux-gcc
69   AR=/opt/xtools/arm920t/bin/arm-linux-ar $(ARFLAGS) r
70   RANLIB=/opt/xtools/arm920t/bin/arm-linux-ranlib

#编译、安装
[yan@localhost openssl-0.9.8i]$ make      #make 和 make install 一起会错误不知道是为什么
[yan@localhost openssl-0.9.8i]$ make install

这里写图片描述

复制libcrypto.alibssl.a到开发板上的/lib/,并赋予权限

wpa_supplicant移植
#下载源码,解压源码
[yan@localhost wireless]$ wget http://hostap.epitest.fi/releases/wpa_supplicant-0.7.3.tar.gz
[yan@localhost wireless]$ cd wpa_supplicant-0.7.3/wpa_supplicant

#修改配置文件
[yan@localhost wpa_supplicant]$ cp defconfig .config        //.config才是将要执行的菜单文件
26   #CC=mipsel-uclibc-gcc
27   #CC=/opt/brcm/hndtools-mipsel-uclibc/bin/mipsel-uclibc-gcc
28   #使用交叉编译器编译,并-L指定库的路径为刚刚安装的openssl
29   CC=/opt/xtools/arm920t/bin/arm-linux-gcc -L/home/yan/FL2440_openfile/3rdparty/wireless/openssl-0.9.8i/install/lib
30   #CFLAGS += -Os
31   #-I指定链接库的名字
32   CFLAGS += -I/home/yan/FL2440_openfile/3rdparty/wireless/openssl-0.9.8i/install/include
33   #CPPFLAGS += -I../src/include -I../../src/router/openssl/include
34   #LIBS += -L/opt/brcm/hndtools-mipsel-uclibc-0.9.19/lib -lssl
35   LIBS += /home/yan/FL2440_openfile/3rdparty/wireless/openssl-0.9.8i/install/lib

#编译
[yan@localhost wpa_supplicant]$ make

这里写图片描述

将编译生成的如下文件,复制到开发板上的/bin/

1、wpa_cli

2、wpa_passphrase 生成配置文件

3、wpa_supplicant 连接wifi命令

将编译生成的如下文件,复制到开发板上的/bin/下1、wpa_cli2、wpa_passphrase 生成配置文件3、wpa_supplicant 连接wifi命令
#wpa_supplicant.conf配置文件保留着需要连接AP的SSID和key等信息,可以使用wpa_supplicant.conf一键生成
#Router_Link是我将要连接的路由器的SSID
#helloworld是SSID为Router_Link的路由器认证密码
~ >: wpa_passphrase Router_Link helloworld>> /etc/wpa_supplicant.conf

#修改wpa_supplicant.conf
/etc >: vim wpa_supplicant.conf
#ctrl_interface_group=wheel
ctrl_interface=/var/run/wpa_supplicant

network={
        ssid="Router_Link"
        key_mgmt=WPA-PSK      #Using WPA-PSK encryption mode
        proto=WPA2                           
        group=TKIP CCMP                  
        pairwise=TKIP CCMP    #Automatic matching encryption algorithm: TKIP 或 CCMP
        psk="helloworld"                      #Router password
        #psk=e4b06c8c07884f29176d1f87925ca411047d867bdbd1b88906d7fabc45575aad
}

#此时启用wpa_supplicant会报错,错误原因是:缺少Loading firmware file 'rt2870.bin'.
/etc >: wpa_supplicant -B -d -Dwext -i wlan0 -c /etc/wpa_supplicant.conf
Initializing interface 'wlan0' conf '/etc/wpa_supplicant.conf' driver 'wext' ctrl_interface 'N/A' bridge 'N/A'
Configuration file '/etc/wpa_supplicant.conf' -> '/etc/wpa_supplicant.conf'
Reading configuration file '/etc/wpa_supplicant.conf'
ctrl_interface='/var/run/wpa_supplicant'
Priority group 0
   id=0 ssid='Router_LingYun_Master'
WEXT: cfg80211-based driver detected
phy0 -> rt2x00lib_request_firmware: Info - Loading firmware file 'rt2870.bin'.
phy0 -> rt2x00lib_request_firmware: Error - Failed to request Firmware.
Could not set interface wlan0 flags: No such file or directory
Failed to initialize driver interface
Failed to add interface wlan0
Cancelling scan request
Cancelling authentication timeout

#使能网卡模块也会报错,错误原因是:缺少Loading firmware file 'rt2870.bin'.
~ >: ifconfig wlan0 up
phy0 -> rt2x00lib_request_firmware: Info - Loading firmware file 'rt2870.bin'.
phy0 -> rt2x00lib_request_firmware: Error - Failed to request Firmware.
ifconfig: SIOCSIFFLAGS: No such file or directory
复制firmware
#下载固件
[yan@localhostwireless]$ wget https://coding.net/u/sfantree/p/self_use_OSS/git/raw/master/source/rt2870.bin

#复制到开发板上
/lib/firmware >: ls
rt2870.bin
使能网卡
#使能网卡
~ >: ifconfig wlan0 up
usb 1-1.3: USB disconnect, device number 4
usb 1-1.3: new full speed USB device number 5 using s3c2410-ohci
phy2 -> rt2x00_set_chip: Info - Chipset detected - rt: 3070, rf: 0005, rev: 0201.
phy2 -> rt2x00lib_request_firmware: Info - Loading firmware file 'rt2870.bin'.
phy2 -> rt2x00lib_request_firmware: Info - Firmware detected - version: 0.29.
phy2 -> rt2x00mac_conf_tx: Info - Configured TX queue 0 - CWmin: 3, CWmax: 4, Aifs: 2, TXop: 102.
phy2 -> rt2x00mac_conf_tx: Info - Configured TX queue 1 - CWmin: 4, CWmax: 5, Aifs: 2, TXop: 188.
phy2 -> rt2x00mac_conf_tx: Info - Configured TX queue 2 - CWmin: 5, CWmax: 10, Aifs: 3, TXop: 0.
phy2 -> rt2x00mac_conf_tx: Info - Configured TX queue 3 - CWmin: 5, CWmax: 10, Aifs: 7, TXop: 0.
phy2 -> rt2x00mac_conf_tx: Info - Configured TX queue 2 - CWmin: 4, CWmax: 10, Aifs: 3, TXop: 0.
phy2 -> rt2x00mac_conf_tx: Info - Configured TX queue 3 - CWmin: 4, CWmax: 10, Aifs: 7, TXop: 0.
phy2 -> rt2x00mac_conf_tx: Info - Configured TX queue 1 - CWmin: 3, CWmax: 4, Aifs: 2, TXop: 94.
phy2 -> rt2x00mac_conf_tx: Info - Configured TX queue 0 - CWmin: 2, CWmax: 3, Aifs: 2, TXop: 47.

~ >: ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:3E:26:0A:5B  
          inet addr:192.168.2.5  Bcast:192.168.2.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:11508 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10935 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:6177465 (5.8 MiB)  TX bytes:503291 (491.4 KiB)
          Interrupt:51 Base address:0x6300

wlan0     Link encap:Ethernet  HWaddr 00:A1:B0:40:6F:1E  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:23 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:6769 (6.6 KiB)  TX bytes:443 (443.0 B)

网卡已经激活, 但目前未网络参数配置。

启动wpa_supplicant,激活wlan0
~ >: wpa_supplicant -B -d -Dwext -i wlan0 -c /etc/wpa_supplicant.conf
Initializing interface 'wlan0' conf '/etc/wpa_supplicant.conf' driver 'wext' ctrl_interface 'N/A' bridge 'N/A'
Configuration file '/etc/wpa_supplicant.conf' -> '/etc/wpa_supplicant.conf'
Reading configuration file '/etc/wpa_supplicant.conf'
ctrl_interface='/var/run/wpa_supplicant'
Priority group 0
   id=0 ssid='Router_LingYun_Master'
WEXT: cfg80211-based driver detected
phy0 -> rt2x00lib_request_firmware: Info - Loading firmware file 'rt2870.bin'.
phy0 -> rt2x00lib_request_firmware: Info - Firmware detected - version: 0.29.
phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 0 - CWmin: 3, CWmax: 4, Aifs: 2, TXop: 102.
phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 1 - CWmin: 4, CWmax: 5, Aifs: 2, TXop: 188.
phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 2 - CWmin: 5, CWmax: 10, Aifs: 3, TXop: 0.
phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 3 - CWmin: 5, CWmax: 10, Aifs: 7, TXop: 0.
SIOCGIWRANGE: WE(compiled)=22 WE(source)=21 enc_capa=0xf
  capabilities: key_mgmt 0xf enc 0xf flags 0x0
netlink: Operstate: linkmode=1, operstate=5
Own MAC address: 00:a1:b0:40:6f:1e
wpa_driver_wext_set_key: alg=0 key_idx=0 set_tx=0 seq_len=0 key_len=0
wpa_driver_wext_set_key: alg=0 key_idx=1 set_tx=0 seq_len=0 key_len=0
wpa_driver_wext_set_key: alg=0 key_idx=2 set_tx=0 seq_len=0 key_len=0
wpa_driver_wext_set_key: alg=0 key_idx=3 set_tx=0 seq_len=0 key_len=0
wpa_driver_wext_set_countermeasures
RSN: flushing PMKID list in the driver
Setting scan request: 0 sec 100000 usec
EAPOL: SUPP_PAE entering state DISCONNECTED
EAPOL: Supplicant port status: Unauthorized
EAPOL: KEY_RX entering state NO_KEY_RECEIVE
EAPOL: SUPP_BE entering state INITIALIZE
EAP: EAP entering state DISABLED
EAPOL: Supplicant port status: Unauthorized
EAPOL: Supplicant port status: Unauthorized
Added interface wlan0
Daemonize..
~ >: phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 2 - CWmin: 4, CWmax: 10, Aifs: 3, TXop: 0.
phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 3 - CWmin: 4, CWmax: 10, Aifs: 7, TXop: 0.
phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 1 - CWmin: 3, CWmax: 4, Aifs: 2, TXop: 94.
phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 0 - CWmin: 2, CWmax: 3, Aifs: 2, TXop: 47.
查看当前网卡信息
~ >: ifconfig
eth0      Link encap:Ethernet  HWaddr 66:D8:26:8A:DA:F9  
          inet addr:192.168.1.250  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:64 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:6232 (6.0 KiB)  TX bytes:0 (0.0 B)
          Interrupt:51 Base address:0x6300

wlan0     Link encap:Ethernet  HWaddr 00:A1:B0:40:6F:1E  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:19 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:6178 (6.0 KiB)  TX bytes:443 (443.0 B)

由于还没有开启DHCP,所以需要手动分配IP等各种配置,这里配置由你的网络环境决定。

配置IP地址
~ >: ifconfig wlan0 192.168.3.211
~ >: ifconfig
eth0      Link encap:Ethernet  HWaddr 66:D8:26:8A:DA:F9  
          inet addr:192.168.1.250  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:67 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:6520 (6.3 KiB)  TX bytes:0 (0.0 B)
          Interrupt:51 Base address:0x6300

wlan0     Link encap:Ethernet  HWaddr 00:A1:B0:40:6F:1E  
          inet addr:192.168.3.211  Bcast:192.168.3.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:55 errors:0 dropped:2 overruns:0 frame:0
          TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:15313 (14.9 KiB)  TX bytes:443 (443.0 B)
配置默认网关和DNS
~ >: route add default gw 192.168.3.1
~ >: echo "nameserver 114.114.114.114" > /etc/resolv.conf
~ >: ifconfig
eth0      Link encap:Ethernet  HWaddr 66:D8:26:8A:DA:F9  
          inet addr:192.168.1.250  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:91 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:8824 (8.6 KiB)  TX bytes:0 (0.0 B)
          Interrupt:51 Base address:0x6300

wlan0     Link encap:Ethernet  HWaddr 00:A1:B0:40:6F:1E  
          inet addr:192.168.3.211  Bcast:192.168.3.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:155 errors:0 dropped:34 overruns:0 frame:0
          TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:29699 (29.0 KiB)  TX bytes:443 (443.0 B)
ping测试
~ >: ping baidu.com
PING baidu.com (220.181.57.216): 56 data bytes
64 bytes from 220.181.57.216: seq=0 ttl=44 time=325.000 ms
64 bytes from 220.181.57.216: seq=1 ttl=44 time=335.000 ms
64 bytes from 220.181.57.216: seq=2 ttl=44 time=185.000 ms

网卡成功联网,网卡芯片快速闪烁

这里写图片描述

使能DHCP服务

上面只能手动配置ip,现在开启DHCP服务,使其自动获取IP地址。

busybox已经集成了DHCP的客户端和服务端,源码编译过后的examples/udhcpc/simple.script作为DHCP客户端的示例配置文件如下,将其重命名为/usr/share/udhcpc/default.script,特别注意必须给default.script可执行权限。

/usr/share/udhcpc >: vim default.scrupt
#!/bin/sh
# udhcpc script edited by Yanhuan

RESOLV_CONF="/etc/resolv.conf"

[ -n "$1" ] || { echo "Error: should be called from udhcpc"; exit 1; }

NETMASK=""
[ -n "$subnet" ] && NETMASK="netmask $subnet"
BROADCAST="broadcast +"
[ -n "$broadcast" ] && BROADCAST="broadcast $broadcast"

case "$1" in
    deconfig)
        echo "Setting IP address 0.0.0.0 on $interface"
        ifconfig $interface 0.0.0.0
        ;;

    renew|bound)
        echo "Setting IP address $ip on $interface"
        ifconfig $interface $ip $NETMASK $BROADCAST

        if [ -n "$router" ] ; then
            echo "Deleting routers"
            while route del default gw 0.0.0.0 dev $interface ; do
                :
            done

            metric=0
            for i in $router ; do
                echo "Adding router $i"
                route add default gw $i dev $interface metric $((metric++))
            done
        fi

        echo "Recreating $RESOLV_CONF"
        echo -n > $RESOLV_CONF-$$
        [ -n "$domain" ] && echo "search $domain" >> $RESOLV_CONF-$$
        for i in $dns ; do
            echo " Adding DNS server $i"
            echo "nameserver $i" >> $RESOLV_CONF-$$
        done
        mv $RESOLV_CONF-$$ $RESOLV_CONF
        ;;
esac

exit 0
~ >: ls /usr/share/udhcpc/
default.script
~ >: udhcpc -i wlan0
udhcpc: started, v1.27.1
udhcpc: sending discover
udhcpc: sending select for 192.168.3.136
udhcpc: sending select for 192.168.3.136
udhcpc: lease of 192.168.3.136 obtained, lease time 86400
#成功

执行udhcpc -i wlan0之后即可自动获取IP,执行这个命令后udhcpc会以守护进程方式在后台运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值