在/usr/src/sys/i386/conf目录下
![](/icons/62846dou.gif)
可以看到
![](/icons/62846yi.gif)
系列内核配置文件
![](/icons/62846de.gif)
样例
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
目录中最重要
![](/icons/62846de.gif)
文件有GENERIC和LINT
![](/icons/62846dou.gif)
名为GENERIC
![](/icons/62846de.gif)
文件就是通用内核kernel.GENERIC
![](/icons/62846de.gif)
配置文件
![](/icons/62846dou.gif)
而LINT文件中包括FreeBSD支持
![](/icons/62846de.gif)
几乎所有配置参数
![](/icons/62846dou.gif)
并逐
![](/icons/62846yi.gif)
加以解释
![](/icons/62846dou2.gif)
另
![](/icons/62846yi.gif)
些文件则是其他硬件配置下
![](/icons/62846dou.gif)
用于特定目
![](/icons/62846de.gif)
![](/icons/62846de.gif)
配置文件
![](/icons/62846de.gif)
例子
![](/icons/62846dou2.gif)
因此GENERIC和LINT文件是在设置内核时
![](/icons/62846de.gif)
必备参考
![](/icons/62846dou2.gif)
有了这些文件作参考的后
![](/icons/62846dou.gif)
就可以生成针对某个计算机具体设置
![](/icons/62846de.gif)
配置文件就更为简单了
![](/icons/62846dou.gif)
并执行编译内核
![](/icons/62846de.gif)
任务
![](/icons/62846dou2.gif)
- 修改内核
![](/icons/62846de.gif)
般原则
要定制内核
![](/icons/62846dou.gif)
就必须要生成配置文件
![](/icons/62846dou2.gif)
![](/icons/62846yi.gif)
般都是通过更改已有配置文件
![](/icons/62846de.gif)
思路方法来生成特定
![](/icons/62846de.gif)
配置文件
![](/icons/62846dou.gif)
以简化设置工作
![](/icons/62846dou2.gif)
但直接修改已有
![](/icons/62846de.gif)
配置文件
![](/icons/62846de.gif)
方式
![](/icons/62846dou.gif)
如修改GENERIC文件
![](/icons/62846dou.gif)
并不可取
![](/icons/62846dou.gif)
而应该先复制生成
![](/icons/62846yi.gif)
个新
![](/icons/62846de.gif)
配置文件
![](/icons/62846dou.gif)
这样就可以使用多个配置文件
![](/icons/62846dou.gif)
维护多个区别配置
![](/icons/62846de.gif)
内核
![](/icons/62846dou2.gif)
这些内核可以是为
![](/icons/62846yi.gif)
台计算机准备
![](/icons/62846de.gif)
![](/icons/62846dou.gif)
也可以是为多台计算机准备
![](/icons/62846de.gif)
![](/icons/62846dou2.gif)
新配置文件可以很方便
![](/icons/62846de.gif)
从对已有配置文件
![](/icons/62846dou.gif)
如GENERIC
![](/icons/62846dou.gif)
进行复制得到
![](/icons/62846dou2.gif)
例如:
# cd /usr/src/sys/i386/conf
# cp GENERIC mykernel
然后再修改mykernel这个配置文件
![](/icons/62846dou.gif)
第
![](/icons/62846yi.gif)
步需要完成
![](/icons/62846de.gif)
任务是先删除不必要
![](/icons/62846de.gif)
硬件支持选项
![](/icons/62846dou.gif)
这是
![](/icons/62846yinwei.gif)
通用内核支持
![](/icons/62846de.gif)
硬件设备通常要多于计算机系统中实际存在
![](/icons/62846de.gif)
硬件设备
![](/icons/62846dou.gif)
不必要
![](/icons/62846de.gif)
硬件驱动代码会占用不必要
![](/icons/62846de.gif)
内核内存空间
![](/icons/62846dou2.gif)
除了根据管理员对计算机硬件配置
![](/icons/62846de.gif)
了解来进行删除不必要
![](/icons/62846de.gif)
硬件驱动选项的外
![](/icons/62846dou.gif)
比较简便
![](/icons/62846de.gif)
思路方法是根据FreeBSD
![](/icons/62846de.gif)
通用内核在启动时报告
![](/icons/62846de.gif)
信息来判断哪个设备已经探测到
![](/icons/62846dou.gif)
哪个设备没被探测到
![](/icons/62846dou2.gif)
使用系统命令dmesg可以查看系统启动时
![](/icons/62846de.gif)
信息
![](/icons/62846dou.gif)
因此没被探测到
![](/icons/62846de.gif)
设备可以使用命令来得到:
# dmesg | grep “not found”
这个命令输出
![](/icons/62846de.gif)
结果
![](/icons/62846dou.gif)
或者是计算机中并不存在
![](/icons/62846de.gif)
设备
![](/icons/62846dou.gif)
或者是驱动
![](/icons/62846chengxu.gif)
![](/icons/62846de.gif)
参数没有配置正确
![](/icons/62846dou.gif)
没有正确检测到硬件设备
![](/icons/62846de.gif)
情况
![](/icons/62846dou2.gif)
如果确认没有这个硬件设备
![](/icons/62846dou.gif)
就可以在配置文件中将其删除
![](/icons/62846dou2.gif)
有些硬件设置
![](/icons/62846de.gif)
缺省参数和系统中
![](/icons/62846de.gif)
硬件设置并不
![](/icons/62846yi.gif)
致
![](/icons/62846dou.gif)
可以通过更改配置文件中
![](/icons/62846de.gif)
配置参数来改变设置
![](/icons/62846dou.gif)
以达到正确检测硬件
![](/icons/62846de.gif)
目
![](/icons/62846de.gif)
![](/icons/62846dou2.gif)
有些设备在GENERIC配置文件中并没有提供支持
![](/icons/62846dou.gif)
例如声卡设备
![](/icons/62846dou.gif)
以及多处理器支持能力
![](/icons/62846dou2.gif)
如果要想支持这些设置
![](/icons/62846dou.gif)
就要将相应
![](/icons/62846de.gif)
设置参数增添到配置文件中
![](/icons/62846dou.gif)
可以要参考文件LINT中
![](/icons/62846de.gif)
相应设置来完成增添硬件
![](/icons/62846de.gif)
过程
![](/icons/62846dou2.gif)
为了得到
![](/icons/62846yi.gif)
个合适
![](/icons/62846de.gif)
内核
![](/icons/62846dou.gif)
或许需要不止
![](/icons/62846yi.gif)
次
![](/icons/62846de.gif)
更改设置
![](/icons/62846dou2.gif)
当对计算机
![](/icons/62846de.gif)
某些硬件设置不是很清楚
![](/icons/62846dou.gif)
为了节约编译内核次数
![](/icons/62846dou.gif)
可以先通过 UserConfig更改确定正确
![](/icons/62846de.gif)
硬件设置
![](/icons/62846dou.gif)
再重新编译内核
![](/icons/62846de.gif)
这种循序渐进方式
![](/icons/62846dou.gif)
逐步获得硬件
![](/icons/62846de.gif)
正确配置
![](/icons/62846dou2.gif)
重新定制内核不但是为了获得硬件配置
![](/icons/62846de.gif)
正确性
![](/icons/62846dou.gif)
还可以通过更改内核设置支持
![](/icons/62846yi.gif)
些FreeBSD支持
![](/icons/62846de.gif)
特定功能、优化现有能力
![](/icons/62846dou.gif)
以发挥系统
![](/icons/62846de.gif)
最大能力
![](/icons/62846dou.gif)
从而达到将硬件具备
![](/icons/62846de.gif)
最大能力
![](/icons/62846dou.gif)
充分发挥FreeBSD具备
![](/icons/62846de.gif)
强大处理能力
![](/icons/62846dou2.gif)
在生成自己
![](/icons/62846de.gif)
内核配置文件mykernel的后
![](/icons/62846dou.gif)
就可以进入下
![](/icons/62846yi.gif)
步编译安装过程了
![](/icons/62846dou2.gif)
在配置文件所在
![](/icons/62846de.gif)
目录中
![](/icons/62846dou.gif)
输入:
# /usr/sbin/config mykernel
Removing old directory ../../compile/mykernel: Done.
Kernel build directory is ../../compile/mykernel
这个命令将产生
![](/icons/62846yi.gif)
个/usr/src/sys/complie/mykernel
![](/icons/62846de.gif)
目录
![](/icons/62846dou.gif)
其中目录名对应于内核
![](/icons/62846de.gif)
名字
![](/icons/62846dou.gif)
这样就使得系统中可以同时维护多个区别
![](/icons/62846de.gif)
内核
![](/icons/62846dou.gif)
区别
![](/icons/62846de.gif)
内核相互独立而互不干扰
![](/icons/62846dou2.gif)
这个目录中就包括了编译内核所需
![](/icons/62846de.gif)
源文件
![](/icons/62846dou2.gif)
如果这个过程出现
![](/icons/62846cuowu.gif)
![](/icons/62846dou.gif)
就介绍说明配置文件中存在语法
![](/icons/62846cuowu.gif)
![](/icons/62846dou.gif)
config
![](/icons/62846chengxu.gif)
将会提示出错
![](/icons/62846de.gif)
行
![](/icons/62846dou.gif)
以便使用者进行修改
![](/icons/62846dou2.gif)
但是config不会发现配置文件中存在
![](/icons/62846de.gif)
逻辑
![](/icons/62846cuowu.gif)
![](/icons/62846dou.gif)
这些逻辑
![](/icons/62846cuowu.gif)
只能在编译内核时才能发现
![](/icons/62846dou2.gif)
下
![](/icons/62846yi.gif)
步就是进入生成
![](/icons/62846de.gif)
目录中进行编译和安装
![](/icons/62846dou2.gif)
# cd ../../compile/mykernel
# make depend
# make
编译过程需要
![](/icons/62846yi.gif)
些时间以进行编译
![](/icons/62846dou.gif)
这时候就可以作些其他任务等待编译结束
![](/icons/62846dou2.gif)
但如果配置文件存在逻辑
![](/icons/62846cuowu.gif)
![](/icons/62846dou.gif)
在编译时会形成
![](/icons/62846cuowu.gif)
![](/icons/62846dou2.gif)
![](/icons/62846yinwei.gif)
内核配置选项不是相互无关
![](/icons/62846de.gif)
![](/icons/62846dou.gif)
而是存在相关依赖关系
![](/icons/62846dou.gif)
有些设置项会依赖于另外
![](/icons/62846de.gif)
设置项
![](/icons/62846dou2.gif)
当发生这些逻辑
![](/icons/62846cuowu.gif)
![](/icons/62846de.gif)
时候
![](/icons/62846dou.gif)
当所有需要
![](/icons/62846de.gif)
源文件都存在时
![](/icons/62846dou.gif)
就介绍说明配置文件中缺少
![](/icons/62846yi.gif)
些基本参数定义
![](/icons/62846de.gif)
代码
![](/icons/62846dou.gif)
需要重新加入
![](/icons/62846dou2.gif)
例如所有
![](/icons/62846de.gif)
EISA设备依赖于controller eisa0定义
![](/icons/62846de.gif)
EISA控制器
![](/icons/62846dou.gif)
那么删除controller eisa0设置项就会造成编译EISA设备时
![](/icons/62846dou.gif)
缺少controller eisa0对应
![](/icons/62846de.gif)
源
![](/icons/62846chengxu.gif)
中定义
![](/icons/62846de.gif)
![](/icons/62846hanshu.gif)
和变量
![](/icons/62846dou.gif)
就会造成编译失败
![](/icons/62846dou2.gif)
确定没有EISA设备
![](/icons/62846de.gif)
时候
![](/icons/62846dou.gif)
就要删除所有
![](/icons/62846de.gif)
EISA相关选项
![](/icons/62846dou.gif)
以避免逻辑
![](/icons/62846cuowu.gif)
![](/icons/62846dou2.gif)
内核编译成功的后
![](/icons/62846dou.gif)
就可以进行安装了:
# make ![](/icons/62846install.gif)
这将原有内核更改为/kernel.old
![](/icons/62846dou.gif)
然后将编译后产生
![](/icons/62846de.gif)
新内核移到根目录下
![](/icons/62846dou.gif)
命名为/kernel
![](/icons/62846dou2.gif)
此后可以重起系统
![](/icons/62846dou.gif)
检查新内核是否正确
![](/icons/62846dou2.gif)
# reboot
如果新内核
![](/icons/62846de.gif)
配置不正确
![](/icons/62846dou.gif)
造成某些硬件不能正确检测造成不能正常启动
![](/icons/62846dou2.gif)
此时就需要重新用老内核进入系统
![](/icons/62846dou.gif)
以重新进行编译纠正
![](/icons/62846cuowu.gif)
![](/icons/62846dou2.gif)
选择区别内核必须通过Boot Loader
![](/icons/62846de.gif)
交互界面进行
![](/icons/62846dou.gif)
需要在启动时进入Boot Loader
![](/icons/62846dou.gif)
然后可以输入load kernel.old命令
![](/icons/62846dou.gif)
使用老内核启动系统
![](/icons/62846dou.gif)
或者使用kernel.GENERIC 通用内核启动系统
![](/icons/62846dou2.gif)
为了避免第 2次编译内核时
![](/icons/62846dou.gif)
将
![](/icons/62846cuowu.gif)
![](/icons/62846de.gif)
内核保存为kernel.old
![](/icons/62846dou.gif)
覆盖原有
![](/icons/62846de.gif)
正确设置
![](/icons/62846dou.gif)
也可以先将正确
![](/icons/62846de.gif)
内核拷贝为根文件系统中
![](/icons/62846de.gif)
另
![](/icons/62846yi.gif)
个文件
![](/icons/62846dou.gif)
进行备份保存
![](/icons/62846dou.gif)
只有放置在根分区上
![](/icons/62846de.gif)
内核才能正常启动系统
![](/icons/62846dou.gif)
因此备份到其他文件系统中内核意义不大
延伸阅读
最新评论