📄 0510osloader.htm
字号:
这一段代表,在 run level 2, 3, 4, 5 时,都会执行 /sbin/mingetty 这个咚咚,
而且执行六个,这也是为何我们 Linux 会提供『六个纯文字终端机』的设定所在啊!
因为 mingetty 就是在启动终端机的指令说。<br><br>
要注意的是那个 respawn 的 init 动作项目,他代表『当后面的指令被终止 (terminal) 时,
init 会主动的重新启动该项目。』这也是为何我们登入 tty1 终端机介面后,以 exit 离开后,
系统还是会重新显示等待使用者输入的画面的原因啊!<br><br>
如果改天您不想要有六个终端机时,可以取消某些终端机介面吗?当然可以啊!
就将上面表格当中的某些项目注解掉即可!例如不想要 tty5 与 tty6 ,就将那两行注解,
则下次重新开机后,您的 Linux 就只剩下『 F1 ~ F4 』有效而已,这样说,可以了解吧!!^_^<br><br>
至于如果我们使用的是 run level 5 呢?那么除了这六个终端机之外, init 还会执行 /etc/X11/prefdm -nodaemon
那个指令喔!该指令我们会在 <a href="0590xwindow.php">X Window</a> 章节再来详谈!
他主要的功能就是在启动 X Window 啦!<br><br>
</div>
<hr><a name="startup_other"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class=text_h2>其他开机相关事项∶</span><br>
<div class=block2>
<li><span class=text_import1>关于模组∶ /etc/modprobe.conf</span>
<div class=block2>
还记得我们在 <a href="#startup_sysinit">/etc/rc.d/rc.sysinit</a>
当中谈到的载入使用者自订模组的地方吗?嘿嘿!就是在 /etc/sysconfig/modules/ 目录下啊!
不过,虽然核心提供的预设模组已经很足够我们使用了,但是,
某些条件下我们还是得对模组进行一些参数的规划,此时,就得要使用到 /etc/modprobe.conf 棉!
举例来说,鸟哥的 FC4 主机的 modprobe.conf 有点像这样∶<br>
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>vi /etc/modprobe.conf</span>
alias eth0 8139too
alias snd-card-0 snd-via82xx
options snd-card-0 index=0
options snd-via82xx index=0
alias usb-controller uhci-hcd
</pre></td></tr></table>
意思是说∶『<span class=text_import2>我的 eth0 这个玩意儿,代表的是使用 8139too 这个核心模组,
至于 snd-card-0 则使用 snd-via82xx 那个模组。此外, snd-card-0 这个模组在使用时,
还使用 index=0 这个参数。</span>』这玩意真的是挺常用的~不过,这个档案通常在安装的时候,
安装程式就会主动的建立这个档案棉~除非您对系统提供的驱动程式模组不满意~~
才会主动的修改这个模组载入的相关档案啦~(早期 2.4.xx 核心版本时,使用的是 /etc/modules.conf 喔!)
更多的相关说明,请 man modprobe.conf 喔!<br><br>
</div>
<li><span class=text_import1>/etc/sysconfig/*</span>
<div class=block2>
不说您也知道,整个开机的过程当中,老是读取的一些服务的相关设定档都是记录在 /etc/sysconfig
目录下的!那么该目录底下有些啥玩意儿?我们先来瞧一瞧!<br>
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>ls -l /etc/sysconfig</span>
-rw-r--r-- 1 root root 194 Jun 25 08:53 authconfig
-rw-r--r-- 1 root root 726 Apr 25 23:54 autofs
-rw-r--r-- 1 root root 39 Jun 25 16:55 clock
drwxr-xr-x 2 root root 4096 May 26 00:52 console
-rw-r--r-- 1 root root 512 Jul 12 06:21 crond
-rw-r--r-- 1 root root 14 Jun 25 08:53 desktop
-rw-r--r-- 1 root root 31 Aug 23 03:13 diskdump
-rw-r--r-- 1 root root 17 Jun 25 16:56 firstboot
-rw-r--r-- 1 root root 25 Jun 25 08:53 grub
-rw-r--r-- 1 root root 1592 Mar 2 2005 harddisks
-rw-r--r-- 1 root root 112 Jun 25 19:53 i18n
-rw-r--r-- 1 root root 991 Nov 2 2004 init
-rw------- 1 root root 1376 Mar 19 2005 iptables-config
-rw-r--r-- 1 root root 180 Jun 25 08:53 kernel
-rw-r--r-- 1 root root 32 Jun 25 08:53 keyboard
-rw-r--r-- 1 root root 168 May 20 03:54 kudzu
drwxr-xr-x 2 root root 4096 May 26 00:52 modules
-rw-r--r-- 1 root root 115 Jun 25 08:53 mouse
-rw-r--r-- 1 root root 43 Jun 25 08:53 network
drwxr-xr-x 4 root root 4096 Jun 25 08:27 networking
drwxr-xr-x 2 root root 4096 Jun 25 21:53 network-scripts
-rw-r--r-- 1 root root 454 May 20 00:07 syslog
-rw-r--r-- 1 root root 66 Mar 7 2005 sysstat
-rw-r--r-- 1 root root 376 Mar 9 2005 xinetd
</pre></td></tr></table>
为了节省篇幅,上表当中我已经省略掉某些档案了,仅列出较重要的几个!
需要注意的是∶<ul>
<li><span class=text_import1>authconfig</span>∶<br>
这个档案主要在规范使用者的身份认证,包括加密与否、加密的机制等;</li></br>
<li><span class=text_import1>clock</span>∶<br>
此档案在设定 Linux 主机的时区,可以使用格林威治时间(GMT)
,也可以使用台湾的本地时间 ( local )。基本上,在 clock 档案内的设定项目『
ZONE 』所参考的时区位于 /usr/share/zoneinfo 目录下的相对路径中。
而且要修改时区的话,还得将 /usr/share/zoneinfo/Asia/Taipei 这个档案复制成为
/etc/localtime 才行!</li><br>
<li><span class=text_import1>desktop</span>∶<br>
这个与预设的 X Window 的视窗管理员 (Window Manager) 有关。
在 FC4 里头预设是以 KDE 为主要的 WM,您也可以自行在这个档案内修订喔!</li><br>
<li><span class=text_import1>i18n</span>∶<br>
i18n 在设定一些语系的使用方面,例如最麻烦的文字介面下的日期显示问题!
如果您是以中文安装的,那么预设语系会被选择 big5 ,所以在纯文字介面之下,
你的档案日期显示就会呈现乱码!这个时候就需要更改一下这里啦!更动这个 i18n
的档案,将里面的 LC_TIME 改成 en 即可!</li><br>
<li><span class=text_import1>keyboard & mouse</span>∶<br>
keyboard 与 mouse 就是在设定键盘与滑鼠的形式;</li><br>
<li><span class=text_import1>network</span>∶<br>
network 可以设定主机名称,以及 GATEWAY 这两个重要资讯呢!</li><br>
<li><span class=text_import1>network-scripts/</span>∶<br>
至于 network-scripts 里面的档案,则是主要用在设定网路卡~
这部份我们在<a href="../linux_server">伺服器架设篇</a>才再次提到!
</ul>
总而言之一句话,这个目录下的档案很重要的啦!开机过程里面常常会读取到的!
</div>
</div>
<hr><a name="startup_chrunlevel"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class=text_h2>Run level 之变换∶</span><br>
<div class=block2>
在我们完成上面的所有资讯后,其实整个 Linux 主机就已经在等待我们使用者的登入啦!
但是,相信您应该还是会有一点疑问的地方,那就是∶『<span class=text_import2>我该如何切换
run level 呢?</span>』会不会很难啊?不会啦!很简单~
但是依据执行的时间而有不同的方式啊!<br><br>
事实上,<span class=text_import2>与 run level 有关的启动其实是在 /etc/rc.d/rc.sysinit
执行完毕之后</spaN>。也就是说,其实 run level 的不同仅是 /etc/rc.d/rc[0-6].d
里面启动的服务不同而已。不过,依据开机是否自动进入不同 run level 的设定,我们可以说∶
<ol><span class=text_import2>
<li>要每次开机都执行某个预设的 run level ,则需要修改 /etc/inittab 内的设定项目,
亦即是『 id:3:initdefault: 』里头的数字啊;</li><br>
<li>如果仅只是暂时变更系统的 run level 时,则使用 init [0-6] 来进行 run level 的变更。
但下次重新开机时,依旧会是以 /etc/inittab 的设定为准。</ol></span>
假设原本我们是以 run level 5 登入系统的,但是因为某些因素,想要切换成为 run level 3 时,
该怎么办呢?很简单啊,利用 init 3 即可切换。但是 init 3 这个动作到底做了什么呢?
我们不是说了吗?事实上,不同的 run level 只是载入的服务不同罢了,
亦即是 /etc/rc.d/rc5.d/ 还有 /etc/rc.d/rc3.d 内的 Sxxname 与 Kxxname 有差异而已。
所以说,当执行 init 3 时,系统会∶<ul>
<li>先比对 /etc/rc.d/rc3.d/ 及 /etc/rc.d/rc5.d 内的 K 与 S 开头的档案;
<li>关闭 /etc/rc.d/rc5.d/ 内不存在于 /etc/rc.d/rc3.d/ 中的服务;
<li>启动 /etc/rc.d/rc3.d/ 内不存在于 /etc/rc.d/rc5.d/ 中的服务。</ul>
也就是说,两个 run level 都存在的服务就不会被关闭啦!如此一来,就很容易切换 run level 了,
而且还不需要重新开机呢!真方便。那我怎么知道目前的 run level 是多少呢?
直接在 bash 当中输入 runlevel 即可啊!<br>
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>runlevel</span>
N 3
</pre></td></tr></table>
够简单的吧! ^_^
</div>
</div>
<hr><a NAME="kernel"></a><img src="images/penguin-m.gif" alt="大标题的图示" height="34" width="25" align="middle" /><span class="text_h1">核心与核心模组∶</span><br>
<div class=block1>
谈完了整个开机的流程,您应该会知道,在整个开机的过程当中,是否能够成功的驱动我们主机的硬体配备,
是核心 (kernel) 的工作!而核心一般都是压缩档,因此在使用核心之前,就得要将他解压缩后,
才能载入主记忆体当中。<br><br>
另外,为了应付日新月异的硬体,目前的核心都是具有『可读取模组化驱动程式』的功能,
亦即是所谓的『 modules (模组化)』的功能啦!所谓的模组化可以将他想成是一个『外挂程式』,
该外挂程式可能由硬体开发厂商提供,也有可能我们的核心本来就支援~不过,较新的硬体,
通常都需要硬体开发商提供驱动程式模组啦!<br><br>
那么核心与核心模组放在哪?<ul>
<li>核心∶ /boot/vmlinuz 或 /boot/vmlinuz-version;
<li>核心解压缩所需 RAM Disk∶ /boot/initrd (/boot/initrd-version);
<li>核心模组∶ /lib/modules/version/kernel 或 /lib/modules/`uname -r`/kernel;
<li>核心原始码∶ /usr/src/linux (要安装才会有!否则预设不安装的!)</ul>
如果该核心被顺利的载入系统当中了,那么就会有几个资讯纪录下来∶<ul>
<li>核心版本∶ /proc/version
<li>系统核心功能∶ /proc/sys/kernel</ul>
问题来啦,如果我有个新的硬体,偏偏我的作业系统不支援,该怎么办?很简单啊!<ul>
<li>重新编译核心,并加入最新的硬体驱动程式原始码;
<li>将该硬体的驱动程式编译成为模组,在开机时载入该模组</ul>
上面第一点还很好理解,反正就是重新编译核心就是了。不过,核心编译很不容易啊!
我们会在后续章节约略介绍核心编译的整个程序。比较有趣的则是将该硬体的驱动程式编译成为模组啦!
关于编译的方法,可以参考后续的 <a href="0520source_code_and_tarball.php">原始码与 tarball</a> 那一章的介绍。
我们这个章节仅是说明一下,如果想要载入一个已经存在的模组时,该如何是好?<br><br>
<hr><a name="kernel_depmod"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class=text_h2>核心模组与相依性∶</span><br>
<div class=block2>
既然要处理核心模组,自然就得要了解了解我们核心提供的模组之间的相关性啦!
基本上,核心的放置处是在 /lib/modules/`uname -r`/kernel 当中,里面主要还分成几个目录∶<br>
<table class="term"><tr><td class="term"><pre>
arch ∶与硬体平台有关的项目,例如 CPU 的等级等等;
crypto ∶核心所支援的加密的技术,例如 md5 或者是 des 等等;
drivers ∶一些硬体的驱动程式,例如显示卡、网路卡、PCI 相关硬体等等;
fs ∶核心所支援的 filesystems ,例如 vfat, reiserfs, nfs 等等;
lib ∶一些函式库;
net ∶与网路有关的各项协定资料,还有防火墙模组 (net/ipv4/netfilter/*) 等等;
sound ∶与音效有关的各项模组;
</pre></td></tr></table>
如果要我们一个一个的去检查这些模组的主要资讯,然后定义出他们的相依性,
我们可能会疯掉吧!所以说,我们的 Linux 当然会提供一些模组相依性的解决方案棉~
对啦!那就是检查 <span class=text_import2>/lib/modules/`uname -r`/modules.dep</span>
这个档案啦!他记录了在核心支援的模组的各项相依性。<br><br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -