这是一篇描述linux系统从按下电源,到显示bash提示符当中的过程。理解这些细节在你遇到问题或想配置系统时非常有帮助 。
1. 序言
我发现很多在我linux机器上发生的事是我不了解的,这让我十分沮丧。如果你像我一样,想真正了解你的系统而不只是知道如何使用,这篇文章是个好的开始,如果你想成为linux高手的这些背景知识也会很有用。
我假设你有了一台装linux系统的电脑,而且知道一些Unix和PC的基础知识,如果不是这样,Eric S. Raymond的The Unix and Internet Fundamentals HOWTO是很好的文章,它很短,有很好的可读性而且内容全面。
虽然本文章的主线是linux如何启动,但也尝试全面的介绍linux系统,我在每一章节里都加入了练习,如果你进行了实际的操练,你会比阅读学到的更多。
我希望读者们能进行我所知的最好的学习方法,那就是从源代码开始编写系统。意大利哲学家维克 (Giambattista Vico 1668-1744)说过“verum ipsum factum”即“理解来自实践”谢谢Alex(见感谢)提供这则谚语。
如果你想“自力更生”,你应该看看 Gerard Beekmans的Linux From Scratch HOWTO (LFS),LFS在如何编写完整可用的系统方面有详细指导。在LFS官方网站上,你会找到有关的邮件列表。以前曾是文章一部分的内容现在分离出来,成为“Building a Minimal Linux System from Source Code”你可以在从启动到bash提示符主页 上找到。它揭示了如何建立系统,是一个纯粹的学习经验。
描述这些程序是以在启动时的先后顺序来安排的,这意味着如果你以这种顺序来安装文件,你会发现每次系统启动都会离bash提示符近一些。这会从另一方面证明了系统是按照我们所说的顺序启动的。
我推荐你每次都阅读各部分的主要内容,跳过练习和参考书目,然后确定你想了解的深度和想投入的精力。最后回到开始,进行练习和阅读参考文献。
2. 硬件 当你打开电脑,它会自动检测是否一切是否正常。这个过程被称为“启动自检”然后位于ROM中的BIOS引导装入程序会找到引导扇区。一个引导扇区是盘中的第一个段,它带有一个能载入操作系统的程序。引导扇区有神奇的地方被标记为0xAA55 = 43603,就在第0x1FE = 510字节。这是一个段的最后两个字节,硬件就是靠它们来区别这个段是否为引导扇区。
引导程序有一个可用于寻找启动扇区位置的表。我的老机器会先寻找软驱,然后主硬盘。很多现代计算机可以在光盘上寻找启动扇区,如果找到了一个启动扇区,引导程序会把它读入内存然后把控制权交给启动扇区里的程序。在一个标准linux系统中,这个程序就是LILO的第一阶段启动程序,有很多方法来进行启动时的设置,更多细节请参阅LILO的用户手册。很明显,我们关于PC硬件功能有很多好讲,但这里不适合讨论,你可以参考各种关于PC硬件的书籍。
2.1 配置 机器在CMOS里面储存了很多自身信息。包括硬盘和内存的信息,BIOS里的程序可以让你更改这些设置。看看你机器启动时的屏幕信息就能知道如何进入BIOS程序,在我机器上,在启动操作系统前按下delete
2.2 练习 了解PC硬件的很好的方法是在二手市场里攒台机器。在386配置下就可以跑linux,而且不会花费太多。
下载并且做一张Unios的启动盘,这只是一个可启动的“Hello World!”程序,总共一百多行汇编代码。如果用可以理解GNU汇编的软件打开会更易读。
这里有篇指导文章“自己动手”在Roll Your Own 如果你想寻求真正的挑战。
用16进制编辑器打开unios的映像盘,这个映像有512字节长,正好是一段。找到那个神奇的数字0xAA55,找张可引导的盘,做同样的工作。你可以用dd命令来把引导区拷贝成文件:dd if=/dev/fd0 of=boot.sector 注意!正确的命令格式。看看LILO引导程序的源代码
2.3 More Information The Unix and Internet Fundamentals HOWTO by Eric S. Raymond, 特别是第三部分, What happens when you switch on a computer? The LILO User's Guide 的第一章给出了关于PC硬盘分区和启动方面的描述。请看LILO 的网址. The NEW Peter Norton Programmer's Guide to the IBM PC & PS/2, by Peter Norton and Richard Wilton, Microsoft Press 1988 这书很好,不过我现在买不起。
许多关于升级电脑的书。 3. Lilo
当系统在Linux系统上读取一个启动扇区,它实际上读取的是lilo的一部分,称之为“第一阶段启动程序”这是个很小的程序,它的所有工作只是读取“第二阶段启动程序”。第二阶段启动程序会给你一个提示符(如果你安装时这样设置的话)然后启动你所选的操作系统。
当你的电脑已经在运行,你执行lilo实际上在进行“启动布局的安装”,它会读取/etc/lilo.conf然后把引导程序和可用系统清单写入硬盘。
有很多不同的方法来设置启动过程,我刚才解释的只是对于Linux系统最显著和普通的方法,Lilo的用户手册解释了许多“启动概念”的例子。它很值得一读,并且值得一试。
3.1 配置 LILO的配置文件是/etc/lilo.conf. 输入man lilo.conf会有一个帮助。lilo.conf主要存放LILO在启动时要完成的任务。作为Linux的入口,它告诉我们了内核在哪里,那个分区作为根文件系统。对于其他操作系统来说,主要的是他们从哪里启动。
3.2 练习
危险: 小心的进行这个练习。如果出错会把你的主引导区搞砸,并且让你的系统不能运行。确定你有个能用的备份盘并指导如何修复你的系统。阅读下面tomsrtbt的连接,有我推荐的救援盘。最好的预防是用一台不重要的机器。
在你的软盘上建立一个lilo。有没有内核并不重要,当内核准备加载init时你会得到一个“kernel panic”的信息。不过至少你知道lilo在工作。如果你想继续看看软盘上多少内容被运行了。这可能是第二好的学习手段,看看Bootdisk HOWTO和tomsrtbt(网址在下面)
用lilo来启动unios(参考硬件 练习). 作为一个很大的挑战,看看你能否在软盘上完成这个练习A 做一个启动循环。启动主引导区的lilo,然后启动分区的lilo,再起动主引导区的lilo……或者用主引导分区的lilo和4个主分区的lilo做个好玩的大循环!
3.3 更多信息
lilo帮助手册 (man pages) The Lilo package ( lilo), 包括 ``LILO User's Guide'' lilo-u-21.ps.gz (或以后的版本)。你可能已经有了 。看看/usr/doc/lilo,postscript得版本要比纯文本好点。因为有图片和表格。tomsrtbt 最酷的软盘linux,非常好的急救盘。The Bootdisk HOWTO