注意:以下所有操作都需以 root 用户身份登录。
有三个不同的阶段需要完成,不一定需要按照此处列出的顺序进行(请随意发挥您的想象力)。所述阶段为:
获取并安装 X4.x
获取并编译内核 2.2.18 或 2.4.x(包括 mknod agpgart 相关内容)
巧妙地调整 XF86Config
第一阶段当然只是为那些可能尝试使用 i810 运行 XFree86 3.3.6 失败的人,或者那些甚至没有听说过 X4.x 支持 i810 并且一直在徒劳地与他们的XF86Config文件作斗争的人提供的指南。 我想大多数觉得这些说明有用的人都已经加载了 X4.x。 你们可以跳过这部分。 无论如何,如果您确实需要了解,可以从以下位置获取 X4.x:ftp://ftp.xfree86.org/pub/XFree86/4.0/binaries
但在您急于下载之前,您必须首先确定哪个版本的 X4.x 适合您的系统。 因此,请下载Xinstall.sh并单独运行(从包含以下内容的文件夹中运行Xinstall.sh):
sh Xinstall.sh -check
结果会将您引导至上述 URL 中正确的文件夹,您可以从该文件夹下载适合您系统的文件。
对于基本安装,为了节省下载时间,只需要以下绝对必需品,没有例外(其他是可选的,并且当包含在安装过程中时,我认为会增加粗心和缺乏经验的人出错的几率)
extract[.exe] | Xdoc.tgz | Xvar.tgz |
Xbin.tgz | Xfenc.tgz | Xxserv.tgz |
Xlib.tgz | Xfnts.tgz | Xmod.tgz |
Xman.tgz | Xetc.tgz |
现在您知道了哪些文件集适合您的系统,您可以继续下载适合您的文件集。 然后使用以下命令安装(从包含新下载文件的文件夹中):
sh Xinstall.sh
如果您一切顺利,一切都会顺利进行。 系统会询问您一些问题,README 文件可以比我更好地解释/回答这些问题。 如果某些内容未按预期工作,我建议您参考更详细的上述 README 文件,您绝对应该仔细阅读该文件。 作为新手,我总是在下载、安装、编译甚至起身去洗手间之前阅读 readme 文件。 您永远不会太确定。
这是本阶段的结束。
您可以从 ftp://ftp.kernel.com 获取任一内核。 当然,在您进行操作时,请阅读所有名为 README 的文件。(在 2.4.x 内核随附的 README 文档中,有一个关于将源代码解压到何处的重要说明。请务必阅读。)将内核源代码文件放在/usr/src/kernels中,然后运行以下编译顺序,这是我从一篇 linuxnewbie 文章中学到的(如果我的指示对您来说不够清楚,您应该参考该文章,但它专门针对 2.2.x 内核)。 它可以在以下地址找到:http://www.linuxnewbie.org/nfh/intel/compiling/kernel_update.html。 当然,仍然压缩的内核的位置实际上并不重要,重要的是它被解压缩到可接受的位置。 好的,现在是命令
tar -xzvf /usr/src/kernels/linux-2.4.x.tar.gz
或者如果您下载了压缩更好的 bz2 版本
bzcat /usr/src/kernels/linux-2.4.x.tar.bz2 | tar xv
并观看屏幕输出大量关于正在发生的事情的信息页面。 完成后,它将创建一个新的linux文件夹。
好的,所以,切换到新目录
cd linux
并开始真正的编译过程...
make config
或者最好是
make menuconfig
还有 make xconfig,但是您还没有运行 X,否则您就不会阅读本文了。 所以那行不通。 我很不好意思以如此不完善的方式提及它,但还有类似 make oldconfig 的东西,但我在我的书中找不到任何关于它的参考。 无论如何,我在这里不讨论它,尽管我确信它的过程与下面 make menuconfig 的过程非常相似,如果您很执拗并想使用它的话。
现在,我已经完成了三个基于文本的内核编译 (make config),并且知道它们有多么冗长。 我推荐使用 make menuconfig 代替,它只需要加载 ncurses(您不需要 X),您将进入内核重新编译的美丽界面。 我在 Red Hat 6.1 的自定义安装期间加载了 ncurses,但我忘记了该选项在哪个阶段可用。 否则,ncurses 肯定在您的发行版 CD 中以 rpm 格式提供,因此如果执行 make menuconfig 只是产生错误,请安装 ncurses 并重试。
对于解决我们特定问题,make 过程中最相关的阶段是
尽早选择 EXPERIMENTAL(通过在第一个选项突出显示时按回车键,然后选择随之显示的唯一子选项),
在基本选项的底部附近,进入“字符设备”并选择(不是“M”而是“*”)“/dev/agpgart (AGP) 支持”(仅当遵循上述说明时才可用),以及
选择“/dev/agpgart (AGP) 支持”的相应子选项(再次不是作为模块“M”而是作为内核的静态部分“*”),即“I810/I810 dc100I810e 支持”部分。
注意:以上解释假设您已运行 make menuconfig,因此需要进行一些思考才能将其映射到已发出 make 的情况。 但只需要一点点。
(有人向我指出,将这些功能作为模块加载会更合理,因为它们在运行 startx 之前不需要。 我尚未尝试“可加载模块方式”,并且将在测试后修改 HOWTO 的这一部分。 我在这里推荐静态模式是因为我在 2.4.x 内核的测试版本上运行此过程,并且有人建议我静态加载是一种更安全和更稳定的方式。 现在 2.4.x 已经正式发布,也许模块会更明智。 我会让你知道结果如何。(感谢 Heron Ordonez 的建议。))
当一切结束后,您感觉足够冷静时,请执行以下操作:
make dep |
make clean(不是绝对必要,但没有坏处) |
make bzImage(这部分需要一段时间) |
make modules |
make modules_install |
现在看一下/boot目录。 您可能会看到System.map是到System.map-[您的内核版本]和vmlinuz是到vmlinuz-[您的内核版本]的符号链接。 这种安排对于许多发行版来说是正确的,但并非全部。 我认为有些存储在vmlinuz中/,而System.map位于/boot中。 无论哪种情况,请动动脑筋,并相应地应用这些说明。 因此,基本上您需要删除符号链接,如下所示
rm System.map |
rm vmlinuz |
然后需要创建新的符号链接,链接到即将被复制并同时重命名的、最近创建的文件。 就像这样(假设您有一台 i386 计算机)
cp /usr/src/kernels/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.4.x |
ln -s /boot/vmlinuz-2.4.x /boot/vmlinuz |
cp /usr/src/kernels/linux/System.map /boot/System.map-2.4.x |
ln -s /boot/System.map-2.4.x /boot/System.map |
提示:如果您在/boot中,则不需要使用绝对路径名。 但是,如果您是过度谨慎的类型并且确实使用了绝对路径名,那么您的符号文件的名称会更长。 事实上,这里的整个符号链接都是不必要的,除非您想以这种方式进行。 从本质上讲,最简化地,您可以有一个名为vmlinuz的内核,并将所有其他内核按其版本号命名(或者只是删除它们!),并在您想要启动另一个内核时交换所有名称。 或者为每个内核指定一个唯一的名称,并在/etc/lilo.conf中为每个内核创建一个条目。 这取决于您。
现在您需要编辑/etc/lilo.conf。 这是这样实现的
image=/boot/vmlinuz |
label=[任何您想要的、相关的、易于输入和记住的标签] |
read-only |
root=/dev/hda[n] |
编辑完lilo.conf后,您必须执行此操作
/sbin/lilo
以便让 lilo 知道清晰、闪亮的新 linux 内核,否则(我经历过这种情况)新内核将无法用于启动。 那就太傻了。 所以在完成这一切之后,深吸一口气并重新启动,选择您的新内核,并祈祷着,观看。 它应该可以工作。 如果可以,去庆祝一下。 但不要得意忘形,因为您还需要 mknod agpgart 模块,这是一个简单但必要的步骤,如下所示
cd /dev |
mknod agpgart c 10 175 |
这基本上创建了非常重要的字符设备(没有它 X 无法运行)驱动程序,该驱动程序的作用有点像 i810 芯片组和 X 服务器之间的“中间人”。 (感谢 Heron Ordonez 在这里为我挽回了一些面子。) 非常科学的东西。 抱歉说了这么多。
这是本阶段的结束。
我做了很多这方面的工作,当连续失败 23 次时,它会变得非常乏味,我可以告诉你,所以请注意并仔细阅读 man 手册(在命令提示符下运行man XF86Config)。 首先,我建议运行一点也不友好的 xf86config(注意大小写!)来生成一个基本的XF86Config文件,因为其他工具似乎生成XF86Config的文件在我看来与 X4.x 不兼容。 当您完成 xf86config 询问的问题并到达显卡部分时,将没有任何内容供您选择,因此请选择那个“什么都没有”。 您稍后将在基本文件创建后输入正确的内容。 然后,在尽可能好地回答所有问题后,将文件另存为/etc/X11/XF86Config.
因此,最后,最重要的添加是
Section "Device" |
Identifier "i810" |
Driver "i810" |
VideoRam "4096" |
它应该插入到图形设备部分。 在任何情况下都应该有一个现有的“Device”部分,如果您愿意,您可以编辑它。 从那以后,在为 X 定义了 i810 之后,您应该在任何看到“Device”字段的地方输入“i810”。 我在这里包含了我XF86Config文件中的几个部分作为示例,并希望能更清楚地说明我的意思
Section "Device" |
Identifier "i810" |
Driver "i810" |
VideoRam "4096" |
Section "Screen" |
Identifier "Screen 1" |
Device "i810" |
Monitor "Highscreen 17inch" |
DefaultColorDepth 24 |
SubSection "Display" |
Depth 8 |
Modes "1024x768" |
EndSubSection |
SubSection "Display" |
Depth 15 |
Modes "1024x768" |
EndSubSection |
SubSection "Display" |
Depth 16 |
Modes "1024x768" |
EndSubSection |
SubSection "Display" |
Depth 24 |
Modes "1024x768" |
EndSubSection |
SubSection "Display" |
Depth 32 |
Modes "1024x768" |
EndSubSection |
EndSection |
警告 |
如您所见,我只为 X 提供了“1024x768”选项,并且默认颜色深度为 24 位,因为我喜欢这样,并且 i810 可以轻松应对我的 17 英寸显示器上的分辨率和深度。 在 21 英寸显示器上会如何工作,我不知道。 实验会教会您。 |
我将再次重复一遍,这可能很无聊,但要比我在这里能给出的更完整地理解XF86Config文件的奥秘,可以通过仔细阅读 man 手册来实现(见上文)。 如果您想有机会解决任何必然出现且此处未涵盖的问题,这一点非常重要。
应该可以了。 现在保存XF86Config并运行
startx
它应该可以工作。 它对我很有效。 您会很高兴的。 如果没有,请通过<trussl@hotmail.com>联系我,我将尽力帮助您。
注意:这是一个本节的附注,但可能有所帮助。 在测试运行时,我在执行本 HOWTO 的 XF86Config 部分时遇到了一个小问题。 它源于阅读但没有完全理解一些关于 i810 和 X4.x 在所有分辨率下都无法使用缓冲区扩展工作的说明(或类似的东西)。 无论如何,我没有做关于这方面的笔记,因此不记得我读到的确切内容。 因为我模糊地记得这件事,所以我只能肯定地说以下内容:您需要在您的XF86Config文件开头添加以下节
# 这会加载 DBE 扩展模块 Load "dbe" # 双缓冲扩展 # 这会加载杂项扩展模块,并禁用该模块内 XFree86-DGA 扩展的初始化。 SubSection "extmod" Option "omit xfree86-dga" # 不要初始化 DGA 扩展 因此,如果 X 报告关于 “shape extender” 或 “shape extension” 的错误,您很可能会发现您的 EndSubSection 文件缺少上面列出的节。XF86Config文件缺少上面列出的节。