分享
 
 
 

FreeBSD连载(59):编译安装新内核

王朝system·作者佚名  2006-11-23
窄屏简体版  字體: |||超大  

编译安装新内核在/usr/src/sys/i386/conf目录下,可以看到一系列内核配置文件的样例。

bash-2.02$ ls /sys/i386/confGENERIC Makefile.i386 files.i386 majors.i386LINT PICOBSD-N.2000 ipfilter options.i386LKM 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 mykernelRemoving 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 install

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

# reboot

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

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

未完,待续。。。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有