在 Compaq Presario 711CL 笔记本电脑上安装 Red Hat 7.3
Compaq Presario 711 是我 475MHz AMD 桌面系统的良好升级。我最近从 Costco.com 购买的配置包含的功能太多,无法在此一一列举,但它的性能是我桌面系统的两倍以上,并且包含一个 FireWire 端口和一个 8 倍 DVD 驱动器。预装的 Windows XP 版本对我来说不是一个重要的卖点;我希望在新笔记本电脑上使用 Linux。
Linux 在桌面系统上取得了巨大进步。在桌面上安装像 RH 7.3 这样的现代操作系统几乎对于像 Jerry Pournelle 喜欢称呼的日常计算机用户“明妮阿姨”来说都足够容易了。但是笔记本电脑的安装是另一回事。笔记本电脑上的硬件不如桌面电脑上的硬件通用,但是随着采用带有集成外围设备的 ATX 样式主板,这个问题已经变得不那么严重了。
我在新 Presario 上获得 Linux 自由的第一步是基本安装 Red Hat 7.3。对我来说,这包括从友好的 GUI 安装管理器中选择笔记本电脑安装,然后浏览软件包列表,删除除启动 X 和开发工具所需的必要组件之外的所有内容。安装程序唯一真正的问题是它无法自动检测 Presario 的显卡芯片组,这是一种名为 Savage Twister K 的 Savage 芯片组的变体。因此,您必须在安装期间从提供的视频驱动程序列表中手动选择“Savage”。
一旦我安装了基本设置并从 shell 提示符运行 startx,给我一个漂亮的纯 X 屏幕,我就将所有 Red Hat CD 复制到一个名为 /RPMS/ 的新目录中。我发现这在我发现系统中缺少某些东西时,生活会变得容易得多。我可以在几秒钟内安装它,而且我没有现代发行版带来的大量额外负担来 clutter up 硬盘驱动器。有了 20GB 的可用驱动器,没有理由不安装 2GB 的 RPM 软件包,以便您始终可以使用它们。
我使用 Window Maker 作为我的窗口管理器,并且我不安装 GNOME 或 KDE 及其相关的 cruft。这最近在某种程度上成为了我的圣战;当我升级我的硬件时,我实际上希望看到我的应用程序运行得更快,而不是以与以前相同的速度(或者在某些情况下,更慢的速度)运行更大的应用程序。我看到 GNOME 和 KDE 社区中存在一种强烈的特性膨胀趋势,这最终抵消了处理器速度和可用 RAM 的增长。
但这并不意味着你必须遵循我的异端习惯。使用像 Linux 这样的自由操作系统以及所有相关程序的最大好处之一是,你可以混合和匹配软件包以适应你的口味。如果那是你使用的东西,我将要描述的更改同样适用于标准的基于 GNOME 或 KDE 的 Red Hat 安装。所以,让我们继续进行我们需要进行的调整,以使你的 Linux 笔记本电脑达到最佳状态。
我要介绍的第一件事之一是基本 Red Hat 7.3 将在 Presario 上安装和运行,但正确的电源管理系统未启用。Presario 以及越来越多的新型笔记本电脑使用 ACPI 电源管理接口而不是较旧的 APM 系统。因此,你会注意到处理器和风扇全速运转,试图在你的腿上上演他们自己的切尔诺贝利灾难。
当我在我的 Presario 上写这篇文章时,它正在运行 X、OpenOffice.org、xine DVD 播放器和许多 Window Maker docking 应用程序。CPU 使用率徘徊在 30% 左右,风扇处于低速运转状态,笔记本电脑的温度很舒适。在没有 ACPI 工作的情况下,它可能会变得非常热,以至于放在腿上会感到不舒服。
除了电源管理之外,声卡也必须处理,还有那些美妙的 LinModem 之一以及缺少 RS-232 串行端口。作为额外的奖励,我将告诉你如何在仍然完成工作的同时播放你最喜欢的 DVD 电影。
我不会讨论的一个主题是软件挂起。有可用的补丁据报告对某些人有效。当我尝试将它们应用于我的内核时,我没有取得任何成功,而且差异太大,我无法尝试手动修补。由于软件挂起的性质,我不愿意尝试将其强行塞进我的内核;我宁愿等到一个经过良好测试的版本进入内核树。
上述修改中最重要的是电源管理。现代笔记本电脑依赖操作系统来正确地与硬件电源管理系统接口。较旧的笔记本电脑使用称为 APM 的系统,而较新的笔记本电脑开始使用 ACPI 系统代替。正如我之前提到的,默认的 Red Hat 7.3 安装启用了 APM 电源管理而不是 Presario 使用的 ACPI 电源管理系统。2.4.18-4 内核中包含一个 ACPI 系统,但它有点过时,并且不提供 wmacpi 所需的 /proc/acpi 接口。截至本文撰写时,最新的 ACPI 补丁是 acpi-20020726-2.4.18.diff。它为机器的状态和电池状态提供了更好的 /proc/ 接口。此补丁可从 acpi.sf.net 获得,但在你跑去尝试修补你的内核之前,请继续阅读。
幸运的是,新的 ACPI 补丁不能干净地应用于 Red Hat kernel-source-2.4.18-4 RPM 打包的源代码树。应用补丁后,需要进行大量的微调才能使内核正确编译。你还需要 kacpi 补丁,它修复了 Presario 在跟踪 ACPI 中断时遇到的问题。此补丁可从 Juliusz Chroboczek 的优秀网页(见“资源”部分)获得。如果不包含此补丁,内核将错过中断,并且 ACPI 电源管理将被禁用。我稍微修改了 kapcid 补丁,使其不会报告错过的中断——中断太多了,以至于填满了我的日志。
与其向你讲解我为使新版本的 ACPI 工作所做的所有调整,不如提供一个完整的补丁,该补丁处理了我在本文中涵盖的所有问题,可以从我的网站 www.brianlane.com 下载。此补丁将干净地应用于标准的 Red Hat 2.4.18-4 内核树,因此这是修补你的内核的方法(它不像你可能被引导相信的那样困难)。
让我们开始使用以下命令安装一个干净的 RH 7.3 内核
rpm -Uhv kernel-source-2.4.18-4.rpm cd /usr/src/linux-2.4/ cp configs/kernel-2.4.18-athlon.config .config
然后将我的补丁应用于内核树
patch -p1 < /tmp/2.4.18-4presario.patch
并使用 make xconfig 为 ACPI 支持配置内核。
转到常规设置,取消选择 APM 支持,选择 ACPI 支持,并为所有 ACPI 选项键入 y,除了“仅 CPU 枚举”。保存并退出内核配置,然后构建并安装内核
make dep; make clean; make bzImage make modules make modules_install make install
这将创建新的内核,称为 2.4.18-4acpi,将其安装到 /boot 中,创建 initrd 并更新引导加载程序(在我的例子中是 Grub)。
如果你感到冒险,你可以编辑 /etc/grub.conf(或者 LILO,如果你正在使用它),并选择新的内核作为默认内核。但始终保留一个备用内核,以防万一。重新启动你的机器,并确保现在有一个 /proc/acpi 目录树。查看 /proc/acpi/battery/BAT0/state 以查看你电池的当前状态。例如,我的电池在电池供电时看起来像这样
present: yes capacity state: ok charging state: discharging present rate: 12565 mW remaining capacity: 47463 mWh present voltage: 16145 mV
我使用 Window Maker 窗口管理器,因此我选择使用来自 timecop 的优秀 wmacpi 实用程序进行电池监控(参见“资源”部分)。它显示 AC 插头的当前状态、电池充电级别以及一个估计电池剩余时间的计时器。它还会报告电池何时充电,并有一个按钮可以在剩余时间和电池使用时间之间切换显示。从 timecop 的网站下载并像这样安装它
cd /usr/local/src tar xvzf wmacpi-1.34 cd wmacpi-1.34 ./configure make make install cp wmacpi /usr/local/bin/
使用“运行”菜单选项启动 wmacpi,并将其拖到 dock 中。右键单击并选择“设置...”,在 Window Maker 启动时启动,以便它在每次 Window Maker 运行时都会出现。
ACPI 事件,如交流电源移除、电源键按下和盖子关闭,可以被用户空间程序捕获。acpid 程序,可从 acpid.sf.net 获得,可以将这些事件连接到你指定的命令,例如系统关机。acpid 守护程序在后台运行,监视 /proc/acpi/events 中已链接到 /etc/acpid/events 目录中指定的操作的事件。如果你使用来自 acpid 网站的 RPM,安装非常容易。安装后,确保它在启动时运行,使用 chkconfig acpid on; chkconfig --list acpid。
我现在配置我的系统在按下电源键时调用 shutdown -h,但对此要小心。它会立即关闭你的系统,不给你任何时间保存文件或注销。因此,如果你认为你可能会意外按下电源键,添加一个超时可能是一个好主意。
你也可以捕获盖子关闭事件,但没有很好的方法来区分打开和关闭事件。当我尝试从盖子事件运行 xlock 时,它最终运行了两次,因为它捕获了两个事件,一个在盖子关闭时,另一个在盖子打开时。
要捕获电源事件,请将以下文件添加到 /etc/acpi/events/ 目录中,文件名为 power
event=button.power.* action=/sbin/shutdown -h now "%e"
事件条目是一个正则表达式,用于匹配事件。当你执行按下电源键或关闭盖子等操作时,你可以在 /var/log/acpid 中看到这些事件的列表。你也可以捕获电池事件。与盖子事件一样,如果不检查 /proc/acpi/battery 状态,很难判断事件的含义。但是,当电池电量低时,一个简单的断电操作看起来像这样
event=battery.BAT0.* action=/sbin/shutdown -h +2 "%e"
此命令将在第一个电池事件发生后两分钟关闭系统。随着电池电量降低,它将发出更多事件,因此这实际上应该调用一个 Perl 脚本来检查 /proc/acpi/battery/BAT0/state 的内容。但我将把它作为读者的练习。
Presario 配备内置立体声扬声器、耳机插孔和麦克风输入。音频系统使用 AD1886 AC97 编解码器,默认内核支持该编解码器——除了内核附带的驱动程序没有正确初始化编解码器,因此没有声音输出。来自 Santiago Nullo 的一个小补丁解决了这个问题,我已将其包含在我网站上提供的综合 Presario 补丁中。
Red Hat 7.3 正确检测到声音系统并相应地修改了 /etc/modules.conf,因此使用新的 ACPI 内核重新启动后无需修改任何内容。但是,你应该通过运行 xmms 并播放一些你最喜欢的 Ogg Vorbis 或 MP3 文件来确认声音是否正常工作。确保 xmms 输出插件选择了 OSS 驱动程序;如果不是,你最终可能会在你的主目录中得到一堆 .wav 文件。
我使用 Red Hat 7.3 附带的 wmix docking 应用程序从 Window Maker dock 控制我的音频设置。安装提供的 RPM 后,它弹出了所有支持的声卡音量设置,其中一些我甚至不知道它支持。主音量级别可以通过软件或硬件 +/- 键控制。请注意,音量设置是独立的,因此按下硬件键可能会将音量跳到意外的级别。
Presario 附带的调制解调器是一个软件调制解调器,需要操作系统中的驱动程序来处理调制解调器功能,而不是硬件。这曾经意味着调制解调器在运行 Linux 时是无用的,但感谢 Mark Boucher,现在有一个可用于该调制解调器的驱动程序。我从 Mark 的网站(在本文末尾的“资源”部分列出)下载了 hsflinmodem-5.03.03.L3mbsibeta02072100-1.i386.rpm 文件,并使用 rpm -Uhv 安装了它。它没有识别出我拥有的内核版本,因此在以无痛且用户友好的方式询问了一些简单问题(接受默认值)后,它重新编译了自己。感谢作者们制作了一个干净的安装模块。
我安装了我最喜欢的终端程序 Minicom,它包含在 Red Hat 发行版中,并将其指向 /dev/modem(现在是 /dev/ttySHSF0 的符号链接)。然后,我通过拨入我的家庭 Linux 机器来测试连接。驱动程序在使用时使用了不明显的 CPU 时间,并且在我的实验中工作正常。一个令人失望的地方是,它使用 0 响应 +FCLASS=? 命令,表明不支持传真。
驱动程序安装尝试根据时区设置自动检测你的位置,并且可能会弄错你的国家/地区,就像我的情况一样。(我选择了温哥华作为 Red Hat 安装程序的时区设置对话框中最接近的城市选择)。可以通过以 root 身份运行 hsfconfig -country 来更改国家/地区。
如果你没有关注最近的笔记本电脑设计,你可能会惊讶地注意到,大多数新型笔记本电脑不再配备旧的 DB9 串行端口。我查看的所有新型笔记本电脑都在使用 USB 而不是 RS-232,Presario 也不例外。Presario 确实在仍然标准的 25 针并行端口旁边包含两个 USB 端口。对 USB 的支持开箱即用;内核自动检测使用的 USB 集线器类型,并在启动时加载正确的驱动程序,无需任何干预。
你必须通过编辑 /etc/group 将任何有权访问 USB 设备的用户添加到 uucp 组。将用户的逗号分隔列表添加到 uucp: 行。
我已经使用 Handspring Visor 测试了 USB 端口,使用 USB 底座和 pilot-xfer 程序对其进行了热同步。这需要手动安装 Visor 模块,使用 modprobe visor。按下 Visor 底座上的热同步按钮,然后运行 pilot-xfer /dev/ttyUSB1 -b ./backupdir 以将 Visor 的内容保存到备份目录。
我还使用来自 www.rabbitsemiconductor.com 的串行端口适配器测试了该系统,我插入它,内核自动检测到它,并且加载了所有正确的模块。然后我运行了我的 DigiTemp 程序(在将 DigiTemp 温度传感器套件插入串行端口适配器后),并且在不到一分钟的时间内,我正在监控我的午餐盒中的温度。对于那些好奇的人,温度读数为 39.7F。
FireWire 端口是一个更高速的串行接口,用于连接数字摄像机等多媒体设备。我没有任何带有 FireWire 的东西,所以我无法测试这个端口。但是,内核中支持它,因此它可能像 USB 一样容易使用。
Presario 711CL 包含许多特殊按键,这些按键在 Windows 下用于直接启动程序。电源键周围环绕着信息按钮、电子邮件按钮、搜索按钮、音乐按钮和音量控制 +/- 键。还有一个四向键,看起来对滚动很有用。音量控制按钮无需任何努力即可工作。我认为它们是硬连线到声音系统中的;它们似乎独立地调整主音量级别。
我一直无法弄清楚如何使用这些额外的按键。它们不像电源和盖子开关那样由 ACPI 系统报告,并且当我运行 showkey 时,它们不会发出任何按键代码。特殊的 windows 按键确实显示为按键代码 125、126 和 127,分别对应左 windows 键、右 windows 键和菜单键。
在我看来,笔记本电脑应该在某个地方有一个可访问的温度传感器。Presario 使用 VIA686a ISA 桥接芯片组,lm-sensors 软件包中支持该芯片组。但是在修补内核(再次手动)之后,它找不到任何连接到 VIA686a 的传感器。我已经从我的集合中删除了此补丁,因为它没有为这台笔记本电脑添加任何有用的东西。
我在本文开头提到的列表中的最后一项是播放 DVD——甚至可以播放你书架上的所有加密 DVD。哦,我说出来了,不是吗;那个禁忌词——加密。是的,在 Linux 下播放你的 DVD 是可能的,甚至很容易,世界上任何法院都对此无能为力。希望他们不会因为我告诉你哪些网站有 CSS 解码器软件而追捕我。
由于我的简化安装,如果不添加大量我在这台系统上真正不需要的东西,xine 的 RPM 将无法安装。所以我首先从 Ogle 网站 下载了 RPM 并安装了它们。Ogle 网站包含指向你需要安装的所有软件包的链接,以便在你的系统上使 DVD 播放正常工作。该网站还链接到他们推荐的所有软件包的源代码,因此如果 RPM 有太多依赖项,你可以从源代码重新编译。
从 /dev/hdc 创建到 /dev/dvd 的符号链接,然后从命令行运行 ogle。你应该看到你的电影开始播放,但它可能会看起来卡顿。默认的 Red Hat 安装不会为 DVD 驱动器启用 DMA 传输,因此它没有以尽可能快和高效的速度传输数据。别担心,也有解决这个问题的方法。将 /etc/sysconfig/harddisks 文件复制到 /etc/sysconfig/harddiskhdc 并编辑它。更改行 USE_DMA=1 以在此驱动器上启用 DMA 传输。你可能想对 hda 做同样的事情,创建一个名为 harddiskhda 的文件。你可以重新启动以确保这生效,或者你可以运行 hdparm 实用程序来启用 DMA 访问
hdparm -d 1 /dev/dvd
现在再次尝试运行 Ogle。播放应该看起来流畅,并且终端窗口不应抱怨丢帧——至少不是很频繁。
Ogle 播放器在音频同步方面也有一些问题。有时看起来音频滞后于视频播放,并且终端窗口有时会报告它正在重新同步音频。
xine 播放器工作得更好,并且音频同步正确,但我在我精简的系统上安装它有点麻烦。如果你正在运行 GNOME,从 xine.sf.net 安装相关的 RPM 是一项简单的任务。如果你想播放加密的 DVD(否则你为什么要 DVD 播放器?),那么你还需要 libdvdcss 库和用于菜单支持的 dvdnav 插件。请参阅“资源”部分以获取网站链接。
在我的情况下,我下载了所有这些的源代码并编译并安装了它。我遇到的唯一故障是 libdvdread 硬编码为查找 libdvdcss.so.1 库,但我安装了 2.0 版本。这很容易通过编辑 libdvdread-0.9.2/dvdread/dvd_setup.c 文件来纠正,将 libdvdcss.so.1 的出现替换为 libdvdcss.so.2。不需要其他更改,这可能会在新版本的 libdvdread 中修复。
在安装 libdvdread、libdvdcss、libdvdnav、xine-dvdnav、xine-lib 和 xine-ui 之后,你应该有一个可用的 DVD 播放器。当你第一次运行 xine 时,以 xine -V XShm 运行它,以确保它不使用 xv 显示调用。这将保存首选项到 ~/.xine/ 目录,以便你不需要每次都这样做。如果你忘记这样做,它将尝试使用 xv 并完全锁定笔记本电脑。然后你必须拔下电源插头并取出电池才能重新启动。是的,硬锁定 Linux 系统是可能的;它通常只发生在我处理 X 时。
我对 Presario 笔记本电脑的体验证明了 Linux 从我第一次下载 SLS 发行版以来已经取得了多大的进步,以及它在获得与 Mac OS 一样多的桌面份额之前还有多长的路要走。好消息是,有可能成功地将其安装在 Presario 上并利用该笔记本电脑的所有功能。我要感谢我讨论过的所有程序的作者,感谢他们为推进 Linux 的技术水平所做的努力。尤其有用的是 Juliusz Chroboczek Presario 711 网页,我在那里了解了 kapcid 补丁和声卡补丁。
Juliusz Chroboczek 的 Presario 711 EA 上的 Linux 和 kapcid 补丁
Mark Boucher 页面上的 LinModem 驱动程序
Ogle DVD 播放器网页,libdvdread
Brian Lane 是一位来自华盛顿州 Seabeck 的软件开发人员,他为嵌入式系统、TI DSP 和 Linux 编写软件。他维护着来自他的 www.brianlane.com 域 的各种网页。作为 KPLUG(Kitsap Peninsula Linux 用户组)的前任主席,他现在是 KPLUG 网站 的网站管理员。
电子邮件:bcl@brianlane.com