在 Compaq Presario 711CL 笔记本电脑上安装 Red Hat 7.3

作者:Brian C. Lane

Compaq Presario 711 是我 475MHz AMD 桌面系统的良好升级。我最近从 Costco.com 购买的配置包含的功能太多,无法在此一一列举,但它的性能是我桌面系统的两倍以上,并且包含一个 FireWire 端口和一个 8 倍 DVD 驱动器。预装的 Windows XP 版本对我来说不是一个重要的卖点;我希望在新笔记本电脑上使用 Linux。

Linux 在桌面系统上取得了巨大进步。在桌面上安装像 RH 7.3 这样的现代操作系统几乎对于像 Jerry Pournelle 喜欢称呼的日常计算机用户“明妮阿姨”来说都足够容易了。但是笔记本电脑的安装是另一回事。笔记本电脑上的硬件不如桌面电脑上的硬件通用,但是随着采用带有集成外围设备的 ATX 样式主板,这个问题已经变得不那么严重了。

Installing Red Hat 7.3 on a Compaq Presario 711CL Laptop

Presario 笔记本电脑

我在新 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 运行时都会出现。

对于那些不使用 Window Maker 的人,你可以使用 GkACPIaKpi 来监控电池及其充电状态。

捕获电源事件

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 后,它弹出了所有支持的声卡音量设置,其中一些我甚至不知道它支持。主音量级别可以通过软件或硬件 +/- 键控制。请注意,音量设置是独立的,因此按下硬件键可能会将音量跳到意外的级别。

LinModem 支持

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 集线器类型,并在启动时加载正确的驱动程序,无需任何干预。

Installing Red Hat 7.3 on a Compaq Presario 711CL Laptop

连接器

你必须通过编辑 /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 端口是一个更高速的串行接口,用于连接数字摄像机等多媒体设备。我没有任何带有 FireWire 的东西,所以我无法测试这个端口。但是,内核中支持它,因此它可能像 USB 一样容易使用。

特殊按键

Presario 711CL 包含许多特殊按键,这些按键在 Windows 下用于直接启动程序。电源键周围环绕着信息按钮、电子邮件按钮、搜索按钮、音乐按钮和音量控制 +/- 键。还有一个四向键,看起来对滚动很有用。音量控制按钮无需任何努力即可工作。我认为它们是硬连线到声音系统中的;它们似乎独立地调整主音量级别。

我一直无法弄清楚如何使用这些额外的按键。它们不像电源和盖子开关那样由 ACPI 系统报告,并且当我运行 showkey 时,它们不会发出任何按键代码。特殊的 windows 按键确实显示为按键代码 125、126 和 127,分别对应左 windows 键、右 windows 键和菜单键。

温度传感器

在我看来,笔记本电脑应该在某个地方有一个可访问的温度传感器。Presario 使用 VIA686a ISA 桥接芯片组,lm-sensors 软件包中支持该芯片组。但是在修补内核(再次手动)之后,它找不到任何连接到 VIA686a 的传感器。我已经从我的集合中删除了此补丁,因为它没有为这台笔记本电脑添加任何有用的东西。

播放 DVD

我在本文开头提到的列表中的最后一项是播放 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 补丁

ACPI 主页

ACPI 守护程序主页

Mark Boucher 页面上的 LinModem 驱动程序

Linux USB Visor 主页

Ogle DVD 播放器网页,libdvdread

xine 页面

libdvdcss 页面

用于 xine 菜单和 CSS 支持的 dvdnav 页面

wmacpi 主页

USB 到 DB9 RS-232 串行适配器

Brian Lane 是一位来自华盛顿州 Seabeck 的软件开发人员,他为嵌入式系统、TI DSP 和 Linux 编写软件。他维护着来自他的 www.brianlane.com 域 的各种网页。作为 KPLUG(Kitsap Peninsula Linux 用户组)的前任主席,他现在是 KPLUG 网站 的网站管理员。

电子邮件:bcl@brianlane.com

加载 Disqus 评论