【聚杰网Linux】在Dell Inspiron 700m笔记本电脑上安装Slackware
从打算买笔记本电脑开始,就留意哪些牌子和型号对Linux的支持比较好,在网上搜索了一些文章,结合自己的喜好,最终选择了Dell Inspiron 700m。
Dell采取的是直销模式,所以订购是在网上和电话上进行的。选好型号和配置,把钱转账到Dell的账号,把进帐回单和经过确认的定单传真给Dell,4天之后,机器就通过邮政快递送过来了。
我选择的主要配置是:Pentium M 1.6G CPU,512M内存,12.1" 1280x800宽屏LCD,40G硬盘,DVD/CD-RW Combo,支持802.11b/g的无线网卡。lspci的结果如下:
00:00.0 Host bridge: Intel Corp. 82852/855GM Host Bridge (rev 02)
00:00.1 System peripheral: Intel Corp. 855GM/GME GMCH Memory I/O
Control Registers (rev 02)
00:00.3 System peripheral: Intel Corp. 855GM/GME GMCH Configuration
Process Registers (rev 02)
00:02.0 VGA compatible controller: Intel Corp. 82852/855GM Integrated
Graphics Device (rev 02)
00:02.1 Display controller: Intel Corp. 82852/855GM Integrated Graphics
Device (rev 02)
00:1d.0 USB Controller: Intel Corp. 82801DB (ICH4) USB UHCI #1 (rev 03)
00:1d.1 USB Controller: Intel Corp. 82801DB (ICH4) USB UHCI #2 (rev 03)
00:1d.2 USB Controller: Intel Corp. 82801DB (ICH4) USB UHCI #3 (rev 03)
00:1d.7 USB Controller: Intel Corp. 82801DB (ICH4) USB2 EHCI Controller
(rev 03)
00:1e.0 PCI bridge: Intel Corp. 82801BAM/CAM PCI Bridge (rev 83)
00:1f.0 ISA bridge: Intel Corp. 82801DBM LPC Interface Controller
(rev 03)
00:1f.1 IDE interface: Intel Corp. 82801DBM (ICH4) Ultra ATA Storage
Controller (rev 03)
00:1f.3 SMBus: Intel Corp. 82801DB/DBM (ICH4) SMBus Controller (rev 03)
00:1f.5 Multimedia audio controller: Intel Corp. 82801DB (ICH4)
AC'97 Audio Controller (rev 03)
00:1f.6 Modem: Intel Corp. 82801DB (ICH4) AC'97 Modem Controller
(rev 03)
02:01.0 Network controller: Intel Corp.: Unknown device 4220 (rev 05)
02:04.0 CardBus bridge: Texas Instruments: Unknown device ac8e
02:04.1 CardBus bridge: Texas Instruments: Unknown device ac8e
02:04.2 FireWire (IEEE 1394): Texas Instruments: Unknown device 802e
02:04.3 Unknown mass storage controller: Texas Instruments: Unknown
device ac8f
02:05.0 Ethernet controller: Broadcom Corporation: Unknown device 170c
(rev 02)
我购买时特地选择了不安装Windows的机型,所以机器来的时候硬盘里面什么也没有。我有现成的Slackware 10.0光盘,打算先安装10.0版,然后用swaret升级到10.1版。
- 系统安装
安装过程很简单也很顺利,用安装光盘启动,以root登录,运行cfdisk对硬盘进行分区。注意:假如希望使用suspend to disk功能,swap分区需要比内存大30%以上。分区之后用setup命令进行安装,不赘。
安装完重新启动,发现默认的2.4.26内核不支持机器上的Broadcom 4400网卡。从Broadcom网站下载了网卡的Linux驱动,用一个U盘做中介cp到700m的硬盘,按照说明文件进行编译,得到bcm4400.o文件,用make install命令安装。在/etc/rc.d/rc.modules 里面增加 /sbin/modprobe bcm4400 一行,再重新启动,系统顺利地认出了网卡。
接下来用swaret升级到10.1版,也很顺利。
- 安装无线网卡驱动
Intel提供了Intel® PRO/Wireless 2200BG 无线网卡的驱动程序和firmware,都可以在http://ipw2200.sourceforge.net/下载到。这个驱动要求2.6.x版内核,于是我从Slackware的下载站下载了2.6.10版内核、内核源码(kernel-source)和内核头文件(kernel-header),按README.initrd文件进行升级。
升级内核之后,发现内核提供的b44模块本身即支持Broadcom网卡并能自动加载,不必再另外编译安装网卡驱动。
无线网卡驱动的安装方法在下载的文件里说得很清楚。需要注意的是,根据 /etc/hotplug/firmware.agent 中的设置,FIRMWARE_DIR=/lib/firmware,因此下载的firmware文件(我下载的是ipw2200-fw-2.2.tgz)需要解压到 /lib/firmware/ 目录中。网卡驱动(我下载的是ipw2200-1.0.0.tgz)的编译安装也很简单,解开源码之后先make,然后用root权限make install即可。
- 无线网络参数设置
Slackware从10.0开始提供了启动无线网卡的脚本 /etc/rc.d/rc.wireless,而无线网卡的参数在 /etc/rc.d/rc.wireless.conf 文件里设置。我的rc.wireless.conf的内容是:
INFO="home network"
# ESSID (extended network name) : My Network, any
ESSID="myhome"
# NWID/Domain (cell identifier) : 89AB, 100, off
NWID=""
# Operation mode : Ad-Hoc, Managed, Master, Repeater,
Secondary, auto
MODE="Managed"
# Frequency or channel : 1, 2, 3 (channel) ; 2.422G, 2.46G
(frequency)
FREQ=""
CHANNEL="6"
# Sensitivity (cell size + roaming speed) : 1, 2, 3 ; -70
(dBm)
SENS=""
# Bit rate : auto, 1M, 11M
RATE=""
# Encryption key : 4567-89AB-CD, s:password
KEY="s:catch restricted"
# RTS threshold : off, 500
RTS=""
# Fragmentation threshold : off, 1000
FRAG=""
# Other iwconfig parameters : power off, ap 01:23:45:67:89:AB
IWCONFIG=""
# iwspy parameters : + 01:23:45:67:89:AB
IWSPY=""
# iwpriv parameters : set_port 2, set_histo 50 60
IWPRIV=""简单说明一下:
- INFO
- 对网络的描述,可以随便填
- ESSID
- 这是无线网络的名称,同一个无线网络中的设备必须有同样的名称才能相互通信。我这里的设置和无线路由器中的设置一致。
- MODE
- 无线连接方式,我选择的是Managed
- CHANNEL
- 设置无线连接的信道。我这里的“6”和无线路由器中的设置一致。
- KEY
- WEP方式的加密密钥,必须和无线路由器中的设置一致。“s:”表明密钥是字符串,我用的是“catch”,restricted指明使用加密模式
其它参数是否需要设置,要视每个网络的具体要求而定,我这里设置好上面几个参数就可以工作了。
如果想更深入了解各个参数的详情,请 man iwconfig 。 - xorg设置
从这里下载适用于2.6.10内核的Intel显卡驱动。按照这篇文档的说明安装。
然后,需要下载一个叫做855resolution的小工具来设置1280x800的分辨率。下载源码,根据README文件的说明编译安装,然后在 /etc/rc.d/rc.local 里面添加启动时运行855resolution的命令以及必要的参数,例如我加的是: /usr/sbin/855resolution 5c 1280 800
我用xorgconfig命令设置xorg.conf文件,设置时显卡驱动选择i810,鼠标用默认设备/dev/mouse,协议选PS/2,分辨率设置成1280x800。
完成后,微调一下 /etc/X11/xorg.conf文件,将 Load "dri" 前面的注释号去掉以加载dri,启动3D加速。触摸板用默认的鼠标驱动就能实现直接在板上的单击和双击功能。一些参考资料提到可以用synaptics驱动来实现在触摸板边缘拖动滚动条的功能,但是我没法实现,每次试图加载synaptics都无法进入X,而且鼠标和键盘都会锁死,最终只得放弃。
- ACPI设置
使用ACPI功能,需要用到button和battery模块。button模块监视电源开关键(power button)、屏幕开合状态键(lid button)和休眠键(sleep button)的状态,并根据状态的变化运行设定的程序;battery则让用户可以监视电池的状态。Slackware启动时没有加载加载这两个模块,需要手工在 /etc/rc.d/rc.modules 里面增加 /sbin/modprobe/button 和 /sbin/modprobe battery 。
加载button之后,按照默认设定,可以实现按电源开关键自动关机的功能。
下面介绍一下通过屏幕开合状态键(lid button)实现suspend to RAM的做法(系统采用的是slackware 10.1 的testing目录中编译好的2.6.10版内核及内核模块):
首先,控制台(console)需要使用640x480的分辨率,即在lilo.conf里面不要设置 vga=xxx 这个选项,原因稍后再提。
第二,从suspend状态“醒来”的时候,需要一个叫做video_post的小工具来“唤醒”屏幕显示。
用浏览器访问这个页面,点击video_post tool from Venki,会下载一个attachment.cgi文件,这实际上是个tar.gz文件,mv attachment.cgi video_post.tar.gz,解开它并用make命令编译,将得到 video_post,然后 cp video_post /etc/acpi
第三,建立一个脚本文件lidbtn.sh,并cp到 /etc/acpi/,内容是:
#!/bin/bash
#查看lid button的状态
lid_state=/proc/acpi/button/lid/LID0/state
#状态没有变化则退出
test -e $lid_state || exit 0
#若测试到屏幕合上,则开始suspend to RAM的操作
if cat $lid_state | grep closed > /dev/null
then echo "lid closed -> suspending"
/etc/rc.d/rc.inet1 stop #停止网络连接
rmmod ipw2200 #卸载无线网卡驱动
rmmod b44 #卸载有线网卡驱动
rmmod uhci_hcd
echo "mem" > /sys/power/state #suspend to RAM
/etc/acpi/video_post #唤醒屏幕显示
modprobe uhci_hcd #唤醒外接usb鼠标
modprobe ipw2200 #重新加载网卡驱动
modprobe b44
/etc/rc.d/rc.inet1 restart #重新启动网络连接
else echo "lid opened -> resuming"
fi第四,设置acpi事件,当发现lid switch被按下时执行lidbtn.sh脚本
编辑 /etc/acpi/acpi_handler.sh,内容为:
#!/bin/sh
# Default acpi script that takes an entry for all actions
IFS=${IFS}/
set $@
case "$1" in
button)
case "$2" in
power) /sbin/init 0
;;
lid) /etc/acpi/lidbtn.sh #新添加
;; #新添加
*) logger "ACPI action $2 is not defined"
;;
esac
;;
*)
logger "ACPI group $1 / action $2 is not defined"
;;
esac回过头来说说为什么console要保持640x480的分辨率。假如不用video_post的话,系统“醒来”的时候,屏幕上没有显示,这是内核还没有解决的一个bug。使用video_post之后,它只能在console设成640x480时才比较正常。如果在X状态下进入休眠,“醒来”时图形界面可能会显示混乱,此时用 ctrl+alt+f1 切换到控制台再用 ctrl+alt+f7 切换回来,显示就正常了。如果console用其它分辨率,X的鼠标指针会消失,但鼠标的功能还能正常使用,非常奇怪。
- 未测试或待解决的问题
- ieee1394接口,没有相应的设备,无法测试其是否能在Linux中正常使用。
- PCMCIA接口,没有相应设备,无法测试。
- 机器上的SD读卡器,系统默认不能识别,经上网搜索没有找到相应的驱动,无法使用。
- ACPI的其它功能的使用尚需进一步学习和测试。
参考资料:
[1]Dell 700m with Debian Sarge,http://www.celifornia.com/documents/dell700m.html
[2]gentoo install on dell inspiron 700m,http://alien.dowling.edu/~petko/my_how-tos/dell_inspiron_700m.html
补充资料:
[1]Slackware and a Dell 700m,http://decompiled.org/howto/slackware700m.html
[2]Slackware 10.1 on a Dell 700m Laptop,http://www.rippleweb.org/index/site/projects/slack-on-700m







