initrd编译进内核
Ⅰ 璇﹁ВDebian绯荤粺涓瀹夎匧inux鏂板唴镙哥殑娴佺▼
涓鐩村筁inux鍐呮牳寰堟湁鍏磋叮锛屼絾鑻︿簬鍏ラ棬涓嶆槗锛岃ょ湡鐪嬩简ldd鍓5绔犵獊铹跺氨𨱒ユ劅瑙変简锛屽厜鐪嬩笉缁冧笉椤剁敤锛岄栧厛灏遍渶瑕佺幆澧冩惌寤恒
浣跨敤镄勬槸Debian 5.0,鍐呮牳2.6.26锛屾插畨瑁呯殑鏂板唴镙镐负2.6.28锛岃繖閲屾湁涓镣归渶瑕佹敞镒忥纴瀹夎呯殑鍐呮牳鐗堟湰链濂借佸ぇ浜庝娇鐢ㄧ紪璇戠殑鐗堟湰锛屼笉铹秅cc绛夋湁浜涗细鎶ラ敊銆
涓嬭浇https://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.28.tar.bz2锛岃В铡嫔埌浠绘剰鐩褰曪纴涓嶉渶瑕佷竴瀹氲佸湪/usr/src鐩褰曚笅銆
鐢变簬鎴戝彧闇瑕佷竴涓鍐呮牳婧愮爜镙戯纴镓浠ョ敓鎴愰厤缃鏂囦欢浣跨敤绠鍗旷殑make oldconfig
1.鐢熸垚config鏂囦欢
浠g爜濡备笅:
make oldconfigmake oldconfig浼氢互浣犲凡链夌殑閰岖疆鏂囦欢杩涜屽为噺鎻愮ず锛岃繖閲屾渶钖庨兘閲囩敤绯荤粺榛樿ゅ硷纴涔熷氨鏄涓璺锲炶溅锛屼笉铹跺彲鑳藉艰嚧链変簺妯″潡渚濊禆鍏崇郴锛屽艰嚧缂栬疟澶辫触銆
2.鐢熸垚鍐呮牳铡嬬缉闀滃儚
浠g爜濡备笅:
make bzImage杩欎细鍦ㄤ綘瀵瑰簲骞冲彴镄刡oot鐩褰曚笅鐢熸垚bzImage锛屽傛垜镄刲inux-2.6.28/arch/x86/boot/bzImage
3.缂栬疟妯″潡
浠g爜濡备笅:
make moles杩欐ユ槸寰堣姳镞堕棿镄勶纴鎱㈡参绛夊緟
4.瀹夎呭唴镙告ā鍧
浠g爜濡备笅:
make moles_install杩欎细鍦ㄤ綘镄/lib/moles/鐩褰曚笅鍒涘缓瀵瑰簲镄勫唴镙哥増链妯″潡
5.瀹夎呭唴镙
浠g爜濡备笅:
make install杩欎细鎶婃垜浠缂栬疟镄勫唴镙稿畨瑁呭埌/boot鐩褰曚笅
6.鍒涘缓initramfs鏂囦欢
浠g爜濡备笅:
update-initramfs -c -k 2.6.28c浠h〃鍒涘缓涓涓鏂扮殑initramfs锛宬鎸囧畾鍐呮牳鐗堟湰
7.镟存柊grub
浠g爜濡备笅:
update-grub濡傛灉涓嶈岃缮鍙浠ユ坠锷ㄩ氲繃淇澶/boot/grub/menu.lst锛屽彲浠ュ弬钥冧箣鍓岖殑閰岖疆鏂囦欢锛屽彧闇瑕佸炲姞title,root,kernel,initrd瀛楁靛氨鍙浠ヤ简銆傛敞镒忥细update-grub鏂板姞镄勫唴镙哥増链灏嗗嚭鐜板湪钥佺増链镄勫墠闱銆
8.reboot锛宔njoy it銆
Ⅱ 如何配置linux内核
在做Virtualization这段时间,编译过多次Linux kernel,编译Kernel过程中配置config这一步是相对来说比较复杂的。对编译内核过程中的配置这一步做详细的说明吧,总结一下,多数内容源于网上的多篇文章。
首发在我的博客:http://renyongjie668.blog.163.com/blog/static/1600531201143010295156/
首先,配置时可能出现的选项,对其选择先来个说明吧。
Typically, your choices for each option are shown in the format [Y/m/n/?] The capitalized letter is the default, and can be selected by just pressing the Enter key. The four choices are:
y Build directly into the kernel.
n Leave entirely out of the kernel.
m Build as a mole, to be loaded if needed.
? Print a brief descriptive message and repeat the prompt.
y表示是(相应功能将直接编译进内核),m表示模块(相应功能将编译为一个模块,在需要时加载),以及n表示否(相应功能不会包含进内核)。?则(对该配置项)打印出简要的描述信息并重复刚才的选择提示。
其次,我使用的最多的两个配置命令分别是:make muneconfig和make oldconfig
make oldconfig和make config类似,但是它的作用是在现有的内核设置文件基础上建立一个新的设置文件,只会向用户提供有关新内核特性的问题,在新内核升级的过程 中,make oldconfig非常有用,用户将现有的配置文件.config复制到新内核的源码中,执行make oldconfig,此时,用户只需要回答那些针对新增特性的问题。
make menuconfig基于终端的一种配置方式,提供了文本模式的图形用户界面,用户可以通过光标移动来浏览所支持的各种特性。使用这用配置方式时,系统中必须安装有ncurese库。
在内核树的根目录中,有一个.config文件,它记录了内核的配置选项,可直接对它进行修改,再运行。在.config文件中,每个配置和选项的值只能为”y”和”m”两者之一,如果不需要这个特性不再支持她,那么可以将对应的选项用”#”注释掉。实际上,如果你手头有合适的.config文件,可以运行make oldconfig 直接按.config的内容来配置$ sudo make oldconfig
对内核的配置都是围绕.config来展开的. 即便开始.config文件不存在,进行配置后会创造它.
一般来说,内核配置保存于/usr/src/linux-*/.config文件中。在/boot/config-<版本>有其备份。请保留它以备后用。
常见的几种配置方式:
为了完成内核的配置,必须切换到root用户,然后转入内核源码目录(就是你下载新内核的目录):
#cd /usr/src/linux/linux-2.6.38
然后执行下面命令之一:
#make config
#make oldconfig
#make menuconfig
#make gconfig
#make defconfig
#make allyesconfig
#make allmodconfig
1.make config
基于文本的最为传统的也是最为枯草的一种配置方式,但是它可以使用任何情况,这种方式会为每一个内核支持的特性向用户提问,如果用户回答“y”,则把特性编译进内核;回答“m”,则它特性作为模块进行编译;回答“n”,则表示不对该特性提供支持
如果回答每个问题前,必须考虑清楚,如果在配置过程中犯了错误给了错误的回答,就只能按“ctcl+c”强行退出了
2.make oldconfig
make oldconfig和make config类似,但是它的作用是在现有的内核设置文件基础上建立一个新的设置文件,只会向用户提供有关新内核特性的问题,在新内核升级的过程 中,make oldconfig非常有用,用户将现有的配置文件.config复制到新内核的源码中,执行make oldconfig,此时,用户只需要回答那些针对新增特性的问题
make silentoldconfig : Like above, but avoids cluttering the screen with questions already answered.和上面oldconfig一样,但在屏幕上不再出现已在.config中配置好的选项。
3.make menuconfig
基于终端的一种配置方式,提供了文本模式的图形用户界面,用户可以通过光标移动来浏览所支持的各种特性。使用这用配置方式时,系统中必须安装有ncurese库,否则会显示“Unable to find the Ncurses libraies”的错误提示
4.make xoncifg
基 于X Winodws的一种配置方式,提供了漂亮的配置窗口,不过只有能够在X Server上使用root用户欲行X应用程序时,才能够使用,它依赖于QT,如果系统中没有安装QT库,则会出现“Unable to find the QT installation”的错误提示
5.make gconfig
与make xocnifg类似,不同的是make gconfig依赖于GTK库
6.make defconfig
按照默认的配置文件arch/i386/defconfig对内核进行配置,生成.config可以用作初始化配置,然后再使用make menuconfig进行定制化配置
7.make allyesconfig
尽量多地使用“y”设置内核选项值,生成的配置中包含了全部的内核特性
make allnoconfig :除必须的选项外,其它选项一律不选. (常用于嵌入式系统).
8.make allmodconfig
尽可能多的使用“m”设置内核选项值来生成配置文件
下载好Linux内核源代码后,在源代码的根目录执行
make localyesconfig或者make localmodconfig
然后系统就会根据你的硬件自动生成一个适应你的硬件的.config (内核的配置文件)
make localmodconfig会执行lsmod命令查看当前系统中加载了哪些模块(Moles),并最后将原来的.config中不需要的模块去掉,仅保留前面lsmod出来的这些模块,从而简化了内核的配置过程。
这样做确实方便了很多,但是也有个缺点:该方法仅能使编译出的内核支持当前内核已经加载的模块。因为该方法使用的是lsmod的结果,如果有的模块当前没有加载,那么就不会编到新的内核中。
There’s an additional “make localyesconfig” target, in case you don’t want to use moles and/or initrds.
几条好的建议:
除非您使用初始化ramdisk (initrd),否则绝不要把挂载根文件系统必需的驱动程序(硬件驱动以及文件系统驱动)编译成模块!而如果您确实使用初始化ramdisk,请为ext2FS支持选项选择Y,因为ramdisk使用该文件系统。您还需要initrd支持。
如果您系统中有网卡,将它们的驱动编译成模块。这样,您就能够在/etc/moles.conf中用别名定义哪一块网卡第一,哪一块第二,等等。如果您将驱动程序编译进了内核,它们加载的顺序将取决于当初它们链接进内核的顺序,而这不一定是您想要的。
最后,如果您不清楚某个选项的含义,请阅读其帮助!而如果该帮助信息依然不能解决您的困惑,请保留该选项原来的样子。(在config和oldconfig中可以按?键访问帮助。)
配置最终结束后,请保存您的配置并退出。
参考资料:
http://www.cnmaizi.com/tech/elebuild/simplify-linux-kernel-config-rapid-compile-method-collect/
http://man.ddvip.com/linux/Mandrakelinuxref/compiling-conf.html
http://www.huomo.cn/os/article-5d18.html
编译 Linux2.6 内核总结: http://www.cublog.cn/u/13991/showart.php?id=79823
编译内核:http://my.chinaunix.net/space.php?uid=25806768&do=blog&id=302764
内核_.config 内核配置及Makefile:http://www.cnblogs.com/parrynee/archive/2010/05/13/1734689.html
Ⅲ glance中的镜像为什么分为kernel和initrd
系统启动的时候,booload会把initrd文件读到内存中,然后把initrd的起始地址告诉内核。内核在运行过程中会解压initrd,然后把initrd挂载为根目录,然后执行根目录中的/initrc脚本
kernel, 内核,一些核心的代码块,如进程管理,它要求体积很小。
initrd, 进入系统所需预告加载的硬件驱动mole的一个最小集。当GRUB加载kernel时,kernel会在内存中将initrd文件mount到rootfs上激活,然后kernel照着initrd中的init一步一步地加载驱动。在initrd文件中所放入的模块,必须是与操作系统同一版本kernel所编译的模块。
Ⅳ Linux内核源码如何编译Ubuntu源代码在哪里呢
编译linux内核步骤:
1、安装内核
如果内核已经安装(/usr/src/目录有linux子目录),跳过。如果没有安装,在光驱中放入linux安装光盘,找到kernel-source-2.xx.xx.rpm文件(xx代表数字,表示内核的版本号),比如RedHat linux的RPMS目录是/RedHat/RPMS/目录,然后使用命令rpm -ivh kernel-source-2.xx.xx.rpm安装内核。如果没有安装盘,可以去各linux厂家站点或者www.kernel.org下载。
2、清除从前编译内核时残留的.o 文件和不必要的关联
cd /usr/src/linux
make mrproper
3、配置内核,修改相关参数,请参考其他资料
在图形界面下,make xconfig;字符界面下,make menuconfig。在内核配置菜单中正确设置个内核选项,保存退出
4、正确设置关联文件
make dep
5、编译内核
对于大内核(比如需要SCSI支持),make bzImage
对于小内核,make zImage
6、编译模块
make moles
7、安装模块
make moles_install
8、使用新内核
把/usr/src/linux/arch/i386/boot/目录内新生成的内核文件bzImage/zImage拷贝到/boot目录,然后修改/etc/lilo.conf文件,加一个启动选项,使用新内核bzImage/zImage启动。格式如下:
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
linear
default=linux-new ### 告诉lilo缺省使用新内核启动linux ###
append="mem=256M"
image=/boot/vmlinuz-2.2.14-5.0
label=linux
read-only
root=/dev/hda5
image=/boot/bzImage(zImage)
label=linux-new
read-only
root=/dev/hda5
保留旧有的启动选项可以保证新内核不能引导的情况,还可以进入linux进行其他操作。保存退出后,不要忘记了最重要的一步,运行/sbin/lilo,使修改生效。
9、重新生成ram磁盘
如果您的系统中的/etc/lilo.conf没有使用了ram磁盘选项initrd,略过。如果您的系统中的/etc/lilo.conf使用了ram磁盘选项initrd,使用mkinitrd initrd-内核版本号,内核版本号命令重新生成ram磁盘文件,例如我的Redhat 6.2:
mkinitrd initrd-2.2.14-5.0 2.2.14-5.0
之后把/etc/lilo.conf中的initrd指向新生成的initrd-2.2.14-5.0文件:
initrd=/boot/initrd-2.2.14-5.0
ram磁盘能使系统性能尽可能的优化,具体参考/usr/src/linux/Documents/initrd.txt文件
10、重新启动,OK!
Ⅳ 我编译的Linux内核为什么会在启动时卡住不动
如果,你的CPU支持内核虚拟化那就直接用linux自带的xen就可以做虚拟机了不必装vmware!