linux内核编译:FreeBSD编译安装新内核

  在/usr/src/sys/i386/conf目录下可以看到系列内核配置文件样例 bash-2.02$ ls /sys/i386/conf
GENERIC  Makefile.i386  files.i386   majors.i386
LINT   PICOBSD-N.2000 ipfilter    options.i386
LKM    devices.i386  kernel.script
  目录中最重要文件有GENERIC和LINT名为GENERIC文件就是通用内核kernel.GENERIC配置文件而LINT文件中包括FreeBSD支持几乎所有配置参数并逐加以解释些文件则是其他硬件配置下用于特定目配置文件例子因此GENERIC和LINT文件是在设置内核时必备参考有了这些文件作参考的后就可以生成针对某个计算机具体设置配置文件就更为简单了并执行编译内核任务

  • 修改内核般原则
  要定制内核就必须要生成配置文件般都是通过更改已有配置文件思路方法来生成特定配置文件以简化设置工作但直接修改已有配置文件方式如修改GENERIC文件并不可取而应该先复制生成个新配置文件这样就可以使用多个配置文件维护多个区别配置内核这些内核可以是为台计算机准备也可以是为多台计算机准备新配置文件可以很方便从对已有配置文件如GENERIC进行复制得到例如:

# cd /usr/src/sys/i386/conf
# cp GENERIC mykernel
  然后再修改mykernel这个配置文件步需要完成任务是先删除不必要硬件支持选项这是通用内核支持硬件设备通常要多于计算机系统中实际存在硬件设备不必要硬件驱动代码会占用不必要内核内存空间除了根据管理员对计算机硬件配置了解来进行删除不必要硬件驱动选项的外比较简便思路方法是根据FreeBSD通用内核在启动时报告信息来判断哪个设备已经探测到哪个设备没被探测到使用系统命令dmesg可以查看系统启动时信息因此没被探测到设备可以使用命令来得到:

# dmesg | grep “not found”  这个命令输出结果或者是计算机中并不存在设备或者是驱动参数没有配置正确没有正确检测到硬件设备情况如果确认没有这个硬件设备就可以在配置文件中将其删除

  有些硬件设置缺省参数和系统中硬件设置并不可以通过更改配置文件中配置参数来改变设置以达到正确检测硬件

  有些设备在GENERIC配置文件中并没有提供支持例如声卡设备以及多处理器支持能力如果要想支持这些设置就要将相应设置参数增添到配置文件中可以要参考文件LINT中相应设置来完成增添硬件过程

  为了得到个合适内核或许需要不止更改设置当对计算机某些硬件设置不是很清楚为了节约编译内核次数可以先通过 UserConfig更改确定正确硬件设置再重新编译内核这种循序渐进方式逐步获得硬件正确配置

  重新定制内核不但是为了获得硬件配置正确性还可以通过更改内核设置支持些FreeBSD支持特定功能、优化现有能力以发挥系统最大能力从而达到将硬件具备最大能力充分发挥FreeBSD具备强大处理能力

  • 编译和安装内核
  在生成自己内核配置文件mykernel的后就可以进入下步编译安装过程了在配置文件所在目录中输入:

# /usr/sbin/config mykernel
Removing old directory ../../compile/mykernel: Done.
Kernel build directory is ../../compile/mykernel
  这个命令将产生个/usr/src/sys/complie/mykernel目录其中目录名对应于内核名字这样就使得系统中可以同时维护多个区别内核区别内核相互独立而互不干扰这个目录中就包括了编译内核所需源文件

  如果这个过程出现就介绍说明配置文件中存在语法config将会提示出错以便使用者进行修改但是config不会发现配置文件中存在逻辑这些逻辑只能在编译内核时才能发现

  下步就是进入生成目录中进行编译和安装

# cd ../../compile/mykernel
# make depend
# make
  编译过程需要些时间以进行编译这时候就可以作些其他任务等待编译结束但如果配置文件存在逻辑在编译时会形成内核配置选项不是相互无关而是存在相关依赖关系有些设置项会依赖于另外设置项当发生这些逻辑时候当所有需要源文件都存在时就介绍说明配置文件中缺少些基本参数定义代码需要重新加入例如所有EISA设备依赖于controller eisa0定义EISA控制器那么删除controller eisa0设置项就会造成编译EISA设备时缺少controller eisa0对应中定义和变量就会造成编译失败确定没有EISA设备时候就要删除所有 EISA相关选项以避免逻辑

  内核编译成功的后就可以进行安装了:

# make   这将原有内核更改为/kernel.old然后将编译后产生新内核移到根目录下命名为/kernel此后可以重起系统检查新内核是否正确

# reboot  如果新内核配置不正确造成某些硬件不能正确检测造成不能正常启动此时就需要重新用老内核进入系统以重新进行编译纠正选择区别内核必须通过Boot Loader交互界面进行需要在启动时进入Boot Loader然后可以输入load kernel.old命令使用老内核启动系统或者使用kernel.GENERIC 通用内核启动系统



  为了避免第 2次编译内核时内核保存为kernel.old覆盖原有正确设置也可以先将正确内核拷贝为根文件系统中个文件进行备份保存只有放置在根分区上内核才能正常启动系统因此备份到其他文件系统中内核意义不大



Tags:  如何编译linux内核 ubuntu编译内核 内核编译 linux内核编译

延伸阅读

最新评论

发表评论