📄 kernelconfig-building.html
字号:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta name="generator" content="HTML Tidy, see www.w3.org" /><title>建立并安装一个定制的内核</title><meta name="GENERATOR" content="Modular DocBook HTML Stylesheet Version 1.7" /><link rel="HOME" title="FreeBSD 使用手册" href="index.html" /><link rel="UP" title="配置FreeBSD的内核" href="kernelconfig.html" /><link rel="PREVIOUS" title="为什么需要建立一个定制的内核?"href="kernelconfig-custom-kernel.html" /><link rel="NEXT" title="配置文件" href="kernelconfig-config.html" /><link rel="STYLESHEET" type="text/css" href="docbook.css" /><meta http-equiv="Content-Type" content="text/html; charset=GB2312" /></head><body class="SECT1" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#840084"alink="#0000FF"><div class="NAVHEADER"><table summary="Header navigation table" width="100%" border="0" cellpadding="0"cellspacing="0"><tr><th colspan="3" align="center">FreeBSD 使用手册</th></tr><tr><td width="10%" align="left" valign="bottom"><a href="kernelconfig-custom-kernel.html"accesskey="P">后退</a></td><td width="80%" align="center" valign="bottom">章 8. 配置FreeBSD的内核</td><td width="10%" align="right" valign="bottom"><a href="kernelconfig-config.html"accesskey="N">前进</a></td></tr></table><hr align="LEFT" width="100%" /></div><div class="SECT1"><h1 class="SECT1"><a id="KERNELCONFIG-BUILDING" name="KERNELCONFIG-BUILDING">8.3.建立并安装一个定制的内核</a></h1><p>首先,让我们先来看一下建立内核的目录。所有提到的目录都在 <ttclass="FILENAME">/usr/src/sys</tt>中,也可以通过<tt class="FILENAME">/sys</tt>访问。有许多子目录充当了内核的不同部分,但最重要的是<tt class="FILENAME"><varclass="REPLACEABLE">arch</var>/conf</tt>, 你可以在这儿配置内核,然后进行<ttclass="FILENAME">编译</tt>。这里的<var class="REPLACEABLE">arch</var> 可能是<ttclass="FILENAME">i386</tt>, <tt class="FILENAME">alpha</tt>或者<ttclass="FILENAME">pc98</tt> (PC硬件发展分支的一种选择, 在日本很流行).在一个特殊的架构目录中,所有的东西都只为这个架构服务的,其他部分的代码是与所有平台共享的;注意一下这个目录的逻辑结构,所有支持的硬件驱动程序、文件系统、参数选项,都放在各自的目录下。FreeBSD5.X和以上版本已经支持 <ttclass="FILENAME">sparc64</tt>, 和一些其他的还在发展的架构。</p><div class="NOTE"><blockquote class="NOTE"><p><b>注:</b> 如果在你的系统上<span class="emphasis"><iclass="EMPHASIS">没有</i></span><tt class="FILENAME">/usr/src/sys</tt>这个目录,那么内核源代码就没有被安装。最简单的方法是以<tt class="USERNAME">root</tt>身份执行<ttclass="COMMAND">/stand/sysinstall</tt>, 选择<span class="GUIMENUITEM">Configure</span>,接着是<span class="GUIMENUITEM">Distributions</span>, 下来<spanclass="GUIMENUITEM">src</span>, 最后<span class="GUIMENUITEM">sys</span>。如果你已经有一张``官方''FreeBSD系统安装盘;并且你有权限使用光驱,那么你也可以通过下面命令行来安装源代码:</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbd class="USERINPUT">mount /cdrom</kbd><samp class="PROMPT">#</samp> <kbd class="USERINPUT">mkdir -p /usr/src/sys</kbd><samp class="PROMPT">#</samp> <kbd class="USERINPUT">ln -s /usr/src/sys /sys</kbd><samp class="PROMPT">#</samp> <kbdclass="USERINPUT">cat /cdrom/src/ssys.[a-d]* | tar -xzvf -</kbd></pre></blockquote></div><p>接下来, 切换到<tt class="FILENAME"><var class="REPLACEABLE">arch</var>/conf</tt>目录下面, 拷贝<ttclass="FILENAME">GENERIC</tt>配置文件,并给这个文件起一个容易辨认的名称,它就是你的内核名称。例如:</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbd class="USERINPUT">cd /usr/src/sys/i386/conf</kbd><samp class="PROMPT">#</samp> <kbd class="USERINPUT">cp GENERIC MYKERNEL</kbd></pre><p>通常,这个名称是大写的,如果你正维护着多台不同硬件的FreeBSD机器,以你机器的域名来命名是非常好的主意。我们把它命名为<ttclass="FILENAME">MYKERNEL</tt>就是这个原因。</p><div class="TIP"><blockquote class="TIP"><p><b>提示:</b> 保存你的内核配置文件到目录<tt class="FILENAME">/usr/src</tt>是个坏注意.如果你正在体验系统,有可能你打算仅仅删掉<tt class="FILENAME">/usr/src</tt>然后从新开始.你这样做完5秒种后你才意识到你已经删掉了你定制的内核配置文件。 不要直接编辑<ttclass="FILENAME">GENERIC</tt>,因为在你下次<ahref="cutting-edge.html">更新你的源码树</a>, 你所做的内核修改会被覆盖掉。</p><p>你可以把你的内核配置文件到某个地方,然后建立符号链接到<ttclass="FILENAME">i386</tt>目录。</p><p>例如:</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbd class="USERINPUT">cd /usr/src/sys/i386/conf</kbd><samp class="PROMPT">#</samp> <kbd class="USERINPUT">mkdir /root/kernels</kbd><samp class="PROMPT">#</samp> <kbd class="USERINPUT">cp GENERIC /root/kernels/<varclass="REPLACEABLE">MYKERNEL</var></kbd> <samp class="PROMPT">#</samp> <kbd class="USERINPUT">ln -s /root/kernels/<varclass="REPLACEABLE">MYKERNEL</var></kbd></pre></blockquote></div><div class="NOTE"><blockquote class="NOTE"><p><b>注:</b> 你必须以<ttclass="USERNAME">root</tt>帐号执行这些和接下来命令,否则你会得到<spanclass="ERRORTYPE">permission denied</span> errors。</p></blockquote></div><p>现在,用你喜欢的编辑器编辑<tt class="FILENAME">MYKERNEL</tt> 。如果你刚刚开始,那唯一能用的编辑器可能就是<b class="APPLICATION">vi</b>,它由于太复杂而不在这儿介绍了,但在<ahref="bibliography.html">参考书目</a>中有许多书会介绍到它。然而,FreeBSD中最容易的编辑器是<b class="APPLICATION">ee</b>,如果你是一个初学者,它是一个非常好的选择。你可以很自由地改变注释行来反映你的配置情况, 或和<ttclass="FILENAME">GENERIC</tt>相比所做的变化。</p><p>如果你在<spanclass="TRADEMARK">SunOS</span>™或者其他BSD系统下定制过内核,那这个文件中的绝大部分将对你非常熟悉。如果你使用的是诸如DOS这样的系统,那<ttclass="FILENAME">GENERIC</tt>配置文件看起来就非常困难, 所以在下面的 <ahref="kernelconfig-config.html">配置文件</a>章节将慢慢地、仔细地进行介绍。</p><div class="NOTE"><blockquote class="NOTE"><p><b>注:</b> 要经常检查<tt class="FILENAME">/usr/src/UPDATING</tt>,在你执行任何更新步骤之前, 记得用最新发布的源代码<ahref="cutting-edge.html">同步你的源码树</a> 在这个文件所有重要的更新事件都会记下来;<ttclass="FILENAME">/usr/src/UPDATING</tt>总是符合你的FreeBSD源代码版本,而且总是比手册所说的信息更加精确。</p></blockquote></div><p>你现在必须编译内核的源代码。你可能需要执行两种方法,这依赖于你如何重新编译内核,和你正使用的FreeBSD的版本。</p><ul><li><p>如果你<span class="emphasis"><iclass="EMPHASIS">只</i></span>安装内核源代码,使用方法1。</p></li><li><p>如果你运行的是FreeBSD4.0以前的版本的话,而且你<span class="emphasis"><iclass="EMPHASIS">不</i></span>升级到 FreeBSD 4.0或更高版本,只要使用方法1。</p></li><li><p>如果你在没有升级源代码的情况下编译一个新内核(也许你只想为内核添加一个新的选项,如<var class="LITERAL">IPFIREWALL</var>),可以使用任何一种方法。</p></li><li><p>如果你正在重建的内核是作为<tt class="MAKETARGET">makeworld</tt>进程的一部分,需要使用方法2。</p></li></ul><div class="PROCEDURE"><p><b>方法1. 用``传统''方法建立一个内核</b></p><ol type="1"><li><p>运行<span class="CITEREFENTRY"><spanclass="REFENTRYTITLE">config</span>(8)</span>来产生内核源代码。</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbd class="USERINPUT">/usr/sbin/config <varclass="REPLACEABLE">MYKERNEL</var></kbd></pre></li><li><p>切换到建立内核的目录。</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbd class="USERINPUT">cd ../compile/<varclass="REPLACEABLE">MYKERNEL</var></kbd></pre><p>对于FreeBSD 版本低于5.0,用下面的代替:</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbd class="USERINPUT">cd ../../compile/<varclass="REPLACEABLE">MYKERNEL</var></kbd></pre></li><li><p>编译内核。</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbd class="USERINPUT">make depend</kbd><samp class="PROMPT">#</samp> <kbd class="USERINPUT">make</kbd></pre></li><li><p>安装新内核。</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbd class="USERINPUT">make install</kbd></pre></li></ol></div><div class="PROCEDURE"><p><b>方法2. 用``新的''方法建立一个内核</b></p><ol type="1"><li><p>切换到<tt class="FILENAME">/usr/src</tt> 目录。</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbd class="USERINPUT">cd /usr/src</kbd></pre></li><li><p>编译内核。</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbd class="USERINPUT">make buildkernel KERNCONF=<varclass="REPLACEABLE">MYKERNEL</var></kbd></pre></li><li><p>安装新内核。</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbd class="USERINPUT">make installkernel KERNCONF=<varclass="REPLACEABLE">MYKERNEL</var></kbd></pre></li></ol></div><div class="NOTE"><blockquote class="NOTE"><p><b>注:</b> 在FreeBSD 4.2老版本里面你必须用<var class="LITERAL">KERNEL=</var>来替换<var class="LITERAL">KERNCONF=</var>。2001年2月2日以后生成的4.2-STABLE就可以认出<var class="LITERAL">KERNCONF=</var>。</p></blockquote></div><p>如果在上次成功的 <tt class="MAKETARGET">buildworld</tt>-<ttclass="MAKETARGET">installworld</tt> 之后还<span class="emphasis"><iclass="EMPHASIS">没有</i></span>通过任何方法升级过源码树 (也就是说没有运行 <bclass="APPLICATION">CVSup</b>, <b class="APPLICATION">CTM</b>,或用过 <bclass="APPLICATION">anoncvs</b>),那么可以 <tt class="COMMAND">config</tt>, <ttclass="MAKETARGET">make depend</tt>, <tt class="COMMAND">make</tt>, <ttclass="MAKETARGET">make install</tt>。</p><p>新内核将会被拷贝到 <tt class="FILENAME">/kernel</tt> 而旧的内核被移到<ttclass="FILENAME">/kernel.old</tt>。现在,关闭系统,然后重新用你的新内核启动系统,如果出现错误,这章后面有一些 <ahref="kernelconfig-trouble.html">故障</a>的解决方法。 如果新内核<ahref="kernelconfig-trouble.html#KERNELCONFIG-NOBOOT">不能引导</a>,请务必读一下有关如何恢复的章节.</p><div class="NOTE"><blockquote class="NOTE"><p><b>注:</b> 对于FreeBSD5.0, 内核将连同他的模块安装在<ttclass="FILENAME">/boot/kernel</tt>,并且老 内核会被备份到<ttclass="FILENAME">/boot/kernel.old</tt>.和引导进程相关的其他文件比如 <spanclass="CITEREFENTRY"><spanclass="REFENTRYTITLE">loader</span>(8)</span>以及配置文件也都安装到了<ttclass="FILENAME">/boot</tt>。 第3方的或者定制的内核模块被放在<ttclass="FILENAME">/boot/modules</tt>,用户应该意识到保持内核模块和编译好的内核同步是非常重要的。内核模块和内核不同步将导致不稳定和错误。</p></blockquote></div><div class="NOTE"><blockquote class="NOTE"><p><b>注:</b>如果你已经添加了新的设备(比如声卡)并且你正在运行FreeBSD 4.X或者更老的版本你将不得不在<tt class="FILENAME">/dev</tt>添加这些设备节点。更多的信息, 请参考章节后面的<a href="kernelconfig-nodes.html">Making Device Nodes</a>。</p></blockquote></div></div><div class="NAVFOOTER"><hr align="LEFT" width="100%" /><table summary="Footer navigation table" width="100%" border="0" cellpadding="0"cellspacing="0"><tr><td width="33%" align="left" valign="top"><a href="kernelconfig-custom-kernel.html"accesskey="P">后退</a></td><td width="34%" align="center" valign="top"><a href="index.html"accesskey="H">起点</a></td><td width="33%" align="right" valign="top"><a href="kernelconfig-config.html"accesskey="N">前进</a></td></tr><tr><td width="33%" align="left" valign="top">为什么需要建立一个定制的内核?</td><td width="34%" align="center" valign="top"><a href="kernelconfig.html"accesskey="U">上一级</a></td><td width="33%" align="right" valign="top">配置文件</td></tr></table></div></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -