日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

initrd映像文檔的作用和制作

 印度阿三17 2019-07-24
原文鏈接:http://www.cnblogs.com/hnrainll/archive/2011/06/08/2075154.html

RePrint:http://hi.baidu.com/wangpeng1314/blog/item/212e9e1752377f064b90a7f5.html

我們?cè)诎惭b新內(nèi)核的時(shí)候,通常都會(huì)編輯lilo.conf 和grub.conf 文檔。里面有一段“initrd=/boot/initrd-***.img”(其中的***表示內(nèi)核的版本號(hào))的我們都很少會(huì)注意到,有時(shí)候還會(huì)發(fā)現(xiàn)這一行不要也能夠正常開機(jī)。那這個(gè)initrd***.img究竟是用來干什么的呢? 
   其實(shí)initrd***.img是個(gè)映像文檔,類似ramdisk,把一段程式打包到img里,然后在開機(jī)的時(shí)候在內(nèi)存里開辟一段區(qū)域,一般是2m,釋放到那里運(yùn)行,都是一些初始化的程式,比如sisc_mod、ext3、sd_mod等模塊和insmod、nash等命令。不同內(nèi)核初始化的img能夠相同,也能夠不同,假如沒有,能夠在grub.conf里加上no initrd,他就跳過initrd的檢測和執(zhí)行了,以前似乎就沒有,后來才有的。    
   他的作用是在沒有mount /分區(qū)以前,系統(tǒng)要執(zhí)行一些操作,比如掛載scsi驅(qū)動(dòng),他就把initrd釋放到內(nèi)存里,作一個(gè)虛擬的/,然后執(zhí)行其根目錄下的一個(gè)腳本"linuxrc",運(yùn)行insmod和nash命令掛裝模塊。為什么有的時(shí)候我們?cè)趌ilo或grub的配置文檔中不加入該行都能夠正常開機(jī)呢?這是因?yàn)槲覀円话愕腜C機(jī)都沒有使用scsi硬盤等需要先加載其驅(qū)動(dòng)的設(shè)備,所以就算沒有initrd***.img也能夠正常開機(jī)。但是假如我們要在服務(wù)器上為其編譯新內(nèi)核那就一定不要忘記也為其新建一個(gè)initrd文檔呀!    
   好,下面來看看怎樣查看initrd***.img里面的內(nèi)容和怎樣為您的新內(nèi)核創(chuàng)建一個(gè)新的initrd.img文檔。 
查看initrd.img: 
initrd***.img雖然后綴是“img”,但其實(shí)他是個(gè)gz格式的文檔,我們能夠先把他解壓,然后載掛裝到目錄下: 
1、cp initrd.img initrd.gz 
2、guzip initrd.gz 
3、mount -o loop initrd /mnt/floppy 
進(jìn)入/mnt/floppy目錄,我們就能夠看到initrd***.img文檔的廬山真面目了。 
制作initrd文檔 
當(dāng)我們編譯了一個(gè)新的內(nèi)核,也不要忘了為我們的scsi設(shè)備做一個(gè)新的initrd映像: 
語法: 
mkinitrd 文檔名 內(nèi)核的目錄名 
示例:  
mkinitrd initrd-2.4.19.img 2.4.19 
initrd-2.4.19.img文檔是自己任意取的,但最好對(duì)應(yīng)自己的內(nèi)核版本號(hào)。 
2.4.19是在/lib/modules中的目錄名,對(duì)應(yīng)內(nèi)核的版本。 
當(dāng)然,我們也能夠在掛裝了initrd***.img文檔后直接添加模塊到/lib目錄中,然后修改linuxrc腳本讓其開機(jī)進(jìn)行掛裝。但必須具備一定的shell腳本的能力才行。


                              
http://www./bbs/showthread.php?t=41288
                               怎樣生成內(nèi)核映像文檔initrd.img,有什么作用?? 

    initrd是內(nèi)核啟動(dòng)映象,假如沒有這個(gè)文檔,有時(shí)系統(tǒng)啟動(dòng)時(shí)沒有辦法找到根分區(qū)
    initrd.img這樣類似的文檔,是用下面的命令創(chuàng)建面來。我舉例說明:能夠用兩個(gè)方法,比如我的系統(tǒng)的內(nèi)核版本是2.4.20-8
假如我們重編了內(nèi)核, 就要用下面的兩個(gè)命令來生成映像文檔,否則有時(shí)系統(tǒng)啟動(dòng)時(shí)會(huì)很難找到/根分區(qū)。 
mkinitrd /boot/initrd-.2.4.20-8img 2.4.20-8
   這樣就會(huì)在/boot 目錄中看到initrd-2.4.20-8.img的文檔,其實(shí)您所說的initrd.img就是initrd-2.4.20-8.img文檔的鏈接。
能夠這樣生成
#cd /boot
#ln -s initrd-2.4.20-8.img initrd.img
其實(shí)看列一下目錄就知道這是個(gè)鏈接。
用這個(gè)命令來生成新的內(nèi)核映象,要使新內(nèi)核啟動(dòng),要改變/etc/grub.conf或lilo.conf才能生效。
[root@linuxsir001 boot]# ll initrd.img
lrwxrwxrwx 1 root root 19 5月 24 13:46 initrd.img -> initrd-2.4.20-8.img
也能夠用下面的命令   new-kernel-pkg --mkinitrd --depmod --install 2.4.20-8
這個(gè)命令執(zhí)行的結(jié)果是會(huì)生成intrd文檔,也會(huì)自動(dòng)改/etc/grub.conf或lilo.conf,這樣就一步到位使新內(nèi)核生效。


                                          
http://soft.yesky.com/os/lin/217/2145217.shtml

                     幾個(gè)重要的RedHat Linux內(nèi)核文檔介紹
   在網(wǎng)絡(luò)中,不少服務(wù)器采用的是Linux系統(tǒng)。為了進(jìn)一步提高服務(wù)器的性能,可能需要根據(jù)特定的硬件及需求重新編譯Linux內(nèi)核。編譯Linux內(nèi)核,需要根據(jù)規(guī)定的步驟進(jìn)行,編譯內(nèi)核過程中涉及到幾個(gè)重要的文檔。比如對(duì)于RedHat Linux,在/boot目錄下有一些和Linux內(nèi)核有關(guān)的文檔,進(jìn)入/boot執(zhí)行。
  編譯過RedHat Linux內(nèi)核的人對(duì)其中的System.map、vmlinuz、initrd-2.4.7-10.img印象可能比較深刻,因?yàn)榫幾g內(nèi)核過程中涉及到這些文檔的建立等操作。那么這幾個(gè)文檔是怎么產(chǎn)生的?又有什么作用呢?本文對(duì)此做些介紹。
  一、vmlinuz
  vmlinuz是可引導(dǎo)的、壓縮的內(nèi)核。“vm”代表“Virtual Memory”。Linux 支持虛擬內(nèi)存,不像老的操作系統(tǒng)比如DOS有640KB內(nèi)存的限制。Linux能夠使用硬盤空間作為虛擬內(nèi)存,因此得名“vm”。vmlinuz是可執(zhí)行的Linux內(nèi)核,他位于/boot/vmlinuz,他一般是個(gè)軟鏈接,比如圖中是vmlinuz-2.4.7-10的軟鏈接。
  vmlinuz的建立有兩種方式。一是編譯內(nèi)核時(shí)通過“make zImage”創(chuàng)建,然后通過:“cp /usr/src/linux-2.4/arch/i386/linux/boot/zImage/boot/vmlinuz”產(chǎn)生。zImage適用于小內(nèi)核的情況,他的存在是為了向后的兼容性。
二是內(nèi)核編譯時(shí)通過命令make bzImage創(chuàng)建,然后通過:“cp/usr/src/linux-2.4/arch/i386/linux/boot/bzImage /boot/vmlinuz”產(chǎn)生。bzImage是壓縮的內(nèi)核映像,需要注意,bzImage不是用bzip2壓縮的,bzImage中的bz容易引起誤解,bz表示“big zImage”。 bzImage中的b是“big”意思。 zImage(vmlinuz)和bzImage(vmlinuz)都是用gzip壓縮的。他們不但是個(gè)壓縮文檔,而且在這兩個(gè)文檔的開頭部分內(nèi)嵌有g(shù)zip解壓縮代碼。所以您不能用gunzip 或 gzip ?dc解包vmlinuz。
  內(nèi)核文檔中包含一個(gè)微型的gzip用于解壓縮內(nèi)核并引導(dǎo)他。兩者的不同之處在于,老的zImage解壓縮內(nèi)核到低端內(nèi)存(第一個(gè)640K),bzImage解壓縮內(nèi)核到高端內(nèi)存(1M以上)。假如內(nèi)核比較小,那么能夠采用zImage或bzImage之一,兩種方式引導(dǎo)的系統(tǒng)運(yùn)行時(shí)是相同的。大的內(nèi)核采用bzImage,不能采用zImage。vmlinux是未壓縮的內(nèi)核,vmlinuz是vmlinux的壓縮文檔。
  二、initrd-x.x.x.img
  initrd是“initial ramdisk”的簡寫。initrd一般被用來臨時(shí)的引導(dǎo)硬件到實(shí)際內(nèi)核vmlinuz能夠接管并繼續(xù)引導(dǎo)的狀態(tài)。圖中的initrd-2.4.7-10.img主要是用于加載ext3等文檔系統(tǒng)及scsi設(shè)備的驅(qū)動(dòng)。
  比如,使用的是scsi硬盤,而內(nèi)核vmlinuz中并沒有這個(gè)scsi硬件的驅(qū)動(dòng),那么在裝入scsi模塊之前,內(nèi)核不能加載根文檔系統(tǒng),但scsi模塊存儲(chǔ)在根文檔系統(tǒng)的/lib/modules下。為了解決這個(gè)問題,能夠引導(dǎo)一個(gè)能夠讀實(shí)際內(nèi)核的initrd內(nèi)核并用initrd修正scsi引導(dǎo)問題。initrd-2.4.7-10.img是用gzip壓縮的文檔,initrd實(shí)現(xiàn)加載一些模塊和安裝文檔系統(tǒng)等功能。
  initrd映象文檔是使用mkinitrd創(chuàng)建的。mkinitrd實(shí)用程式能夠創(chuàng)建initrd映象文檔。這個(gè)命令是RedHat專有的。其他Linux發(fā)行版或許有相應(yīng)的命令。這是個(gè)很方便的實(shí)用程式。具體情況請(qǐng)看幫助:man mkinitrd下面的命令創(chuàng)建initrd映象文檔。
三、System.map 
  System.map是個(gè)特定內(nèi)核的內(nèi)核符號(hào)表。他是您當(dāng)前運(yùn)行的內(nèi)核的System.map的鏈接。
  內(nèi)核符號(hào)表是怎么創(chuàng)建的呢? System.map是由“nm vmlinux”產(chǎn)生并且不相關(guān)的符號(hào)被濾出。
  對(duì)于本文中的例子,編譯內(nèi)核時(shí),System.map創(chuàng)建在/usr/src/linux-2.4/System.map。像下面這樣:
  nm /boot/vmlinux-2.4.7-10 > System.map
  下面幾行來自/usr/src/linux-2.4/Makefile:
  nm vmlinux | grep -v ’\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)’ | sort > System.map
  然后復(fù)制到/boot:
  cp /usr/src/linux/System.map /boot/System.map-2.4.7-10
  下圖是System.map文檔的一部分:
  在進(jìn)行程式設(shè)計(jì)時(shí),會(huì)命名一些變量名或函數(shù)名之類的符號(hào)。Linux內(nèi)核是個(gè)很復(fù)雜的代碼塊,有很多的全局符號(hào)。
  Linux內(nèi)核不使用符號(hào)名,而是通過變量或函數(shù)的地址來識(shí)別變量或函數(shù)名。比如不是使用size_t BytesRead這樣的符號(hào),而是像c0343f20這樣引用這個(gè)變量。
  對(duì)于使用電腦的人來說,更喜歡使用那些像size_t BytesRead這樣的名字,而不喜歡像c0343f20這樣的名字。內(nèi)核主要是用c寫的,所以編譯器/連接器允許我們編碼時(shí)使用符號(hào)名,當(dāng)內(nèi)核運(yùn)行時(shí)使用地址。
  然而,在有的情況下,我們需要知道符號(hào)的地址,或需要知道地址對(duì)應(yīng)的符號(hào)。這由符號(hào)表來完成,符號(hào)表是任何符號(hào)連同他們的地址的列表。上圖就是個(gè)內(nèi)核符號(hào)表,由上圖可知變量名checkCPUtype在內(nèi)核地址c01000a5。
  Linux 符號(hào)表使用到2個(gè)文檔:
  /proc/ksyms
  System.map
  /proc/ksyms是個(gè)“proc file”,在內(nèi)核引導(dǎo)時(shí)創(chuàng)建。實(shí)際上,他并不真正的是個(gè)文檔,他只但是是內(nèi)核數(shù)據(jù)的表示,卻給人們是個(gè)磁盤文檔的假象,這從他的文檔大小是0能夠看出來。然而,System.map是存在于您的文檔系統(tǒng)上的實(shí)際文檔。
  當(dāng)您編譯一個(gè)新內(nèi)核時(shí),各個(gè)符號(hào)名的地址要發(fā)生變化,您的老的System.map具備的是錯(cuò)誤的符號(hào)信息。每次內(nèi)核編譯時(shí)產(chǎn)生一個(gè)新的System.map,您應(yīng)當(dāng)用新的System.map來取代老的System.map。
  雖然內(nèi)核本身并不真正使用System.map,但其他程式比如klogd,lsof和ps等軟件需要一個(gè)正確的System.map。假如您使用錯(cuò)誤的或沒有System.map,klogd的輸出將是不可靠的,這對(duì)于排除程式故障會(huì)帶來困難。沒有System.map,您可能會(huì)面臨一些令人煩惱的提示信息。
  另外少數(shù)驅(qū)動(dòng)需要System.map來解析符號(hào),沒有為您當(dāng)前運(yùn)行的特定內(nèi)核創(chuàng)建的System.map他們就不能正常工作。
  Linux的內(nèi)核日志守護(hù)進(jìn)程klogd為了執(zhí)行名稱-地址解析,klogd需要使用System.map。System.map應(yīng)當(dāng)放在使用他的軟件能夠找到他的地方。執(zhí)行:man klogd可知,假如沒有將System.map作為一個(gè)變量的位置給klogd,那么他將按照下面的順序,在三個(gè)地方查找System.map:
  /boot/System.map
  /System.map
  /usr/src/linux/System.map
  System.map也有版本信息,klogd能夠智能地查找正確的映象(map)文檔。

轉(zhuǎn)載于:https://www.cnblogs.com/hnrainll/archive/2011/06/08/2075154.html

來源:https://www./content-4-351101.html

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多