wifi模块:marvell-8686

基于2.6.35内核的SDIO-WiFi驱动移植

作者:冯利美,华清远见嵌入式学院讲师。

一、 移植环境:

        【移植环境】

        1、 主机:Ubuntu 10.10发行版

        2、 目标机:FS_S5PC100平台

        3、 交叉编译工具:arm-none-linux-gnueabi-4.5.1

        4、wifi模块:marvell-8686

        5、Linux文件系统:rootfs.3g.wifi.tar.bz2

        6、内核:linux-2.6.35-farsigt

二、 在linux下的移植

        1. 平台代码修改

        driver/mmc/host/sdhci.c

        屏蔽以下代码

        629行 printK (KERN_WARING "%s: too large timeout requested!\n", mmc_hostname(host_>mmc));

        2. 内核驱动支持

        因为S5PC100平台上SDIO功能已经支持,所以只需要内核驱动支持marvell-8686即可。
                [*] Networking support --->
                        [*] Wireless --->
                        <*> cfg80211 - wireless configuration API
                        {*} common routines for IEEE 802.11 drivers
                Device Drivers --->
                [*] Network device support --->
                        Wireless LAN --->
                                <*>Marvell 8xxx Libertas WLAN driver support
                                <*> Marvell Libertas 8385/8686/8688 SDIO 802.11b/g cards
                 Generic Driver Options --->
                        (sd8686.bin sd8686_helper.bin) External firmware blobs to build into the kernel (firmware) Firmware blobs root directory

        3. 内核的修改

        文件arch/arm/mach-s5pc100/mach-smdkc100.c有内核的分区, 把第2个分区改成8M。

        因为生成的文件系统太大,大于4M。

        4. 固件准备

        将固件sd8686.bin和sd8686_helper.bin拷贝到linux-2.6.35/firmware下。编译时会自动编译进内核。
                $ make zImage
                $ sudo cp zImage /tftpboot

三、 文件系统的制作

        1. wpa_suppicant的移植

        源码版本选择:
                wpa_supplicant-0.7.2
                openssl-0.9.8e
                openssl移植:

        a、补丁安装
                openssl源码编译需要打wpa_supplicant提供的补丁,我们选择的openssl版本为openssl-0.9.8e所以我们需要wpa_supplicant-0.7.2/patches/openssl-0.9.8e-tls-extensions.patch拷贝到openssl源码下。
                patch -p1 < openssl-0.9.8e-tls-extensions.patch

        b、配置编译安装
                ./Configure linux-elf-arm -DL_ENDIAN linux:'arm-none-linux-gnueabi-gcc' shared --prefix=/home/linux/workdir/wifi/openssl
                 make
                make install

        wpa_supplicant移植:
                在/wpa_supplicant-0.7.2/wpa_supplicant目录下

        a、makefile修改

        添加
                CC=arm-unknown-linux-gnueabi-gcc//自己的交叉编译工具

                在
                CFLAGS += -I../src
                CFLAGS += -I../src/utils
                下添加:
                CFLAGS += -I/home/linux/workdir/wifi/openssl/include

        修改
                LIBS += -lssl
                为
                 LIBS += -lssl -L/home/linux/workdir/wifi/openssl/lib/

        修改
                LIBS_p += -lcrypto
                为
                 LIBS_p += -lcrypto -L/home/linux/workdir/wifi/openssl/lib/

        b、编译
                 cp deconfig .config
                make

        编译后将生产的wpa_supplicant和wpa_cli拷贝到根文件系统的bin目录下

        2. 文件系统的制作

        由于2.6.35的内核不支持yaffs文件系统,而cramfs是只读文件系统,所以选择了jffs文件系统,命令如下:
                $ mkfs.jffs2 -r /source/rootfs -o rootfs.jffs2 -e 0x20000 --pad=0x600000 -n
                $ sudo cp rootfs.jffs2 /tftpboot

        考虑到最终生成的文件系统比较大(5M多),--pad用的600000

四、 测试

        1. 移植u-boot

        关闭开发板电源,将拨码开关SW1调至0001(usb启动模式)后打开电源

        a) 加载运行USB Installer_DDR2.bin

        USB Port → Transmit → Transmit,选中image目录下的USB Installer_DDR2.bin

wifi模块:marvell-8686_第1张图片

        b) 加载运行u-boot-v45.0.bin

        USB Port ? Transmit ? Transmit,选中FS_S5PC100光盘v4.5\Linux-Android\image目录下的u-boot-v45.0.bin

        串口终端下能看到如下内容(如果有倒计时数字,按任意键出现提示符)

wifi模块:marvell-8686_第2张图片

        c)设置并保存环境变量
                # printenv // 查看环境变量的值并按如下设置
                # setenv baudrate 115200
                # setenv ethaddr 11:22:33:44:55:66
                # setenv gatewayip 192.168.1.1
                # setenv serverip 192.168.1.237 // serverip要和虚拟机的ip相同
                # setenv ipaddr 192.168.1.223 // ipaddr也可以是192.168.1.x其他值
                # setenv netmask 255.255.255.0

        保存环境变量
                # saveenv

        d) 烧写u-boot-v45.0.bin到nand flash起始地址
                # tftp 20008000 u-boot-v45.0.bin
                # nand erase 0 40000;
                 # nand write 20008000 0 40000

        2. 移植内核
                # tftp 20008000 zImage
                # nand erase 100000 300000
                # nand write 20008000 100000 300000

        3. 移植jffs2文件系统
                 # tftp 20008000 rootfs.jffs2
                # nand erase 400000 800000
                # nand write 20008000 400000 800000

        4. 设置启动参数
                # setenv bootdelay 3
                # setenv bootcmd nand read 20008000 100000 300000\; bootm 20008000
                # setenv bootargs root=/dev/mtdblock2 init=/linuxrc rootfstype=jffs2 rw
                console=ttySAC0,115200
                 # boot

五、 WIFI模块的测试

        1. 在根文件中添加/etc/resolv.conf,域名解析。

        内容为:
                # Generated by NetworkManager
                nameserver 8.8.8.8

        2. 在根文件系统/etc下添加wpa_supplicant配置文件wpa_supplicant.conf内容为:

        # WPA-PSK/TKIP
                 ctrl_interface=/var/run/wpa_supplicant
                network={
                ssid="XXXX" #无线路由ssid
                key_mgmt=WPA-PSK
                proto=WPA
                pairwise=TKIP
                group=TKIP
                psk="XXXXXXXX" #无线路由密码
                }

        3. 创建目录/var/run/wpa_supplicant
                mkdir /var/run/wpa_supplicant -p

        4. 启动开发板完成如下操作

        ● 配置无线网卡ip
                ifconfig wlan0 192.168.1.200

wifi模块:marvell-8686_第3张图片

        ● 配置默认网关
                route add default gw 192.168.1.1

        ● 启动wpa_supplicant连接无线网络
                wpa_supplicant -B -iwlan0 -c /etc/wpa_supplicant.conf

        ● 查看连接状态
                wpa_cli status

wifi模块:marvell-8686_第4张图片

        ping 220.181.111.147

wifi模块:marvell-8686_第5张图片

        ping www.youku.com.cn

 

 

 

 

开发板的TFTP、NFS等网络功能神奇消失和ubuntu 开机禁用无线网卡

分类: 嵌入式linux系统移植 524人阅读 评论(1) 收藏 举报

转载请注明 http://www.linuxforum.net/ [email protected] sailing

问题来源:
主机端已经设置好了TFTP,以前能用,最近突然不能用
TFTP from server 192.168.0.12; our IP address is 192.168.0.15
Filename 'ulmage'.
Load address: 0x21000000
Loading:T T T T T T T T T T T T 。。。。。
Retry count exceeses ;starting again

我通过flash启动,进入系统可以更改MAC,也可以配置IP,提示成功
[root@AT91RM9200DK /root]$ifconfig
eth0 Link encap:Ethernet HWaddr 00:E0:4C:4D:8D:5E
inet addr:192.168.0.14 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
但是ping不通主机,这个时候板子上网络的一个灯在闪烁,应该是正在发送数据
相关情况可见
http://www.linuxforum.net/forum/showflat.php?Cat=&Board=embedded&Number=646034&fpart=1&PHPSESSID=


也就是说不管是U-boot通过TFTP与主机通信下载内核印象还是进入系统后ping主机或者通过NFS加载主机上的文件,此时,以前可用的网络功能现在都不能用了

为什么呢?更神奇的是板子拿到别人机子上就可以用了,证明硬件没问题
网线拿到别的开发板上用别人的机子也没问题
主机ping局域网内的机器也没问题
开发板网络硬件、主机网络接口、网线都没问题,可为什么TFTP无法下载呢,为什么无法加载NFS?就怪了!?

折腾好几天,又有坛子里朋友们的支持,终于搞定了这个问题,在此感谢nxin和vxworks帮我排除了板子本身的硬件问题,才让我想到了无线接口的问题

小弟正从事无线网卡在ARM平台上的移植工作,希望与大家多交流共同提高

其实问题的本质就是最近我刚安装好了无线网卡的驱动,现在主机有两个网络接口,无线网络接口优先,因此板子的TFTP及NFS功能都被限制了,根本办法windows下杀死无线网卡驱动的进程,Linux下关闭无线网卡的驱动,保证只有eth0接口

详细过程如下:
一、配置以太网eth0及Lo,确定板子硬件无误
[root@AT91RM9200DK /root]$ifconfig eth0 192.168.0.14
eth0: Link now 100-FullDuplex
[root@AT91RM9200DK /root]$ifconfig
eth0 Link encap:Ethernet HWaddr 00:18:F3:E5:9D:66
inet addr:192.168.0.14 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
.............
[root@AT91RM9200DK /root]$ping 192.168.0.12 此时主机有无线接口,不能ping通
PING 192.168.0.12 (192.168.0.12): 56 data bytes

--- 192.168.0.12 ping statistics ---
4 packets transmitted, 0 packets received, 100% packet loss

[root@AT91RM9200DK /root]$ifconfig lo 127.0.0.1
[root@AT91RM9200DK /root]$ifconfig ##当前以太网和回环接口UP
eth0 Link encap:Ethernet HWaddr 00:18:F3:E5:9D:66
inet addr:192.168.0.14 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1

[root@AT91RM9200DK /root]$ping 127.0.0.1 ##网络硬件应该没有问题了吧
PING 127.0.0.1 (127.0.0.1): 56 data bytes
Warning: unknown ICMP packet received (not echo-reply)
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=1.6 ms

--- 127.0.0.1 ping statistics ---
6 packets transmitted, 6 packets received, 0% packet loss

二、未拔无线网卡,关闭无线接口确不行
[root@dding root]# ifconfig rausb0 down
[root@dding root]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:F0:4C:81:64:43
inet addr:192.168.0.12 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
## 关闭了无线接口此时只剩下有线接口,看是否能否ping通

[root@dding root]# ping 192.168.0.14 怎么会这样呢,我连上了阿?网线肯定没问题阿
connect: Network is unreachable
[root@AT91RM9200DK /root]$ping 192.168.0.12
PING 192.168.0.12 (192.168.0.12): 56 data bytes

--- 192.168.0.12 ping statistics ---
11 packets transmitted, 0 packets received, 100% packet loss
## 绝望阿

三、拔下无线网卡、彻底关闭无线接口
[root@dding root]# service network restart
正在关闭接口 eth0: [ 确定 ]
关闭环回接口: [ 确定 ]
设置网络参数: [ 确定 ]
弹出环回接口: [ 确定 ]
弹出界面 eth0: [ 确定 ]
弹出界面 rausb0: rt73 设备 rausb0 似乎不在。将要推迟它的初始化。
[失败]
[root@dding root]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:F0:4C:81:64:43
inet addr:192.168.0.12 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
##彻底清除无线接口

四、板子和主机互ping
[root@dding root]# ping 192.168.0.14 ##ping板子,可以了,哈哈,原来如此阿
PING 192.168.0.14 (192.168.0.14) 56(84) bytes of data.
64 bytes from 192.168.0.14: icmp_seq=1 ttl=64 time=0.836 ms

--- 192.168.0.14 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2008ms
rtt min/avg/max/mdev = 0.135/0.382/0.836/0.321 ms

[root@AT91RM9200DK /root]$ping 192.168.0.12 ##ping主机,可以阿,太爽了,心病没了
PING 192.168.0.12 (192.168.0.12): 56 data bytes
64 bytes from 192.168.0.12: icmp_seq=0 ttl=64 time=0.5 ms
64 bytes from 192.168.0.12: icmp_seq=2 ttl=64 time=0.3 ms

五、板子重新确定,TFTP功能正常了(注意,此时主机的无线接口必须是关闭的)
##板子重新启动
U-Boot 1.1.1 (Nov 16 2004 - 18:01:43)

U-Boot code: 21F00000 -> 21F16F2C BSS: -> 21F1B368
RAM Configuration:
Bank #0: 20000000 32 MB
Flash: 16 MB
In: serial
Out: serial
Err: serial
Hit any key to stop autoboot: 0
TFTP from server 192.168.0.12; our IP address is 192.168.0.15
Filename 'ulmage'.
Load address: 0x21000000
Loading: #################################################################
#################################################################

至此,一切问题搞定!



--------------------
   以上全是转载的,他的解决方案是拔掉无线网卡,这个用不着把。关闭开机自启动无线网卡不就可以了么,下面也是转载的

--------------------

 

在家上网几乎不用无线网络,所以在Windows下一直选择禁用无线网卡,需要用的时候可以随时启用,但是Ubuntu下的NetworkManager没有提供这一选项,去掉“启用无线”之前的勾只能暂时禁用,重启后Wifi还是会被自动启用,不胜其烦。研究了一下,大致有2个比较简单方法,可以让ubuntu开机自动禁用无线网络。

  1. 自启动脚本

    将下面这条禁用无线网络的命令添加到“启动应用程序“中,这样开机时无线网络就会被自动禁用

dbus-send --system --type=method_call --dest=org.freedesktop.NetworkManager /org/freedesktop/

NetworkManager org.freedesktop.DBus.Properties.Set string:org.freedesktop.NetworkManager string:

WirelessEnabled variant:boolean:false这是最灵活也是最行之有效的方法,唯一的不足在于,电脑从待机状态下唤醒时,无线网络还是会被重新启用。

 

        2.驱动黑名单

        将无线网卡驱动加入黑名单,彻底禁用无线网络。 

  既然是禁用驱动,首先我们得知道无线网卡的驱动名是什么,在终端中输入lshw命令可以列出电脑硬件的详细信息,从中我们可以获取无  线网卡的驱动名。下面是信息片段:

  最后一行显示我的无线网卡驱动名称是iwl3945(intel 3945abg无线网卡),将它加入到黑名单就可以了,具体操作如下:

  • sudo gedit /etc/modprobe.d/blacklist.conf
  • 在文本最后加入 blacklist iwl3945
  • 重新启动

如果的确长时间不会用到无线网络,这个方法就比较干净彻底

你可能感兴趣的:(linux,网络,ubuntu,NetWork,installer,statistics,嵌入式linux系统移植)