2008年9月25日星期四

Gentoo配置无限网卡ipw2100

无限网卡的配置让我倍受折腾,在一两个月内,我不知道翻阅了多少资料,问了多少人,尝
试了多少遍,和放弃了多少遍。昨天我转换一下思维,直接从命令行里敲iwconfig命令,居
然连接上了。因此赶快留下记录,供以后查阅。

硬件环境
IBM Thinkpad R50
- Intel PRO/Wireless LAN 2100 无线网卡
- ATI Radeon Mobility 7500

软件环境

linux-2.6.26-gentoo, i686
Gentoo profile: default/linux/x86/2008.0/desktop
gcc-4.3.1
glibc-2.8_p20080602-r0

配置方案

内核驱动 + ipw2100固件 + iwconfig

下面简述安装配置过程;

一、安装内核驱动

ipw2100作为应用广泛的网卡,已经在内核里加入支持,而且你在gentoo的portage tree中
也找不到ipw2100的驱动了。因此,你只需要在内核里编译即可(建议编译成模块),编译
后的模块名称为ipw2100。

编译选项为:

Symbol: IPW2100 [=m]
│ Prompt: Intel PRO/Wireless 2100 Network Connection
│ Defined at drivers/net/wireless/Kconfig:126
│ Depends on: NETDEVICES && !S390 && PCI && WLAN_80211
│ Location:
│ -> Device Drivers
│ -> Network device support (NETDEVICES [=y])
│ -> Wireless LAN
│ -> Wireless LAN (IEEE 802.11) (WLAN_80211 [=y])
│ Selects: WIRELESS_EXT && FW_LOADER && IEEE80211


二、安装firmware

firmware是不公开的驱动程序需要的数据。ipw2100的固件在gentoo里可以直接安装,安装
后的固件在 /lib/firmware 中。

wickyl@ ~: eix ipw2100
[I] net-wireless/ipw2100-firmware
Available versions: (1.3) 1.3
Installed versions: 1.3(1.3)(04:50:13 PM 08/31/2008)
Homepage: http://ipw2100.sourceforge.net/
Description: Firmware for the Intel PRO/Wireless 2100 3B miniPCI adapter
wickyl@ ~: sudo emerge ipw2100


至此ipw2100的驱动已经安装完毕了,加载模块ipw2100正确之后,可以用ifconfig查找到新
增的网卡借口(我的是eth1),也可以在dmesg中发现模块打印的信息。

wickyl@ ~: sudo ifconfig
eth1 Link encap:Ethernet HWaddr 00:0c:f1:0c:87:17
inet addr:172.1.2.191 Bcast:172.1.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:13955 errors:28 dropped:0 overruns:0 frame:0
TX packets:2493 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2311035 (2.2 MiB) TX bytes:507580 (495.6 KiB)
Interrupt:11 Base address:0x2000 Memory:c0204000-c0204fff

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:265 errors:0 dropped:0 overruns:0 frame:0
TX packets:265 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:20472 (19.9 KiB) TX bytes:20472 (19.9 KiB)


wickyl@ ~: dmesg | grep ipw2100
ipw2100: Intel(R) PRO/Wireless 2100 Network Driver, git-1.2.2
ipw2100: Copyright(c) 2003-2006 Intel Corporation
ipw2100: Detected Intel PRO/Wireless 2100 Network Connection
firmware: requesting ipw2100-1.3.fw


三、安装必备软件支持

必备的软件包括wireless-tools, dhcpcd,gentoo的官方文档中提醒你,无线的配置工具可
以使用 wpa_supplicant 和 iwconfig(wireless-tools),但是我始终无法使用
wpa_supplicant 成功配置无线网卡,如果你成功了,请告诉我,让我也惊讶一下。

wickyl@ ~: sudo emerge wireless-tools dhcpcd

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild R ] net-wireless/wireless-tools-29 USE="nls -multicall" 0 kB
[ebuild R ] net-misc/dhcpcd-4.0.1 USE="compat zeroconf" 0 kB
...


四、配置网络接口 (eth1)

网络接口的配置,在 gentoo 里显得规范而且有特色,它的主配置文件在 /etc/conf.d/net
里,在官方文档中详细的介绍了无线网络服务的配置。

配置步骤分两步,首先建立 /etc/init.d/net.eth1 链接。

wickyl@ ~: ln -s /etc/init.d/net.lo /etc/init.d/net.eth1


然后是配置 /etc/conf.d/net,以下是我的配置(eth1):

#### wireless networking configuration
#### ipw2100 + wpa_supplicant
config_eth1=("dhcp");
modules=("iwconfig");
key_<essid1>="[1] <passwd> key [1] enc open"
key_<essid2>="off"

preferred_aps=("<essid1>" "<essid2>")


简单说明一下,我的eth1是使用dhcp来配置网络和路由器地址的,这需要你安装dhcpcd。我
从没有使用静态地址配置无线网络,那样显得很不实际。

modules=("iwconfig");
指定无线配置接口,可选项是:iwconfig/wpa_supplicant。

key_<essid1>="[1] <passwd> key [1] enc open"
key_<essid2>="off"
指定AP接入点和加密方式。这里的<essid1>使用了开放方式,需要用<passwd>指定密码。
而<essid2>则没有设立密码,一般的公网就是不设定密码的。

preferred_aps=("<essid1>" "<essid2>")
preferred_aps指定AP的优先顺序。你也可以添加接入点APs的更多选项,包括屏蔽接入点等
等。这在手册中都有介绍。

五、启动 net.eth1 服务来完成配置


wickyl@ ~: sudo rc-config start net.eth1


配置完成之后,可以用iwconfig来查询信息。这是南山图书馆一个AP的配置信息。

wickyl@ ~: sudo iwconfig eth1
Password:
eth1 IEEE 802.11b ESSID:"nslib" Nickname:"ipw2100"
Mode:Managed Frequency:2.412 GHz Access Point: 00:02:6F:05:CF:7A
Bit Rate=11 Mb/s Tx-Power:16 dBm
Retry short limit:7 RTS thr:off Fragment thr:off
Encryption key:off
Power Management:off
Link Quality=98/100 Signal level=-49 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:4 Missed beacon:4



为什么我消耗老长的时间?

长久以来,我都没有爱好选择习惯,如果一个事物有更多的好处,那我偏向于倾注经历在此
事物上。
在gentoo的手册上,明确写着:“wpa_supplicant is the best choice”。我听之任之,一
直都在使用 wpa_supplicant 来坚持配置无限网卡。

szlug上,我张贴询问了配置问题,上面列举了我怎么在这个问题上消磨生命的。


ieee80211_crypt: registered algorithm 'NULL'

这东西我不知道所言何物,按照rae老兄的指示,我用Ubuntu LiveCD测试了一下,乖乖!
Gnome下的NetworkManager工具直接提示我输入无限网接入密码。实在是太自卑了!
我查看了一下dmesg info。

ieee80211_crypt: registered algorithm 'WEP'

这显然是ieee80211加密算法的问题。我重新编译内核,加入了ieee80211_crypt_wep模块。

然后又是启动服务的时候报错,我使用的是wpa_supplicant。


ipw2100: Fatal interrupt. Scheduling firmware restart.
ipw2100: exit - failed to send CARD_DISABLE command

我始终没有尝试过转换角度,如果早些时候可以退一步,来使用iwconfig配置,如果我像昨
天一样轻轻的敲入一个iwconfig命令,我就可以发现世界是多么的美好。

事情很奇妙,不是么?有选择,就有出路。这就是Linux。

2 条评论:

  1. ipw2100: Fatal interrupt. Scheduling firmware restart.

    是一个ipw2100中严重的bug,首次发现于2004年,至今仍未被修复。bug的表现是无法连接到任何无线网络,或连接后反复在10分钟内断线,同时内核记录下大量ipw2100: Fatal interrupt. Scheduling firmware restart的信息。

    若去Google搜索,可得到大量关于此bug的报告,最早最详细的是http://bugzilla.intellinuxwireless.org/show_bug.cgi?id=245

    这不是你的错。而英特尔如此不负责任的表现,时隔8年,仍未修复!!实在……若您有机会,请让英特尔重视此问题。

    回复删除
  2. 我的debian系统可以使用2100无线网卡驱动,但是无法正常关机,提示ipw2100:fatal interrupt scheduling firmware restart这行英文
    每次都是硬关机,不知道原因.

    回复删除