LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1119|回复: 1

目标板上驱动无线网卡ipw2200手记

[复制链接]
发表于 2007-1-11 12:14:46 | 显示全部楼层 |阅读模式
最近公司的一个嵌入式系统上需要无线网卡,断断续续弄个两个月才搞定。把过程写下来给大家分享一下。

选择无线网卡的接口模式:
在网上找了一下无线网卡,基本上有以下几种接口:
PCMCIA,俗称PC卡接口。
PCI接口,这是很常见的接口,台式机的主板上有好几个PCI插槽。
miniPCI,笔记本上一般用这个接口。
USB,这个接口现在不管台式机还是本本,都有很多。

我这个平台有PCI,miniPCI,USB接口.
PCI接口比较大,不太适合嵌入式平台;
USB只有两个口,外面要接移动硬盘什么的,暂时不想占用,而且USB的无线网卡移植驱动也不容易,所以也没选它。
最后选了miniPCI接口。
miniPCI接口的网卡很多,比如Intel的,Broadcomd的,Realtek的等等。
我们用的2.6.15的内核,里面已经有Intel 2100和2200(2915)的驱动了,所以我选了一块Intel 2915的卡。这也是选miniPCI接口的一个原因。

编译内核,安装驱动

在嵌入式系统上应用设备,最好先在PC Linux上做一遍,然后再在嵌入式系统上使用,照个葫芦画瓢,就容易多了。这个可是我的血泪经验啊!!!

一开始我也是这样想的,就在本本上装了个Redhat9,然后下载2.6.15的内核,开始编译。
按着这个文档说的,一步步做,但是就是不行。
http://ipw2200.sourceforge.net/INSTALL。

中间经过很长时间的重做内核,一个个版本的实验,都没成功。后来在一个同事的提醒之下,终于直接在目标板上搞好了。下面捡重点的说一下:

首先最重要的就是确定你的miniPCI接口是好的。
PC上的接口可以通过在windows下面安装驱动来实验一下,能用就表明是好的,而且这样还验证了网卡本身也是好的。这一步不可以省略哦。
否则你在Linux上哼哧哼哧搞了N久还没通,最后才发现网卡是坏的,可千万别怪我没提醒你。
目标板上的接口,可以先用其他miniPCI接口的设备验证一下。如果你像我一样只有无线网卡这一个设备,而且还不知道这个设备能不能在Linux下面驱动起来,那就需要你好好检查接口的物理连线,管脚的顺利等等.http://www.interfacebus.com/MiniPCI_Pinout_124Pin.html
这个网站不错的,说的很详细,可以参考一下.


1.内核编译打开wireless tools,就是内核有iwconfig,iwgetid等配置无线连接的工具.
我的这个嵌入式系统用的内核,是别人打过补丁,修改过的,所以可以在menuconfig直接选择。

如果在PC机上用的话,一般内核都自带的;如果没有请自己去下载http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html.
2.在系统根目录建个sys的目录,如果有就不用建了。
修改/etc/fstab文件,增加这样一行
none            /sys            sysfs   defaults                0       0
3.下载最新的hotplug,安装一下。
http://linux-hotplug.sourceforge.net/
一般是make,然后make install安装。

这里多说几句,我前面没搞好,主要就是因为hotplug没搞好.
在PC机上,安装完hotplug以后,要运行以下hotplug命令,能看到这样的提示就说明好了:
Usage: /etc/hotplug.d/default/default.hotplug AgentName [AgentArguments]
AgentName values on this system:  dasd firmware ieee1394 input net pci scsi tape usb



我一开始还想,即使hotplug在PC上行了,移植到目标板上也很困难啊,改编译环境,改代码,那得多麻烦啊。可是最后我发现hotplug其实是脚本文件,基本上跟平台无关。所以后来我把hotplug-2004_03_29.tar.gz里面/etc目录下的文件和/sbin下的文件复制到目标板平台的相应目录下,运行一下hotplug就好了。

但是在我的目标板上还是出现了点小小的问题。
第一:我开始编译的一个内核,没把hotplug编译到里面。所以我内核起来以后,用nfs mount到Linux host上,然后把hotplug的文件复制到相应的目录下面,运行hotplug命令,结果显示
什么/etc/hotplug.d/default/default.hotplug: not found.原来default.hotplug使用的shell是bash,但是我的目标板上没有bash,只有ash,所以我把default.hotplug第一行改成ash,运行hotplug就正常了。
第二:我把hotplug-2004_03_29.tar.gz里面/etc/hotplug.d/default/default.hotplug的文件直接放在目标板的同一目录下,重新编译了内核,但是我的目标板根本起不来,说是“超出了存储器的范围”。因为/etc/rc.d/init.d/hotplug在系统启动的时候会自动加载,而且这个hotplug跟/sbin/下的hotplug一模一样,所以我把/etc/rc.d/init.d/hotplug给删掉;再把default.hotplug放在/etc目录下(它也会自己运行),然后在启动脚本加上两句'mv /etc/default.hotplug  /etc/hotplug.d/default/default.hotplug','/sbin/hotplug'.这样kernel初始化后期再运行hotplug就没问题了。

4.下载firmware,http://ipw2200.sourceforge.net/firmware.php
下载你需要的firmware解压到/usr/lib/hotplug/firmware或者/etc/hotplug/firmware下,具体是那个目录根据/etc/hotplug/firmware.agent这个文件的FIRMWARE_DIR变量来选择.
我下载的是ipw2200-fw-2.4.gz.

firmware固件是二进制文件,运行在无线网卡的模块里面的内存里,所以是跟平台无关的。也就是不管使用的的是windows,还是Linux,而且也不管是哪个版本的Linux,固件都不需要重新编译(也没法编译,这是Intel直接编译好的文件),下载下来直接使用就好了。

关于firmware的猜测:
在windows平台下,使用无线网卡没有关于firmware的说明,因为windows的驱动都是不开源的。
无线网卡是个模块,这个模块本身也需要软件。一般这样的嵌入式软件叫固件firmware.既然是软件,就需要存储在某种掉电可保存的存储器里面,一般是flash。为了降低成本,或者为了将来升级固件方便(试想,如果固件固化在网卡的rom里面,哪天发现这个固件有严重的bug,影响使用怎么办?难道全部召回,重新固化firmware?那成本太高了。所以采用固件外置的方式,只需要发布新的驱动程序和新的固件即可),Intel使用很小的flash,只在flash里面放上很小的一段loader程序,然后PC上的驱动程序驱动网卡的时候,通过这个loader程序把完整的软件,也就是固件读入内存运行。

5.编译内核
把下面这些都打开
~~~~~~~~~~~~~~~~~~~~~~~~~~~
#define CONFIG_NET_RADIO 1
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Failure to enable CONFIG_NET_RADIO will result in Wireless Tools (iwconfig,
iwlist, etc.) not functioning.  In 2.6.x, this is enabled via menuconfig:

        Device Drivers ->
                Networking support ->
                        Network device support ->
                                Wireless LAN (non-hamradio) ->
                                        Wireless LAN drivers (non-hamradio) & WE


~~~~~~~~~~~~~~~~~~~~~~~~~~~
#define CONFIG_FW_LOADER 1
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Intel PRO/Wireless 2915ABG Network Connection driver loads firmware
via the Linux firmware hotplug capability (see later section on firmware loading).
In 2.6.x, this is enabled via menuconfig:

        Device Drivers ->
                Generic Driver Options ->
                        Hotplug firmware loading support


~~~~~~~~~~~~~~~~~~~~~~~~~~~
#define CONFIG_CRYPTO 1
#define CONFIG_CRYPTO_ARC4(_MODULE) 1
#define CONFIG_CRC32(_MODULE) 1
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Intel PRO/Wireless 2915ABG Network Connection driver uses the WEP
encryption and decryption algorithms provided by the Linux kernel.  To use
WEP you must enable the Crypto library support (CONFIG_CRYPTO) and the ARC4
cipher algorithm (CONFIG_CRYPTO_ARC4) as noted below:

        Cryptographic options ->
                ARC4 cipher algorithm

You also need to enable the CRC32 (CONFIG_CRC32) algorithm as noted below:

        Library routines ->
                CRC32 functions


~~~~~~~~~~~~~~~~~~~~~~~~~~~
#define CONFIG_CRYPTO_MICHAEL_MIC(_MODULE) 1
#define CONFIG_CRYPTO_AES_586(_MODULE) 1
~~~~~~~~~~~~~~~~~~~~~~~~~~~
If you wish to enable (optional) WPA support, you also need to enable the
following crypto library modules (in addition to those required for WEP above):

        Cryptographic options ->
                Michael MIC keyed digest algorithm
                AES cipher algorithms

下面这两个编译成模块
~~~~~~~~~~~~~~~~~~~~~~~~~~~
#define CONFIG_IEEE80211 1
~~~~~~~~~~~~~~~~~~~~~~~~~~~
If ieee80211 subsystem support is built into your kernel (i.e. in kernel verison
2.6.14 and later), you must de-configure that capability and rebuild your
kernel before upgrading ieee80211 subsystem and Intel PRO/Wireless 2915ABG Network:

        Networking ->
                Networking support (NET [=y]) ->
                        Generic IEEE 802.11 Networking Stack

Make ipw2200 enable or module
~~~~~~~~~~~~~~~~~~~~~~~~~~~
#define CONFIG_IPW2200 1
~~~~~~~~~~~~~~~~~~~~~~~~~~~
If Intel PRO/Wireless 2915ABG Network Connection driver is built into
your kernel (i.e. in kernel version 2.6.14 and later), you must de-configure
that capability and rebuild your kernel before upgrading ieee80211 subsystem
and Intel PRO/Wireless 2915ABG Network Connection driver:

        Device Drivers ->
                Network device support ->
                        Network device support (NETDEVICES [=y]) ->
                                Wireless LAN (non-hamradio) ->
                                        Intel PRO/Wireless 2200BG and 2915ABG...

编译完内核,然后就应该可以正常使用无线网卡了。
如果你还不行的话,那我也没办法了。

祝你好运!
发表于 2007-1-11 14:17:40 | 显示全部楼层
没弄过这玩意,但把经验分享是多么可贵的,顶一个
回复 支持 反对

使用道具 举报

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

本版积分规则

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