在做Virtualization这段时间,编译过多次,编译Kernel过程中配置这一步是相对来说比较复杂的。对编译内核过程中的配置这一步做详尽的说明吧,总结一下,多数内容始于网上的多篇文章。首发在我的博客:
首先,配置时可能出现的选项,对其选择先来个说明吧。
Typically,yourchoicesforeachoptionare
shownintheformat[Y/m/n/?]Thecapitalizedletteristhedefault,andcanbeselectedbyjustpressingtheEnter
key.Thefourchoicesare:
yBuilddirectlyintothe
kernel.
nLeaveentirelyoutofthekernel.
mBuildasamodule,tobe
loadedifneeded.
Printabriefdescriptive
messageandrepeattheprompt.
y表示是(相应功能将直接编译进内核),m表示模块(相应功能将编译为一个模块,在须要时加载),以及n表示否(相应功能不会包含进内核)。则(对该配置项)复印出简略的描述信息并重复昨天的选择提示。
其次,我使用的最多的两个配置命令分别是:makemuneconfig和makeoldconfig
makeoldconfig和makeconfig类似,而且它的作用是在现有的内核设置文件基础上构建一个新的设置文件,只会向用户提供有关新内核特点的问题,在新内核升级的过程
中,makeoldconfig十分有用,用户将现有的配置文件.config复制到新内核的源码中,执行makeoldconfig,此时,用户只须要回答这些针对新增特点的问题。
make
menuconfig基于终端的一种配置方法,提供了文本模式的图形用户界面,用户可以通过光标联通来浏览所支持的各类特点。使用这用配置方法时,系统中必须安装有ncurese库。在内核树的根目录中,有一个.config文件,它记录了内核的配置选项,可直接对它进行更改,再运行。在.config文件中,每位配置和选项的值只能为”y”和”m”两者之一,倘若不须要这个特点不再支持她,这么可以将对应的选项用”#”注释掉。实际上,假如你手头有合适的.config文件,可以运行makeoldconfig直接按.config的内容来配置$sudo
makeoldconfig
对内核的配置都是围绕.config来展开的.虽然开始.config文件不存在,进行配置后会创造它.
通常来说,内核配置保存于/usr/src/linux-*/.config文件中。在/boot/config-有其备份。请保留它以备后用。
常见的几种配置方法:
为了完成内核的配置,必须切换到root用户,之后转到内核源码目录(就是你下载新内核的目录):
#cd/usr/src/linux/linux-2.6.38
之后执行下边命令之一:
#makeconfig
#makeoldconfig
#makemenuconfig
#makegconfig
#makedefconfig
#makeallyesconfig
#makeallmodconfig
1.makeconfig
基于文本的最为传统的也是最为枯草的一种配置方法,并且它可以使用任何情况linux伊甸园,这些方法会为每一个内核支持的特点向用户提问,假如用户回答“y”,则把特点编译进内核;回答“m”,则它特点作为模块进行编译;回答“n”,则表示不对该特点提供支持
假如回答每位问题前,必须考虑清楚,假如在配置过程中犯了错误给了错误的回答,就只能按“ctcl+c”强行退出了
2.makeoldconfig
makeoldconfig和make
config类似,而且它的作用是在现有的内核设置文件基础上构建一个新的设置文件,只会向用户提供有关新内核特点的问题,在新内核升级的过程中,makeoldconfig十分有用,用户将现有的配置文件.config复制到新内核的源码中,执行makeoldconfig,此时linux怎么读,用户只须要回答这些针对新增特点的问题
makesilentoldconfig:Likeabove,butavoidsclutteringthescreenwith
questionsalreadyanswered.和前面oldconfig一样,但在屏幕上不再出现已在.config中配置好的选项。
3.makemenuconfig
基于终端的一种配置方法,提供了文本模式的图形用户界面,用户可以通过光标联通来浏览所支持的各类特点。使用这用配置方法时,系统中必须安装有ncurese库,否则会显示“UnabletofindtheNcurses
libraies”的错误提示
4.makexoncifg
基于XWinodws的一种配置方法,提供了漂亮的配置窗口,不过只有才能在XServer上使用root用户欲行X应用程序时,才才能使用,它依赖于QT,假如系统中没有安装QT库linux内核定制,则会出现“Unable
tofindtheQTinstallation”的错误提示
5.makegconfig
与makexocnifg类似,不同的是makegconfig依赖于GTK库
6.makedefconfig
根据默认的配置文件arch/i386/defconfig对内核进行配置,生成.config可以用作初始化配置,之后再使用makemenuconfig进行多样化配置
7.makeallyesconfig
尽量多地使用“y”设置内核选项值,生成的配置中包含了全部的内核特点
makeallnoconfig:除必须的选项外,其它选项一律不选.(常用于嵌入式系统).
8.makeallmodconfig
尽可能多的使用“m”设置内核选项值来世成配置文件
下载好Linux内核源代码后,在源代码的根目录执行
makelocalyesconfig或则make
localmodconfig
之后系统都会按照你的硬件手动生成一个适应你的硬件的.config(内核的配置文件)
makelocalmodconfig会执行lsmod命令查看当前系统中加载了什么模块(Modules),并最后将原先的.config中不须要的模块去除,仅保留上面lsmod下来的那些模块,因而简化了内核的配置过程。
这样做确实便捷了好多,而且也有个缺点:该方式仅能使编译出的内核支持当前内核早已加载的模块。由于该方式使用的是lsmod的结果,假若有的模块当前没有加载,这么就不会编到新的内核中。
There’sanadditional“makelocalyesconfig”
target,incaseyoudon’twanttousemodulesand/orinitrds.
几条好的建议:除非您使用初始化ramdisk(initrd),否则绝不要把挂载根文件系统必需的驱动程序(硬件驱动以及文件系统驱动)编译成模块!而倘若您确实使用初始化ramdisk,请为ext2FS支持选项选择Y,由于ramdisk使用该文件系统。您还须要initrd支持。
倘若您系统中有网卡,将它们的驱动编译成模块。这样,您就能否在/etc/modules.conf中用别称定义哪一块网卡第一,哪一块第二,等等。倘若您将驱动程序编译进了内核,它们加载的次序将取决于当年它们链接进内核的次序linux内核定制,而这不一定是您想要的。
最后,假若您不清楚某个选项的含意,请阅读其帮助!而假如该帮助信息仍然不能解决您的苦恼,请保留该选项原先的样子。(在config和oldconfig中可以按钮访问帮助。)
配置最终结束后,请保存您的配置并退出。
参考资料:
编译Linux2.6内核总结:
编译内核:
内核_.config内核配置及Makefile: