initrd.img、System.map學習札記

       initrd是「initial RAM disk」的簡寫,是一個啓動時加載進內存的小型系統,initrd在內核2.5以前和2.5以後有些不同,2.5以後的採用cpio格式,通常稱爲cpio-initrd,本文以2.5之後的版本爲例,initrd並非必須的,若是不想要initrd,就在編譯內核時必須把全部模塊都靜態編譯進內核中,這樣內核會變得很大,更會引入一些沒必要要的模塊,啓動加載會很慢,若是不想內核變得十分臃腫,就要減小打入的模塊,這就須要initrd發威了,initrd把內核的啓動分紅兩個階段,boot loader把內核和initrd加載到內存中,內核在加載真正的文件系統前會先訪問內存中的initrd,而後把initrd中的內容釋放到rootfs中,initrd解壓后里面的目錄就像一個小型系統,而後會執行initrd中的init腳本,init腳本主要是加載一些驅動模塊,initrd執行完成後開始掛載真正的文件系統,這樣系統就成功的啓動了。 linux

   怎樣解開initrd.img,通常經常使用如下方法: 程序員

   1 採用zcat centos

  2 採用gunzip 函數


  以上方法便可解開initrd.img文件 工具

 解開後怎樣打包initrd.img文件呢 ,採用如下辦法: spa

  

  這樣把解開的initrd.img又打包回去了。 索引

  生成一個當前系統的initrd.img文件,在centos下有個工具叫mkinitrd,在debian下此工具更名爲mkinitramfs ip

  不一樣的內核默認的initrd.img裏面的內容以及次級目錄結構都有變化,但主要的一級目錄沒什麼變化。 內存

  System.map就像一個索引文件,他是內核內部文件的索引,可讓外部程序知道內核內部文件的位置。System.map索引的是內核中的變量和函數名稱,這樣能夠方便程序員在寫程序時能夠直接參照這一份Symbol的索引文件,找到所須要的kernel信息,目前較常使用到的內核索引文件有兩個,即/proc/kallsyms和system.map,System.map是靜態的,在內核編譯好安裝後就一直沒有變化了,每次從新編譯內核安裝後此文件都會改變,而/proc/kallsyms是動態變化的,隨着模塊的變化裏面的內容是會實時變更的 it

  vmlinuz是可引導的、壓縮的內核。「vm」表明 「Virtual Memory」。Linux 支持虛擬內存。Linux可以使用硬盤空間做爲虛擬內存,所以得名「vm」。vmlinuz是可執行的Linux內核,它位於/boot/vmlinuz,它通常是一個軟連接,內核編譯時經過命令make bzImage建立,而後經過:cp /usr/src/linux-2.4/arch/i386/linux/boot/bzImage /boot/vmlinuz產生。bzImage是壓縮的內核映像,須要注意,bzImage是用gzip壓縮的,bzImage中的bz容易引發誤解,bz表示「big zImage」。 bzImage中的b是「big」意思

相關文章
相關標籤/搜索