嵌入式爱好者

查看: 28562|回复: 36

被雷到了, 到底有没有人在Linux下成功驱动起来那个WIFI模块了?

  [复制链接]

14

主题

54

帖子

55

积分

扫一扫,手机访问本帖
发表于 2010-12-22 22:20:14 | 显示全部楼层 |阅读模式
这个是我一直没弄明白,WIFI模块早就可以使用,就是我的WIFI模块有问题,因此就是不工作?
这个帖子http://bbs.ednchina.com/showtopic-4344.aspx说用两个板子互联,而且被那个论坛加了精华。看得我晕阿~~
给的那几个代码不是驱动,是"纯正的" socket代码,下下来我鼻子都气歪了。莫非是赚稿费的?

不过这个还是动摇了我的信念,是不是linux kernel 本身的代码就可以使用SDIO的WIFI adapter? 到底有没有人搞过这个?
各位版主们给个话8,是我被雷到了呢还是我一直没弄明白一个别人都非常轻松直接就解决了的根本不是问题的问题?

服了,我google了很久了,到现在还没弄明白阿。。。

Help~
回复

使用道具 举报

Riced 该用户已被删除
发表于 2010-12-22 23:05:13 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

0

主题

0

帖子

10

积分

i.MX6Q通行证

发表于 2010-12-23 10:05:49 | 显示全部楼层
在linux下是可以驱动的。当初我也有楼主这样的困惑,我甚至怀疑SDIO WIFI模块是不是不能用。后来我把系统烧成wince的,确定可以连接互联网。由此断定,飞凌的SDIO WIFI是可以用的。 于是就在linux 下的驱动做文章。linux下的make menuconfig中,在driver 中wireless中是有一项选择8686的SDIO驱动。但是前提得在MMC1被正常配置,并且可以检测到SDIO WIFI的前提下。然后再从网上下载相应的firmware就可以了。
PS: 这个问题,还是不要麻烦版主们,他们可能确实没时间,关于SDIO WIFI的驱动早在几个月前就看到一个贴子里的版主说会更新,但是到现在为止,仍未看到有所更新。在这里,确实想对飞凌正面提出点意见,刚开始没有,这真没关系,事情是一点一点做的,但是一直都没有,这真的说不过去了。
回复 支持 反对

使用道具 举报

Shepherd 该用户已被删除
发表于 2010-12-23 12:26:21 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

14

主题

54

帖子

55

积分

 楼主| 发表于 2010-12-23 15:24:50 | 显示全部楼层
谢谢各位回复。

内核里边那些选项前天我就都选了,不管用。

我今天一直在研究marvell网站上那个带firmware的驱动。

虽然我已经把它编译了(费了非常大的劲,内核API版本似乎差了很多),放到板上,可是模块能装载但是就是看不见wlan0, 只能看见eth0.

到此我感觉我需要补课了,一个是wlan这类设备的知识,另一个就是开发板上硬件儿的信息以及硬件的初始化信息。

退回去学习了,估计要练个三、五十年再跟这东西死磕了。

这东西可比红外接收器那东西费劲太多了。

BTW: 有没有现成的可吃阿?哪位高手搞定了发我一份阿~
回复 支持 反对

使用道具 举报

14

主题

54

帖子

55

积分

 楼主| 发表于 2010-12-23 15:34:58 | 显示全部楼层
我不清楚大家是否都清楚怎么从marvell的网站上下载8686的驱动。为了能让更多人有兴趣研究这个东西,我把怎么下载写在这里。如果大家有兴趣就一起弄弄8,如果搞定了就来share一下~:
1. 到http://www.marvell.com/support.html
2. 在右边叫"Drivers->Please select a platform for your Marvell network controller." 的dropdown list 里边选择"Linux 2.6 - Fedora" 然后单击它底下那个"Search" button.
3. 下载"SD-8686-LINUX26-SYSKT-9.70.3.p24-26409.P45-GPL"
不过这个驱动一个是内核版本老,另一个问题是假定的是for Fedora 的,所以交叉编译时候改动还是很大的。编译完了目前也不工作。希望大家一起研究~
Riced, 你在吗?你的进展如何?
回复 支持 反对

使用道具 举报

Riced 该用户已被删除
发表于 2010-12-24 09:48:50 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Riced 该用户已被删除
发表于 2010-12-24 10:44:24 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

14

主题

54

帖子

55

积分

 楼主| 发表于 2010-12-24 14:15:24 | 显示全部楼层
恩,我正读代码呢。不过还没读懂,呵呵。
我改了版,可以编译通过,可是不工作。回头给你发过去,如果你有空帮我看看的话。
我是个纯粹的硬件和驱动外行,所以还没读很懂。
回复 支持 反对

使用道具 举报

0

主题

0

帖子

10

积分

i.MX6Q通行证

发表于 2010-12-24 15:58:51 | 显示全部楼层
回复 5# yystju


   首先你要内核的打印信息里有mmc1加载设备的信息吗?类似device 00001 或者device00002之类的。如果有,那说明你的sdio wifi已经查到了,然后insmod libertas_sdio.ko .........
然后才能看到wlan0.


再用iwlist iwconfig 命令配置
回复 支持 反对

使用道具 举报

14

主题

54

帖子

55

积分

 楼主| 发表于 2010-12-24 20:09:42 | 显示全部楼层
回复 10# outfind

Oh? Thank you very much~

Let me try~
回复 支持 反对

使用道具 举报

crazyman 该用户已被删除
发表于 2010-12-27 20:56:30 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

14

主题

54

帖子

55

积分

 楼主| 发表于 2010-12-27 21:26:02 | 显示全部楼层
这两天被一个工作上的活拖累了连圣诞都没过好。

我今天试了试,outfind说的,发现我的板子上mmc1没有device信息。这是dmesg里关于MMC的内容。
=====================
sdhci: Secure Digital Host Controller Interface driver                          
sdhci: Copyright(c) Pierre Ossman                                               
s3c-sdhci s3c-sdhci.0: clock source 0: hsmmc (133000000 Hz)                     
s3c-sdhci s3c-sdhci.0: clock source 1: hsmmc (133000000 Hz)                     
s3c-sdhci s3c-sdhci.0: clock source 2: mmc_bus (44333333 Hz)                    
[SDHCI]to add external irq as a card detect signal......                        
[SDHCI]if (pdata->cfg_ext_cd)......                                             
mmc0: SDHCI controller on samsung-hsmmc [s3c-sdhci.0] using ADMA               
[SDHCI]request_irq......                                                        
sdhci: card inserted.                                                           
s3c-sdhci s3c-sdhci.1: clock source 0: hsmmc (133000000 Hz)                     
s3c-sdhci s3c-sdhci.1: clock source 1: hsmmc (133000000 Hz)                     
s3c-sdhci s3c-sdhci.1: clock source 2: mmc_bus (44333333 Hz)                    
[SDHCI]to add external irq as a card detect signal......                        
mmc1: SDHCI controller on samsung-hsmmc [s3c-sdhci.1] using ADMA
-------------------------------------
安装libertas_sdio.ko之后,dmesg里只有以下两个行信息:
=====================
libertas_sdio: Libertas SDIO driver                                             
libertas_sdio: Copyright Pierre Ossman
-------------------------------------

刚用crazyman给的办法查了下无线设备,以前一直不知道怎么查,结果没有任何无线设备。看来读代码是必须的了~

谢谢outfind和crazyman~
回复 支持 反对

使用道具 举报

0

主题

0

帖子

10

积分

i.MX6Q通行证

发表于 2010-12-28 16:01:59 | 显示全部楼层
回复 13# yystju


  嗯,设备并没有加载上,mmc1没有检测到设备,这两行只是告诉你把libertas的模块加载上了
回复 支持 反对

使用道具 举报

14

主题

54

帖子

55

积分

 楼主| 发表于 2010-12-30 00:37:52 | 显示全部楼层
今天看了些libertas的代码,在里边使劲儿加printk希望找出些头绪,不过到目前发现除了if_sdio_init_module肯定是走了,其他代码似乎根本没有动静。

我现在很晕的是,OK6410的硬件手册里边关于WIFI只有板子上的接法,没有WIFI模块的管脚接法。所以根本不知道那根线接到哪。。。只能假定说硬件接法都是一样的(大家都是从三星的板上copy的电路),尤其那两个接GPIO的线,所有板子都如此。由于这样成了"黑盒",自己试图写些代码来探索一下也成了泡影。

另外有个概念搞不懂,mmc和sdio应该都能叫做bus,他们感觉不是一回事儿。可是在google上查linux mmc wifi查出来的也是sdio wifi的差不多的东西。.说他们是一回事儿吧,在/sys/bus/mmc/devices下边可以看见SD卡(mmc0), 而/sys/bus/sdio/devices下边什么都没有。我折腾这么久sdio, 是不是方向正确阿。到底概念上是怎么回事儿啊?

还有,上次提到的那个marvell网站上的驱动个人推断是比较老的2.6版本上的驱动。现在应该用/linuxkernel/driver/net/wireless/libertas那个感觉就行(如果真的可以的话)。但是不知道从marvell下载的firmware是不是能在这个版本的驱动里边用。因为到现在还没能成功到那一步呢。
回复 支持 反对

使用道具 举报

14

主题

54

帖子

55

积分

 楼主| 发表于 2010-12-30 01:12:38 | 显示全部楼层
http://en.wikipedia.org/wiki/MultiMediaCard这里有一张表包含有硬件方面MMC和SDIO的技术特性的对比。(发现SDIO每年还要缴纳$1000的版税...)

http://en.wikipedia.org/wiki/Sec ... t_Output_.28SDIO.29wikipedia内容真是无人能及。太详细了。
不过发现没找到论述linux sdio 内核支持架构的文档。

还有这个讲得还是挺好的,如果能再详细点就好了http://hi.baidu.com/kkxxzz/blog/ ... cc2366f624e496.html
回复 支持 反对

使用道具 举报

14

主题

54

帖子

55

积分

 楼主| 发表于 2010-12-30 01:21:51 | 显示全部楼层
http://blog.csdn.net/zhangqingsup/archive/2010/03/20/5399258.aspx这个看着非常靠谱。关键我linux的内核知识比较匮乏,目前看不懂。明天继续恶补吧~
回复 支持 反对

使用道具 举报

0

主题

0

帖子

10

积分

i.MX6Q通行证

发表于 2010-12-30 15:18:53 | 显示全部楼层
-------------------------------------
安装libertas_sdio.ko之后,dmesg里只有以下两个行信息:
=====================
libertas_sdio: Libertas SDIO driver                                             
libertas_sdio: Copyright Pierre Ossman
-------------------------------------

从你的提示信息上来看,你是在if_sdio文件中,if_sdio_init_module成功了。
但是后面执行
ret = sdio_register_driver(&if_sdio_driver);
应该是没有成功的
回复 支持 反对

使用道具 举报

14

主题

54

帖子

55

积分

 楼主| 发表于 2010-12-31 15:50:25 | 显示全部楼层
本帖最后由 yystju 于 2010-12-31 15:55 编辑

终于搞定了,来结贴。大家新年快乐~

希望对大家有用。这两天内核代码看了不少,不过深感基础知识比较差,看得懂得不是很多。而且我们用的2.6.28.6的内核相对于从kernel.org下载的修改了不少地方,内核的移植目前还路很远阿。现在都2.6.35了。

I) 代码改动:
总结起来呢,就改了两行代码 (字字血泪啊,哈哈):
1. linux2.6.28/arch/arm/mach-s3c6410/setup_sdhi.c (94):
  1. ...
  2. #if 0
  3. ...
复制代码
改为
  1. ...
  2. #if 1
  3. ...
复制代码
2. linux2.6.28/arch/arm/plat-s3c/dev-hsmmc1.c (41):
  1. ...
  2. MMC_CAP_SD_HIGHSPEED),
  3. ...
复制代码
改为
  1. ...
  2. MMC_CAP_SD_HIGHSPEED | MMC_CAP_ON_BOARD),
  3. ...
复制代码
II) 配置内容
首先要把8686的firmware都copy到linux2.6.28/firmware/ 并将helper_sd.bin改名叫sd8686_helper.bin(而sd8686.bin名字不变).
然后在make menuconfig里边,
1. 在Device Dirvier->Generic Device Option->External firmware blobs to build into the kernel binary 里边写入"sd8686_helper.bin sd8686.bin"
2. 在Device Dirvier->Network device support->Wireless LAN里边将所有Marvell 8xxx Libertas WLAN driver support设成built-in ("Marvell 8xxx Libertas WLAN driver support with thin firmware ..." 不用).
3. 编译内核然后上传。
然后重新冷启动(见副作用).在启动串口输出或者dmesg里边,你应该能看到类似下边的内容:
======================
...
mmc1: new SDIO card at address 0001         
libertas_sdio mmc1:0001:1: firmware: using built-in firmware sd8686_helper.bin  
libertas_sdio mmc1:0001:1: firmware: using built-in firmware sd8686.bin         
libertas: 00:27:13:ed:28:a4, fw 9.70.3p24, cap 0x00000303                       
libertas: PREP_CMD: command 0x00a3 failed: 2                                    
libertas: PREP_CMD: command 0x00a3 failed: 2                                    
libertas: eth1: Marvell WLAN 802.11 adapter
...
--------------------------------------
注意:在我的板上叫eth1, 不是wlan0
4. 设置
首先ifconfig eth1 up,然后用iwlist eth1 scan查看能否查到接入点。
然后配置无线,基本上所有的参数都可以从iwlist scan的结果里找到, 除了passwd。(我用的是WEP, 如果大家用的什么LEAP或者WPA,WPA2等等的话估计要自己搞了,我实在是外行。)
======================
iwconfig eth1 essid <ESSID> freq <FREQENCY> channel <CHANNEL> ap <ACCESS POINT> rate 54M auto key restricted s:<passwd>
--------------------------------------
最后设置IP(见局限)
======================
ifconfig eth1 <IP>
--------------------------------------

III) 副作用和局限
1. 只有第一次冷启动可以侦测到mmc1, linux reboot或者 uboot reset都不能。不是很懂原因。不过很可能是MMC_CAP_ON_BOARD造成的。
2. 目前不能DHCP, 因为板子上没有dhclient,而我dhcp交叉编译没搞定。所以我就直接设了个地址,目前工作正常。
3. 设置了的无线网链接过一会儿不用就会断,然后要先ifconfig eth1 down, 再up, 然后重新用iwconfig设置。(貌似telnet上去一个链接,它就不断了~)
4. 用模块方式编译的内核,手动加载驱动时候无论如何都报firmware load failed (ret = -2), 无解。
5. IPV6不会...

IV) 硬件
我只有OK6410。不清楚别的板子上是否需要改动。

V) 重要参考文章或帮助文档
1. http://blog.csdn.net/zhangqingsup/archive/2010/03/20/5399258.aspx
2. http://blog.csdn.net/unbutun/archive/2009/04/03/4022391.aspx
3. http://linux.die.net/man/8/iwconfig
4. http://chgw.blog.hexun.com/10803450_d.html
回复 支持 反对

使用道具 举报

Riced 该用户已被删除
发表于 2010-12-31 16:07:49 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋| 飞凌嵌入式 ( 冀ICP备12004394号-1 )

GMT+8, 2024-11-25 16:23

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表