2013-03-16 45 views
3

我正在使用coldfire板M5272C3上的uclinux移植。現在我的內核正在使用romfs作爲我的根文件系統從RAM運行。 我不清楚他們的意思,以及何時使用它們一些術語....Initrd,Ramdisk,Initramfs,uclinux

請解釋我在一個簡單可行的方式:

Q1:什麼是initrd的?爲什麼我們需要這個?

Q2:什麼是ramdisk?爲什麼我們需要這個?

Q3:什麼是initramfs?爲什麼和在哪裏使用這個?

Q4:什麼是ramfs?爲什麼和在哪裏使用這個?

請同時參閱文件/參考書在這些方面的深入瞭解....

感謝 Phogat

回答

7

一個ramdisk僅僅指的是內存中的磁盤映像。它使用內核中的ramfs VFS驅動程序實現。 ramdisk的內容將在下一次重新引導或重新啓動時擦除。

接下來我會給你詳細介紹initrdinitramfs

簡單來說,無論initrdinitramfs指早期用戶空間root filesystem(又名rootfs),可以讓你在運行內存一個很小的文件系統。

文檔出現在linux內核源代碼樹的Documentation/filesystems/ramfs-rootfs-initramfs.txt部分,這也會給你一個這些內容的長度描述。

什麼是initrd

需要這種早期文件系統的一種常見情況是加載用於硬盤控制器的驅動程序模塊。如果司機出現在硬盤上,它就會成爲雞與雞蛋的問題。將這些驅動程序作爲此早期rootfs的一部分,可幫助內核加載任何檢測到的硬盤控制器的驅動程序,然後才能從硬盤驅動器掛載實際的根文件系統。解決這個問題的另一種方法是將所有驅動程序模塊都內置到內核中,但是您將以這種方式增加內核二進制文件的大小。這種文件系統映像通常被稱爲initrd。它使用ramfstmpfs執行。它使用回送塊設備來模擬。

引導加載程序將內核映像加載到內存地址,將initrd映像加載到另一個內存地址,並告訴內核在哪裏找到initrd,將引導參數傳遞給內核,並將控制權交給內核讓它繼續啓動過程。

那麼它與initramfs有什麼不同呢?

initramfs是一個更早的階段的文件系統,而內建於內核(當然由內核配置控制)的initrd

據我所知,這兩個initrdinitramfs被這種單一的內核配置控制,但它可能已在最近的內核被改變。

config BLK_DEV_INITRD 

我不會深入到如何建立自己的initramfs,但我可以告訴你,它只是使用cpio格式來存儲文件,並可以使用usr/Kconfig編譯內核時進行配置。即使你沒有指定你自己的initramfs映像,但已經打開了對initramfs的支持,內核會自動嵌入一個非常簡單的initramfs,其中包含/dev/console,/root和其他一些文件/目錄。

此外,還有一個較新的tmpfs文件系統,它通常用於實現內存中的文件系統。實際上,較新的內核使用tmpfs而不是ramfs來實現initrd

UPDATE:

剛好在a similar question

This跌倒也可能是有用的

+0

嗯,我知道這些初始RAM磁盤背後的總體思路和爲什麼需要他們。總而言之,需要加載模塊。現在是唯一的原因? 內核還使用用戶空間助手腳本(從這個臨時文件系統)加載模塊?控件如何從這個臨時文件系統轉移到我的實際文件系統?畢竟文件系統映像本身(或可能)只是一個常規的cpio歸檔文件。它本身沒有任何我相信的智慧。所以這個智能必須被卸載到我想的內核中。你能詳細說明一下嗎? – HighOnMeat 2015-05-02 10:10:36

+0

*「ramdisk ...使用ramfs實現」* - 這是不正確的,與您提到的Linux文檔相矛盾。在整篇文章中,您不恰當地將ramdisk(或rd)與ramfs等同起來。 – sawdust 2015-12-04 19:45:07