ramfs和ramdisk文件系統的制作和啟動

2023-08-21 16:27:04 來源:嵌入式Linux充電站

在移植Linux內核早期時,如果flash等存儲設備的驅動還沒寫好,可以將文件系統放到內存中運行。


【資料圖】

此時可以使用ramfsramdisk,即將內存的一部分用作文件系統。

ramfs

ramfs就是將文件系統和內核一起編譯,編譯出來的鏡像就包括 內核本身和文件系統

內核打開ramfs

Initramfs source file(s)選項中,填入文件系統的路徑即可。

最后,ubootbootargs中需要將init=/sbin/init修改為rdinit=/sbin/init,主要就是initrdinit的區別。

ramdisk

ramdisk也是將內存的一部分用作文件系統,只不過不用像上面一樣要重新編譯內核。

ramdisk制作

ramdisk制作可以使用genext2fs工具或者mke2fs等工具制作。

方法一:genext2fs

genext2fs安裝:

sudo apt-get install genext2fs

ramdisk制作腳本:

genext2fs -b 16384 -d /home/book/rootfs ramdisk.imagegzip –v9 ramdisk.imagemkimage -A arm-O linux -T ramdisk -C gzip -n "xx ramdisk filesystem" -d ramdisk.image.gz uramdisk.image.gz
先使用genext2fs/home/book/rootfs制作成一個名為ramdisk.imageramdisk然后使用gizp壓縮ramdisk.image,得到ramdisk.image.gz最后用mkimage工具生成uramdisk.image.gzuboot使用

方法二:mke2fs

ramdisk制作腳本:

dd if=/dev/zero of=ramdisk.image bs=1k count=15360mke2fs –F –v –m 0 ramdisk.imagemount –o loop ramdisk.image /mnt/loopcp -a rootfs/* /mnt/loopumount /mnt/loopgzip –v9 ramdisk.imagemkimage -A arm -O linux -T ramdisk -C gzip -n "xx ramdisk filesystem" -d ramdisk.image.gz uramdisk.image.gz

過程類似,只不過是先制作一個空的鏡像,然后拷貝文件系統的內容。

配置kernel使用ramdisk文件系統

修改uboot的環境變量:

setenv initrd_high=0xffffffffsetenv bootargs console=ttyS0,115200 root=/dev/ram rw init=/sbin/init; bootm ${loadaddr} ${ramdiskaddr} ${fdtaddr}

initrd_high0xffffffff,表示將initrd加載到最高的可用內存地址上。這樣可以確保在啟動過程中有足夠的內存空間來加載initrd文件。

bootargs中,主要是這句:root=/dev/ram rw init=/sbin/init要對。

bootm啟動中,loadaddr是內核的加載地址,ramdiskaddrramdisk的加載地址,fdtaddr是設備樹的加載地址

制作好的uramdisk.image.gz文件系統,可以在uboot中,先通過tftp命令將uramdisk.image.gz加載到某段內存,例如tftp 82000000 uramdisk.image.gz。最后通過bootm啟動。

kernel配置

打開ramfs支持:

General setup  --- > [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support

打開ext2文件系統支持:

File systems  --- > < * > Second extended fs support

打開ram block支持,并設置大?。?/p>

Device Drivers  --- > [*] Block devices  --- >  < * >   RAM block device support                                          (16)    Default number of RAM disks                               (65536) Default RAM disk size (kbytes)

正確配置后,uboot啟動時,能夠看到類似如下ramdisk加載的過程:

## Loading init Ramdisk from Legacy Image at 42000000 ...   Image Name:      Image Type:   ARM Linux RAMDisk Image (gzip compressed)   Data Size:    2168875 Bytes = 2.1 MiB   Load Address: 00000000   Entry Point:  00000000   Verifying Checksum ... OK

標簽:

上一篇:Linux內核的物理內存組織結構詳解
下一篇:最后一頁