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!