Linux-3.5 下WiFi移植

来源:互联网 发布:览物之情得无异乎翻译 编辑:程序博客网 时间:2024/06/05 15:53

环境:Linux-3.5,雷凌MT7601U模组网卡,tiny4412板子

一、 获得源码。

       网卡插开发板上(或者连入虚拟机,这个没有试过,感觉应该可以),在uboot命令行下,lsusb,就会出现WiFi的产品芯片,百度一下产品芯片,应该能知道该芯片用的是哪一个公司的模组,然后到对应模组公司下载Linux下的驱动源码,如本例子里是MT7601U,下完源码,在Linux下解压出来。

二、修改移植

   1. 首先在common/rtusb_dev_id.c文件中修改USB_DEVICE_ID rtusb_dev_id[],也就是增加所用产品芯片到module table 中,如果不知道在哪个文件中,可以建立一个source insight工程,然后搜索USB_DEVICE_ID关键字,排除一些文件应该就能够找你到响应的文件。在rtusb_dev_id[]中找到#ifdef MT7601U定义的地方,仿造别人的方法加一个自己的WiFi下信息,如增加{USB_DEVICE(0x148f,0x760b)}, /* MT 6370 */。

    2.有时候源码中会忘记关闭debug打印信息,这导致我们安装模块时,会不停的打印出调试信息,阻碍我们输入东西。可能不同的板子会打印出不同的信息,但是可以在source inside下搜索打印语气的地方,然后前后分析一下打印原因,就可以关闭debug。本例子中有一个地方需要关闭。也就是include/os/rt_linux.h中在
1558 后面加上两句话,变成如下:

1558 #include "os/rt_os.h"
1559 #undef DBGPRINT
1560 #define DBGPRINT(aa, arg ...)
1561 #endif /* __RT_LINUX_H__ */

      3. 打开REDME文件,或者类似文件,里面有移植介绍。虽然有可能更新跟不上,但是这是我们最好的帮助了。因为READEME文档很有可能更新跟不上产品,所有需要在参考过程中理性的去思考到底要不要去做这一步。这里需要修改:

PLATFORM = PC ,改成自己板子的类型,如果是三星的板子则改成PLATFORM = SMDK;

修改内核源码路径,和编译器类型。编译内核需要依赖源码,同时要交叉编译,这个需要去确认源码中所用的是否与自己实际用的板子一样,一般源码会默认设置成支持x86的。在当前文件中搜索CROSS_COMPILE,找到定义内核路径和交叉编译器的地方,改成自己实际要用的就好了。这里改成这样:

 ifeq ($(PLATFORM),SMDK)
 LINUX_SRC = /root、/linux-3.5、
CROSS_COMPILE = arm-linux-

 endif

    4.按照README文档找到os/linux/config.mk,将里面两处配置成:

HAS_WPA_SUPPLICANT=y

HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y
然后make,make之后如果没有什么错误,就好生成.ko文件,将这个文件复制到自己板子的文件系统上。这里是

cp os/linux/mt7601Usta.ko /root/work/home/

然后根据README文档复制配置文件到板子指定目录上,这里是

cp RT2870STA.dat /root/work/etc/Wireless/RT2870STA/
如果没有复制配置文件后面应该会有:

Could not set interface ra0 flags: Operation not permitted
Failed to initialize driver interface

这个错误。

到这里可以移植成功了,但是最好还要移植一些WiFi配置工具,让我们可以配置WiFi的工作模式。

   5. 可以移植wpa_supplicant和wireless_tools,他们有的是可执行文,有的是库,将可执行文件复制到板子/bin目录下(需要修改权限,使之具有可执行权限),库则复制到/lib目录下。

   6.安装模组,要是有打印错误无法分配内存,则有可能是一次要分配的内存太大,无法分配,这需要在bootargs中指定,可以在bootargs后面加上coherent_pool=2M

再次安装模块,幸运的话应该就成功了,这时插入usbwifi,然后用iwconfig命令查看网卡信息,看看是否有自己的WiFi信息。

要是有根据README提示,在

创建/etc/wpa_supplicant.conf 文件输入内容:

# WPA-PSK/TKIP
ctrl_interface=/var/run/wap_supplicant
ap_scan=1
update_config=1
network={
ssid="xxx" #WIFI网络名,根据自己的修改
key_mgmt=WPA-PSK
proto=WPA
pairwise=TKIP CCMP
group=TKIP CCMP
psk="ooooo" #WIFI密码,根据自己的修改
}

mkdir /var/run/wap_supplicant -p
wpa_supplicant -Dwext -ira0 -c /etc/wpa_supplicant.conf -B命令启动WiFi。

到这里差不多了。

后面配置ip既可以了

7. 配置ip

    ifconfig ra0 192.168.1.10(这里是你连接无线的网段) broadcast 192.168.1.255 netmask 255.255.0.0 up
    配置路由表,由于是无线网卡,这里的网关不要和有线网卡的一样,如果你的有限网卡网关是192.168.0.1,你的WiFi则要配成类似192.168.1(非0).1的网关。

   网关查看命令:route -n

  路由配置查看命令:iproute

  路由配置命令: route add default gw 192.168.1.1 

  设置好网关后,ping一下其他网站,如ping 119.75.218.77能通就说明可以上网了。

8、 如果要实现ping域名,则这么搞:

    创建/etc/resolv.conf 文件,内容:

nameserver 192.168.1.1
nameserver 8.8.8.8

……其他的域名解释服务器DNS







0 0