日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

initrd.img相关

發布時間:2024/4/18 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 initrd.img相关 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

initrd 的英文含義是 boot loader initialized RAM disk,就是由 boot loader 初始化的內存盤。在 linux內核啟動前, bootloader 會將存儲介質中的 initrd 文件加載到內存,內核啟動時會在訪問真正的根文件系統前先訪問該內存中的 initrd 文件系統。第一階段啟動的目的是為第二階段的啟動掃清一切障愛,最主要的是加載根文件系統存儲介質的驅動模塊。我們知道根文件系統可以存儲在包括IDE、SCSI、USB在內的多種介質上,如果將這些設備的驅動都編譯進內核,可以想象內核會多么龐大、臃腫。
  
  initrd.img是Linux啟動過程中很重要的一個文件,(如果你編譯內核時將一部分功能編譯為可加載模塊。如果系統的一些設備的驅動編譯為可加載模,那么啟動時如果沒有指定INITRD=/path_to_initrd.img,那么系統啟動或者會失敗,或者啟動后會有設備無法使用(像網卡或者其它設備)。如果沒指定initrd.img或者指定的initrd.img中并沒有包含正確的驅動模塊,則系統啟動時會掛起,并報告"kernel panic: VFS: Unable to mount root fs on 08:06"的錯誤。)
  
    它把kernel的啟動分成兩個階段:在kernel中保留最少最基本的啟動代碼,然后把對各種各樣硬件設備的支持以模塊的方式放在initrd中,這樣就在啟動過程中可以從initrd所mount的根文件系統中裝載需要的模塊。這樣的一個好處就是在保持kernel不變的情況下,通過修改initrd中的內容就可以靈活的支持不同的硬件。在啟動完成的最后階段,根文件系統可以重新mount到其他設備上。
   initrd.img不像通常的以.img為擴展名的ramdisk cramfs文件。它是經過用gzip -9進行壓縮過的ramdisk文件。所以,需要先解壓縮然后在mount,否則會出錯。以下是操作過程。?
  首先將initrd.img拷貝到操作目錄下:
  cp initrd.img /work/initrd.gz
  然后解壓縮:
  gunzip initrd.gz
  解壓后可以看到一個沒有gz后綴的文件initrd
  直接mount該文件:
  mount -o loop initrd /mnt?
  mount成功后,/mnt目錄中將能看到initrd.img中的所有文件及目錄
  在work下建一個目錄initrd
  將mnt下的文件都拷貝到initrd下
  cp /mnt/* ./initrd
  現在就可以對目錄里的文件進行修改了。
  修改完成后
  mkcramfs initrd my.initrd
  gzip -9 my.initrd my.initrd.gz
  再將生成的文件拷貝到/boot目錄下即可
  cp my.initrd.gz /boot/initrd.img
  
  如果自己根據內核來制作initrd.img,如下
Decide on the RAM disk size that you want. Say 8 MB for this example.
dd if=/dev/zero of=imitrd.img bs=1k count=8192
b) Make a filesystem on it. Say ext2fs for this example.
$mke2fs -F -vm0 initrd.img
/*看有的帖子上說是這樣制作initrd文件系統的,不過個人以為下面那個才對,沒試驗過!*/

 cd /lib/modules/kernel_version
  mkinitrd /tmp/initrd-kernel_version.img kernel_version
  cp /tmp/initrd-kernel_version.img /boot
  
  這是一個grub.conf的內容,可以修改一下!
    default=1?
    timeout=10?
    splashimage=(hd0,6)/grub/splash.xpm.gz?
    title Psyche (2.4.18-14 standard)//在啟動菜單里顯示的名字?
    root (hd0,6) //在E盤
    kernel /vmlinuz-2.4.18-14.standard ro root=/dev/hda8 ?
    initrd /initrd-2.4.18-14.standard.img //改成initrd-kernel_version.img
    title Windows xp?
    rootnoverify (hd0,0)?
    chainloader +1??

?

-----------------------------------------------------------------------------------------------------------------------------------------

我想做一個U盤啟動的linux,照處面的步驟進行:
建立initrd.img文件
# mkdir -p /mnt/initrd?
# cd /tmp?
# mkinitrd /tmp/initrd.gz 2.6.18?
2.解壓initrd.img文件,修改啟動腳本linuxrc?
# gunzip initrd.gz?
# mount -o loop /tmp/initrd /mnt/initrd
到這步就出現:mount:?you?must?specify?the?filesystem?type
怎樣指定文件系統都無法mount上去,
我也試過生成2.6.18.img文件,
再mv 2.6.18.img 2.6.18.gz
然后再用gunzip解壓,也是不行。
到底要怎樣才行呢?

你的文件是cpio文件 不是影像文件
你可以用?file?initrd看下 文件類型就可以了
從 Fedora Core 3 開始,默認的 initrd 映像變成了一個經過壓縮的 cpio 歸檔文件。我們不用再使用 loop 設備來將 initrd 作為壓縮映像進行掛載,而是可以將其作為 cpio 歸檔文件來使用

------------------------------------------

cpio –idcmv < 文件名解壓

制作cpio格式initrd
非常簡單:
1. find . | cpio -c -o > initrd.img
2. gzip initrd.img
3. mv initrd.img.gz initrd.img

要注意,cpio 的-c選項別忘了,否則initrd不能正確掛載。

總結

以上是生活随笔為你收集整理的initrd.img相关的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。