📄 doc080.htm
字号:
<HTML>
<HEAD>
<TITLE>Building a Custom Kernel</TITLE>
</HEAD>
<BODY>
<P><A HREF="doc081.htm"><IMG SRC="next.gif" ALT="Next" HEIGHT=24 WIDTH=37></A>
<A HREF="doc000.htm"><IMG SRC="up.gif" ALT="Up" HEIGHT=24 WIDTH=26></A>
<A HREF="doc079.htm"><IMG SRC="previous.gif" ALT="Previous" HEIGHT=24 WIDTH=63></A>
<A HREF="doc000.htm"><IMG SRC="contents.gif" ALT="Contents" HEIGHT=24 WIDTH=65></A>
<A HREF="doc136.htm"><IMG SRC="index.gif" ALT="Index" HEIGHT=24 WIDTH=43></A>
<HR></P>
<H2><A NAME="s11.4"></A>11.4 创建定制的核心</H2>
<P><A NAME="i646"></A><A NAME="i647"></A><A NAME="i648"></A></P>
<P>由于LINUX2.0.x内核引入了模组化的概念,创建定制的核心与以往有很大的不同。
在过去您要是想存取特定的硬件设备或文件系统,您得重新编译内核以把新增功能
加入其中。对于一些硬件配置,会使核心迅速增大到难以容忍的地步。其实一些功能
也只是偶尔用的着,将期编连入核心对系统资源来说是一种低效率的使用。LINUX
2.0.x以上的内核将支持按需的动态装载特定硬件或文件系统的模组化驱动程序。</P>
<P>有关内核模组的详细信息可以在第<A HREF="doc064.htm#s9">9</A>, 章,第
<A HREF="doc070.htm#s9.6">9.6</A>. 节找到</P>
<H3><A NAME="s11.4.1"></A>11.4.1 1 创建模组化的内核</H3>
<P><A NAME="i649"></A></P>
<P>只有红帽子LINUX/INTEL和LINUX/SPARC支持模组化内核;红帽子LINIX/ALPHA的
用户必须建立一个单一的系统内核(请查看<A HREF="doc080.htm#s11.4.3">11.4.3</A>).
</P>
<P>为获得模组化内核所带来的强大功能和可扩展性,下面将提供给您这方面的知识。
如果您不想利用模组化的优势,请看第11.4.3节有关创建和安装单一内核的说明。
我们这里假设您已经安装了核心的头文件和源代码,并假设所有的命令均在/usr/src/linux
目录下执行。</P>
<P>重新建立一个核心需要将源代码树置于一种完整和一致的状态。因此,我们推荐您首
先执行命令make mrproper。它将清除目录下所有配置文件和先前生成核心时产生的中
间文件。现在,您需要创建一个配置文件以决定将要生成的核心要包括哪些内容。
根据您的硬件和个人选择不同有三种方法来配置核心。</P>
<UL>
<LI>make config 这是一个交互式的程序。由它来提供各种功能,由您自己回答
Y(要),N(不要),或则M(要,但不连入核心,而以模组话的形式包含)。</LI>
<LI>make menuconfig 这是一个彩色用户界面,菜单驱动的程序。各种功能部件以菜单的形式分类列出,
就象安装红帽子LINUX时一样,您选择需要包含的部件,也就是针对每个条目在
Y(要),N(不要),或者M(以模组的形式加入)的位置点选。</LI>
<LI>make xconfig 这是一个X视窗程序。功能部件分层列于菜单中,用鼠标来进行选择,选择方法
同上。</LI>
</UL>
<P>请注意:为了能够使用kerneld(详情请看第9.6节)和核心模组,您必须在配置时对“kerneld
support”和“module version(CONFIG_MODVERSIONS)support”选择Yes.</P>
<P>请注意:如果您是在一台使用Intel兼容CPU芯片(例如由Cyrix, AMD生产的)的机器上建立核心,我们推荐您在“Processor
type of”上选择386。<A NAME="i650"></A><A NAME="i651"></A><A NAME="i652"></A><A NAME="i653"></A><A NAME="i654"></A><A NAME="i655"></A></P>
<P>如果您想使用先前按照以上方法创建的配置文件(/usr/src/linux/.config)来建立核心,
那么您就不要执行make mrproper 和 make config命令而直接执行makedep再接着执行
make clean为最后编译来进行文件树的配置。</P>
<P>下一步要讲述源代码的编译,生成最终可以用以boot的核心。下面的方法将是在遇到
不当时最易恢复的方法。如果您对其它的方法感兴趣,可以在Kernel-HOWTO或/usr/src/linux目录下
的Makefile中找到详细的信息。</P>
<UL>
<LI>用make boot命令建立核心</LI>
<LI>用make modules命令建立您配置的模组</LI>
<LI>将老的模组移到其它地方:</LI>
<PRE>rm -rf /lib/modules/2.0.29-old
mv /lib/modules/2.0.29 /lib/modules/2.0.29-old
</PRE>
<P>当然,如果您已经升级了核心,将2.0.29替换为您正在使用的就行。</P>
<LI>安装新模组(即便您没有建立任何模组),使用命令?
<TT>make modules_install</TT>. </LI>
</UL>
<P>如果您有一块SCSI卡而且想以模组化的驱动程序访问它,就要建立一个新的initrd映相
文件(请看第<A HREF="doc080.htm#s11.4.2">11.4.2节</A>; 注意在定制的核心中以模组化方式使用SCSI卡的
驱动程序是有实际的原因的)。</P>
<P>为了防止新建核心中可能出现的错误,应当准备一个冗余的内核以备。将一个核心
包括在LILO的选单中十分简单。您只需将/boot目录下的原来的核心文件重新命名,
把新生成的核心拷贝到/boot下,在/etc/lilo.conf中加入相应的几行信息,再执行/sbin/lilo
就可以了。下面是随红帽子LINUX而带的默认的/etc/lilo.conf:</P>
<BLOCKQUOTE>
<PRE><TT><FONT SIZE=-1>boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=100
image=/boot/vmlinuz
label=linux
root=/dev/hda1
read-only</FONT></TT>
</PRE>
</BLOCKQUOTE>
<P>现在您需要更新/etc/lilo.conf。如果您创建了新的initrd映相,就必须告诉LILO去使用它。
在这个例子中我们在/etc/lilo.conf后面添加了四行以表示新增的可以boot的核心。
我们将/boot/vmlinuz重新命名为/boot/vmlinuz.old并改变其标签为old。 我们同样也为新核心增加了initrd一行:</P>
<BLOCKQUOTE>
<PRE><TT><FONT SIZE=-1>boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=100
image=/boot/vmlinuz
label=linux
initrd=/boot/initrd
root=/dev/hda1
read-only
image=/boot/vmlinuz.old
label=old
root=/dev/hda1
read-only</FONT></TT>
</PRE>
</BLOCKQUOTE>
<P><A NAME="i656"></A></P>
<P>现在,在系统boot时,当在LILO boot:您按下了[TAB]键,就会列出两项选择:</P>
<BLOCKQUOTE>
<PRE><TT><FONT SIZE=-1>LILO boot:
linux old</FONT></TT>
</PRE>
</BLOCKQUOTE>
<P>如要boot新建的核心(linux)就直接敲[ENTER],或等到LILO超时。而如果您要boot
老的核心(old),就需键入old并回车。</P>
<P>下面是一个简单的总结:</P>
<UL>
<LI><TT>mv /boot/vmlinuz /boot/vmlinuz.old</TT> </LI>
<LI><TT>cp /usr/src/linux/arch/i386/boot/zImage /boot/vmlinuz</TT> </LI>
<LI>edit <TT>/etc/lilo.conf</TT> </LI>
<LI>run <TT>/sbin/lilo</TT> </LI>
</UL>
<P>您现在可以用新创建的核心boot并注意观察屏幕信息看您的硬件是否被检测到。</P>
<H3><A NAME="s11.4.2"></A>11.4.2 创建initrd映相</H3>
<P><A NAME="i657"></A><A NAME="i658"></A></P>
<P>我们需要一个initrd映相用以在boot时装载SCSI卡的模组化驱动程序。shell脚本文件
/sbin/mkinitrd可以用来创建initrd映相,但要满足以下条件:</P>
<UL>
<LI>回路块设备应当是可用的</LI>
<LI>/etc/conf.modules中应有一行描述SCSI卡的文字,例如:</LI>
<PRE>alias scsi_hostadapter BusLogic
</PRE>
</UL>
<BLOCKQUOTE>
<P>带参数执行/sbin/mkinitrd就可以创建新的initrd映相:: </P>
<PRE><TT><FONT SIZE=-1> /sbin/mkinitrd /boot/newinitrd-image 2.0.12</FONT></TT>
</PRE>
</BLOCKQUOTE>
<P>/boot/newinitrd-image是新生成映相的文件名,而2.0.12表示您要在initrd中使用该版本核心
的相应的模组驱动程序(位于/lib/modules)(但并非得用与当前核心版本一致的模组
驱动程序) </P>
<H3><A NAME="s11.4.3"></A>11.4.3 创建单一的核心</H3>
<P><A NAME="i659"></A><A NAME="i660"></A><A NAME="i661"></A></P>
<P>要建立一个单一的核心,基本方法同建立模组化核心,但有几处不同:</P>
<UL>
<LI>在开始配置核心是仅仅对提问回答Yes或No(不要加入任何模组化的东西)</LI>
<LI>跳过以下几步:</LI>
<PRE>make modules
make modules_install
</PRE>
<LI>编辑/etc/rc.d/rc.sysinit,注释掉包含depmod -a的那一行(只需在该行前加#)</LI>
</UL>
<P>
<HR><A HREF="doc081.htm"><IMG SRC="next.gif" ALT="Next" HEIGHT=24 WIDTH=37></A>
<A HREF="doc000.htm"><IMG SRC="up.gif" ALT="Up" HEIGHT=24 WIDTH=26></A>
<A HREF="doc079.htm"><IMG SRC="previous.gif" ALT="Previous" HEIGHT=24 WIDTH=63></A>
<A HREF="doc000.htm"><IMG SRC="contents.gif" ALT="Contents" HEIGHT=24 WIDTH=65></A>
<A HREF="doc136.htm"><IMG SRC="index.gif" ALT="Index" HEIGHT=24 WIDTH=43></A>
<HR></P>
</BODY>
</HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -