關於vmlinux與vmlinuz

最近在搞U盤多系統,從網上下了些發行版的inux ISO文件

發現這裏面很多東西可以現,本着折騰的心態開始不停地百度

下面先來關於vmlinux和vmlinuz的一些介紹:

vmlinuz是可引導的、壓縮的內核,“vm”代表 “Virtual Memory”。Linux 支持虛擬內存,不像老的操作系統比如DOS有640KB內存的限制。Linux能夠使用硬盤空間作爲虛擬內存,因此得名“vm”。vmlinuz是可執行的Linux內核,它位於/boot/vmlinuz,它一般是一個軟鏈接。

vmlinuz的建立有兩種方式:

一是編譯內核時通過“make zImage”創建通過“cp /usr/src/linux-2.4/arch/i386/linux/boot/zImage /boot/vmlinuz”產生。zImage適用於小內核的情況,它的存在是爲了向後的兼容性。
二是內核編譯時通過命令make bzImage創建通過“cp /usr/src/linux-2.4/arch/i386/linux/boot/bzImage /boot/vmlinuz”產生。

bzImage是壓縮的內核映像,需要注意,bzImage不是用bzip2壓縮的,bzImage中的bz容易引起誤解,bz表示“big zImage”。 bzImage中的b是“big”意思。
zImage(vmlinuz)和bzImage(vmlinuz)都是用gzip壓縮的。它們不僅是一個壓縮文件,而且在這兩個文件的開頭部分內嵌有gzip解壓縮代碼。所以你不能用gunzip 或 gzip –dc解包vmlinuz。內核文件中包含一個微型的gzip用於解壓縮內核並引導它。
兩者的不同之處在於,老的zImage解壓縮內核到低端內存(第一個640K), bzImage解壓縮內核到高端內存(1M以上)。如果內核比較小,那麼可以採用zImage 或bzImage之一,兩種方式引導的系統運行時是相同的。大的內核採用bzImage,不能採用zImage。
vmlinux是未壓縮的內核,vmlinuz是vmlinux的壓縮文件。


    initrd是“initial ramdisk”的簡寫(初始RAM磁盤系統,臨時的根分區)。initrd一般被用來臨時的引導硬件到實際內核vmlinuz能夠接管並繼續引導的狀態。

    比如,使用的是scsi硬盤,而內核vmlinuz中並沒有這個scsi硬件的驅動,那麼在裝入scsi模塊之前,內核不能加載根文件系統,但scsi模塊存儲在根文件系統的/lib/modules下。爲了解決這個問題,可以引導一個能夠讀實際內核的initrd內核並用initrd修正scsi引導 問題。

     initrd.gz後綴.gz表明它是一個gunzip文件,即表示它是一個壓縮文件。在剛啓動的時候,真正的文件系統(根分區)還不可用之前,在RAM中模擬一個根分區。這個根文件系統中包含了實現啓動所必要程序。如將內核模塊加載到內核中的工具“insmod”。

    它的生存週期很短,當根分區被加載時它就徹底沒用了。

    如果沒有所謂的磁盤上的根分區,可以把需要用到的程序和必要的程序壓縮在initrd文件,直接通過加載initrd.gz文件,就可以實現一個在RAM中運行的系統了。

    又如,光盤上運行的Linux操作系統,也是通過把操作系統打包到Initrd.gz中,然後直接放到內存,模擬的根分區運行。這樣,即使你沒有安裝linux,照樣可以通過光驅來體驗一把,而不會對現有磁盤系統造成任何改變。


    爲什麼要initrd.img?


    系統內核vmlinuz被加載到內存後開始提供底層支持,在內核的支持下各種模塊,服務等被加載運行。這樣當然是大家最容易接受的方式,曾經的linux就是這樣的運行的。

    假設你的硬盤是scsi 接口而你的內核又不支持這種接口時,你的內核就沒有辦法訪問硬盤,當然也沒法加載硬盤上的文件系統,怎麼辦?把內核加入scsi驅動源碼然後重新編譯出一個新的內核文件替換原來vmlinuz。

    需要改變標準內核默認提供支持的例子還有很多,如果每次都需要編譯內核就太麻煩了。所以後來的linux就提供了一個靈活的方法來解決這些問題---initrd.img。

    initrd.img文件就是個ram disk的映像文件。ramdisk是用一部分內存模擬成磁盤,讓操作系統訪問。ram disk是標準內核文件認識的設備(/dev/ram0)文件系統也是標準內核認識的文件系統。內核加載這個ram disk作爲根文件系統並開始執行其中的"某個文件"(2.6內核是 init文件)來加載各種模塊,服務等。經過一些配置和運行後,就可以去物理磁盤加載真正的root分區了,然後又是一些配置等,最後啓動成功。也就是你只需要定製適合自己的 initrd.img 文件就可以了。這要比重編內核簡單多了,省時省事低風險。


發佈了13 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章