ramfs和ramdisk文件系统的制作和启动

2023-08-22 07:20:59来源:面包芯语

在移植Linux内核早期时,如果flash等存储设备的驱动还没写好,可以将文件系统放到内存中运行。


(相关资料图)

方法二:mke2fs

ramdisk制作脚本:

ddif=/dev/zeroof=ramdisk.imagebs=1kcount=15360mke2fs–F–v–m0ramdisk.imagemount–oloopramdisk.image/mnt/loopcp-arootfs/*/mnt/loopumount/mnt/loopgzip–v9ramdisk.imagemkimage-Aarm-Olinux-Tramdisk-Cgzip-n"xxramdiskfilesystem"-dramdisk.image.gzuramdisk.image.gz

过程类似,只不过是先制作一个空的镜像,然后拷贝文件系统的内容。

配置kernel使用ramdisk文件系统

修改uboot的环境变量:

setenvinitrd_high=0xffffffffsetenvbootargsconsole=ttyS0,115200root=/dev/ramrwinit=/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支持:

Generalsetup--->[*]InitialRAMfilesystemandRAMdisk(initramfs/initrd)support

打开ext2文件系统支持:

Filesystems---><*>Secondextendedfssupport

打开ram block支持,并设置大小:

DeviceDrivers--->[*]Blockdevices---><*>RAMblockdevicesupport(16)DefaultnumberofRAMdisks(65536)DefaultRAMdisksize(kbytes)

正确配置后,uboot启动时,能够看到类似如下ramdisk加载的过程:

##LoadinginitRamdiskfromLegacyImageat42000000...ImageName:ImageType:ARMLinuxRAMDiskImage(gzipcompressed)DataSize:2168875Bytes=2.1MiBLoadAddress:00000000EntryPoint:00000000VerifyingChecksum...OK

来源:嵌入式Linux充电站

版权归原作者所有,如有侵权,请联系删除。

标签:

今日热门
More
返回顶部