常見的記憶體檔案系統有:
rootfs,ramfs,ramdisk,tmpfs
1. rootfs:核心啟動的初始始根檔案系統,大部分linux系統正常執行後都會安裝另外的檔案系統,然後忽略rootfs
2. ramfs:基於記憶體的檔案系統.ramfs檔案系統沒有容量大小的限制,它可以根據需要動態增加容量.直接利用了核心的磁碟快取記憶體
3. ramdisk:基於ram的塊裝置,佔據一塊固定的記憶體,事先要使用特定的工具比如mke2fs格式化,還需要乙個檔案系統驅動來讀寫其上的檔案空間固定導致容量有限,要想裝入更多的檔案需要重新格式化.linux的塊裝置緩衝特性, ram disk上的資料被拷貝到page cache(對於檔案資料)和dentry cache(對於目錄項),導致記憶體浪費,它可能不停的動態增長直到耗盡系統的全部記憶體,所以只有root或授權使用者允許使用ramfs
4. tmpfs:增加了容量大小的限制 + 允許把資料寫入交換分割槽.由於增加了這兩個特性,tmpfs允許普通使用者使用
過渡根檔案系統機制:將載入真正的根檔案系統需要的裝置驅動、工具以及初始化程式先載入到記憶體執行.
1. initrd: initial ramdisk
/linuxrc檔案,基於ramdisk技術,檔案系統(ext2等)映象檔案 ————> cpio格式映象檔案
在核心啟動完成後把它複製到/dev/ram塊裝置中, 作為核心載入真正根檔案系統的過渡根檔案系統
2. initramfs: initial ram file system
init檔案,cpio格式映象檔案
在核心啟動完成後把它複製到rootfs中,作為核心初始的根檔案系統,完成掛載系統真正的根檔案系統
initramfs製作與使用:
我們學習都是從輸出乙個hello world開始的,所以這裡就用過渡根檔案系統輸出hello world來說明.
1.編寫程式
#include
int main(int argc, char *argv)
交叉編譯:arm-linux-gcc -static hello.c -o init
2. 打包initramfs映象
find .|cpio -o -h newc|gzip > ~/myinitramfs.cpio.gz
在核心中選擇使用: 注意選擇initramfs的壓縮格式
3. 解包initramfs映象
cpio -i -f myinitramfs.cpio --no-absolute-filenames
zcat myinitramfs.cpio.gz | cpio -i -d -h newc --no-absolute-filenames
4. 核心initramfs的構建
general setup --->
[*] initial ram filesystem and ram disk (initramfs/initrd) support
(/rootfs_dir) initramfs source file(s)
built-in initramfs compression mode (none) ---> none gzip
然後燒錄的時候將檔案系統燒錄即可
Initramfs 能否用作根檔案系統
前言 initramfs 是2.6 核心的乙個新特性。用於替換 initrd.今天試驗了一下,研究其是否可以用作我們的根檔案系統。方法 對比普通啟動 使用 cramfs 根檔案系統 與使用 initramfs 的區別。使用 cpu 的乙個3.25m free running 的時鐘進行計數 有了 j...
initramfs 檔案系統打包進核心
把initramfs編譯到核心裡面去 使用initramfs最簡單的方式,莫過於用已經做好的cpio.gz把kernel裡面那個空的給換掉。這是2.6 kernel天生支援的,所以,你不用做什麼特殊的設定。kernel的config option裡面有一項config initramfs sourc...
zynq的initramfs根檔案系統
採用initramfs方式,把核心和根檔案系統合併編譯在一起。核心版本 linux xlnx xilinx v2015.3.zip 在linux啟動的時候出現如下錯誤 warning unable to open an initial console.vfs cannot open root dev...