ramdisk文件系统制作和移植

本文介绍了RAMDisk的概念及其在Linux系统中的应用。包括如何在内核中添加RAMDisk支持,制作RAMDisk根文件系统的过程,以及如何在嵌入式环境中使用RAMDisk。此外,还详细说明了如何在U-Boot环境下设置参数并启动带有RAMDisk的Linux系统。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. RAMDISK简介:

    Linux 中,rootfs 是必不可少的。PC 上主要实现有ramdisk和直接挂载 HDHarddisk,硬盘)上的根文件系统;嵌入式中一般不从 HD 启动,而是从 Flash 启动,最简单的方法是将 rootfs load 到 RAM 的 RAMDisk,稍复杂的就是直接从Flash 读取的Cramfs,更复杂的是在Flash 上分区,并构建JFFS2等文件系统。
            Ramdisk是将一部分固定大小的内存(RAM)空间模拟出硬盘分区。它并非一个实际的文件系统,而是一种将实际的文件系统装入内存的机制,并且可以作为根文件系统。将一些经常被访问而又不会更改的文件(如只读的根文件系统)通过Ramdisk放在内存中,可以明显地提高系统的性能。
            在linux系统中,ramdisk有二种,一种就是可以格式化并加载,linux内核2.0/2.2就已经支持,其不足之处是大小固定;另一种是 2.4的内核才支持,通过,ramfs来实现,他不能被格式化,但用起来方便,其大小随所需要的空间增加或减少,是目前linux常用的ramdisk技 术.
            initrd 是 RAMDisk 的格式,kernel 2.4 之前都是 image-initrdKernel 2.5 引入了 cpio-initrd,大大简化了Linux 的启动过程,附合 Linux 的基本哲学:Keep it simple, stupid(KISS). 不过cpio-initrd 作为新的格式,还没有经过广泛测试,嵌入式 Linux 中主要采用的还是 image-initrd
            在嵌入式环境中,我们将使用RAMDisk制作好的rootfs 压缩后写入Flash,启动的时候由Bootloader 装载到RAM中。在Linux的启动阶段,initrd提供了一套机制,可以将内映像和根文件系统一起载入内存并解压缩,然后挂载到 下。这种方法操作简单,但是在 RAM 中的文件系统不是压缩的,因此需要占用许多嵌入式系统中稀有资源 RAM
            由于/目录实在内存中,所以我们对根文件系统进行的操作并不会保存到Flash上,而是在RAM中。这样也就意味着,对根文件系统所作的修改,掉电后将会丢失。  


  2. 在内核中添加对ramdisk的支持:

    General setup  --->
         [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
         ()    Initramfs source file(s)  
         
    Device Drivers  --->
         Block devices  --->
         <*> RAM disk support
         (1)   Default number of RAM disks 
         (16384) Default RAM disk size (kbytes)
         (1024) Default RAM disk block size (bytes)  


  3. 制作RAMDISK根文件系统:

    使用dd命令建立一个16MB的文件系统映像ramdisk. /dev/zero对其初始化.对于dd命令可以参考文档1文档2
    [lingyun@localhost rootfs]$ ls
    mnt  mtd-utils  rootfs.cramfs  rootfs.jffs2  rootfs.tar.bz2  rootfs_tree  tools  ubifs-arm920t.img  ubinize.cfg
    [lingyun@localhost rootfs]$ dd if=/dev/zero of=ramdisk bs=1M count=16
    16+0 records in
    16+0 records out
    16777216 bytes (17 MB) copied, 0.0123997 s, 1.4 GB/s
    [lingyun@localhost rootfs]$ ls
    mnt  mtd-utils  ramdisk  rootfs.cramfs  rootfs.jffs2  rootfs.tar.bz2  rootfs_tree  tools  ubifs-arm920t.img  ubinize.cfg
    因为ramdisk只是一个块设备,只有将其格式化为特定的文件系统后才能使用,我们将其格式化ext2格式:
    [lingyun@localhost rootfs]$ mke2fs -F -v -m0 ramdisk 
    mke2fs 1.42.7 (21-Jan-2013)
    fs_types for mke2fs.conf resolution: 'ext2', 'small'
    Discarding device blocks: done                            
    Discard succeeded and will return 0s  - skipping inode table wipe
    Filesystem label=
    OS type: Linux
    Block size=1024 (log=0)
    Fragment size=1024 (log=0)
    Stride=0 blocks, Stripe width=0 blocks
    4096 inodes, 16384 blocks
    0 blocks (0.00%) reserved for the super user
    First data block=1
    Maximum filesystem blocks=16777216
    2 block groups
    8192 blocks per group, 8192 fragments per group
    2048 inodes per group
    Superblock backups stored on blocks: 
            8193


    Allocating group tables: done                            
    Writing inode tables: done                            
    Writing superblocks and filesystem accounting information: done

    其中:
    -F : 迫使mke2fsramdisk.image上运行否则, mke2fs会抱怨ramdisk.image不是块设备.
    -v : verbose模式运行
    -m0 : 指定不必在文件系统上为"超级用户"保留任何block.(一般嵌入式Linux都是单用户系统).



    [lingyun@localhost rootfs]$ file ramdisk 
    ramdisk: Linux rev 1.0 ext2 filesystem data

    挂载ramdisk,并拷贝制作好的根文件系统到mnt目录下:

    [lingyun@localhost rootfs]$ ls mnt/
    [lingyun@localhost rootfs]$ sudo mount -o loop ramdisk mnt/
    [lingyun@localhost rootfs]$ mount | grep ramdisk
    /home/lingyun/fulinux/fl2440/trunk/src/rootfs/ramdisk on /home/lingyun/fulinux/fl2440/trunk/src/rootfs/mnt type ext2 (rw,loop=/dev/loop0)
    [lingyun@localhost rootfs]$ ls mnt/
    lost+found
    [lingyun@localhost rootfs]$ rm -rf mnt/*
    [lingyun@localhost rootfs]$ ls rootfs_tree/
    apps    bin   dev  home  init  linuxrc  media  opt   root  stat  tmp  var
    backup  data  etc  info  lib   logs     mnt    proc  sbin  sys   usr
    [lingyun@localhost rootfs]$ sudo cp -af rootfs_tree/* mnt/
    [lingyun@localhost rootfs]$ ls mnt/
    apps    bin   dev  home  init  linuxrc  media  opt   root  stat  tmp  var
    backup  data  etc  info  lib   logs     mnt    proc  sbin  sys   usr

    卸载并压缩ramdisk根文件系统Image

    [lingyun@localhost rootfs]$ sudo umount ramdisk
    [lingyun@localhost rootfs]$ du -h ramdisk 
    16M     ramdisk
    [lingyun@localhost rootfs]$ gzip ramdisk
    [lingyun@localhost rootfs]$ du -h ramdisk.gz 
    4.7M    ramdisk.gz

    将其拷贝到tftp目录下:

    [lingyun@localhost rootfs]$ cp ramdisk.gz /tftp/

  4. uboot设置和映像烧录启动

参考内核对256Mnandflash的分区:

Creating 11 MTD partitions on "NAND":
0x000000000000-0x000000100000 : "mtdblock0 u-boot 1MB"
0x000000100000-0x000000500000 : "mtdblock1 kernel 4MB"
0x000000500000-0x000000f00000 : "mtdblock2 ramdisk 10MB"
0x000000f00000-0x000001e00000 : "mtdblock3 cramfs 15MB"
0x000001e00000-0x000004600000 : "mtdblock4 jffs2 40MB"
0x000004600000-0x000006e00000 : "mtdblock5 yaffs2 40MB"
0x000006e00000-0x000009600000 : "mtdblock6 ubifs 40MB"
0x000009600000-0x000009700000 : "mtdblock7 info 1MB"
0x000009700000-0x00000bf00000 : "mtdblock8 apps 40MB"
0x00000bf00000-0x00000e700000 : "mtdblock9 data 40MB"
0x00000e700000-0x000010000000 : "mtdblock10 backup 25MB"


uboot中的环境参数

[ s3c2440@fulinux ]# pri
bbl=nand erase 0 100000;tftp 30008000 u-boot-$cpu.bin;nand write 30008000 0 $filesize
norbbl=erase bank 1;tftp 30008000 u-boot-$cpu.bin;cp.b 30008000 0 $filesize
bkr=tftp 30008000 linuxrom-fulinux.bin;nand erase 100000 400000;nand write 30008000 100000 400000
bootcmd_rootfs=nand read 30008000 100000 400000;bootm 30008000
tpb=tftp 30008000 uImage-$cpu.gz;tftp 30800000 ramdisk-$cpu.gz;bootm 30008000 
mtdids=nand0=nand0
mtdparts=mtdparts=nand0:1M@0x0(u-boot),5M@0x100000(kernel),10M@0x600000(ramdisk),10M@0x1000000(cramfs),20M@0x1a00000(yaffs2),20M@0x2e00000(ubifs),-(users)
bootdelay=1
baudrate=115200
ethaddr=08:00:3e:26:0a:6b
ethact=dm9000
bcramfs=tftp 30800000 rootfs.cramfs;nand erase f00000 600000;nand write 30800000 f00000 600000
bjffs2=tftp 30008000 rootfs.jffs2;nand erase 1e00000 1400000;nand write.jffs2 30008000 1e00000 1400000
bootargs_jffs2=noinitrd root=/dev/mtdblock4 rootfstype=jffs2 init=/linuxrc console=ttyS0,115200
bootargs_cramfs=noinitrd root=/dev/mtdblock3 rootfstype=cramfs init=/linuxrc console=ttyS0,115200
bootargs_ubifs=console=ttyS0,115200 mem=64M ubi.mtd=6 root=ubi0:rootfs rootwait rootfstype=ubifs rw
bubifs=tftp 30008000 ubifs-$cpu.img;nand erase 6e00000 900000;nand write 30008000 6e00000 900000
cpu=arm920t
brdfs=tftp 30008000 ramdisk.gz;nand erase 500000 a00000;nand write 30008000 500000 500000
filesize=4B065C
fileaddr=30008000
netmask=255.255.255.0
ipaddr=192.168.1.111
serverip=192.168.1.3
bootcmd_ramdisk=nand read 30008000 100000 400000;nand read 30800000 500000 500000;bootm 30008000
bootcmd=run bootcmd_ramdisk

bootargs_ramdisk=console=ttyS0,115200 mem=64M initrd=0x30800000,16M root=/dev/ram0 rw loglevel=7
bootargs=console=ttyS0,115200 mem=64M initrd=0x30800000,16Mroot=/dev/ram0 rw loglevel=7
stdin=serial
stdout=serial
stderr=serial
Environment size: 1782/131068 bytes
[ s3c2440@fulinux ]# 

主要是设置用红色标注的参数,设置方法如下:

[ s3c2440@fulinux ]#set bkr 'tftp 30008000 linuxrom-fulinux.bin;nand erase 100000 400000;nand write 30008000 100000 400000'

[ s3c2440@fulinux ]#set brdfs 'tftp 30008000 ramdisk.gz;nand erase 500000 a00000;nand write 30008000 500000 500000'

[ s3c2440@fulinux ]#set bootcmd_ramdisk 'nand read 30008000 100000 400000;nand read 30800000 500000 500000;bootm 30008000'

[ s3c2440@fulinux ]#set bootcmd 'run bootcmd_ramdisk'

[ s3c2440@fulinux ]#set bootargs 'console=ttyS0,115200 mem=64M initrd=0x30800000,16M root=/dev/ram0 rw loglevel=7'


下载内核映像:

[ s3c2440@fulinux ]#run bkr 

下载ramdisk镜像

[ s3c2440@fulinux ]#run brdfs

启动:

[ s3c2440@fulinux ]#boot




### 回答1: 这两个处理器都是目前市面上比较常见的高性能处理器。其中,锐龙 R7 5800H 是 AMD 公司推出的一款移动处理器,而 i5-11300H 则是 Intel 公司推出的一款移动处理器。 从处理器性能的角度来看,锐龙 R7 5800H 在多线程性能方面表现出色,可以更好地处理多任务并行,而 i5-11300H 则在单线程性能方面表现较强,适合单个任务的处理。 此外,锐龙 R7 5800H 的功耗较高,可能导致发热电池寿命的问题,而 i5-11300H 的功耗相对较低,能够更好地保持电池续航时间稳定性。 因此,如果您需要处理多任务并行,可以考虑锐龙 R7 5800H;如果您更注重单个任务的性能,可以考虑 i5-11300H。当然,您还可以根据自己的具体需求使用场景进行选择。 ### 回答2: 锐龙R7-5800Hi5-11300H都是当今市场上非常受欢迎的高性能CPU,它们都能满足大多数用户的需求。但是,它们在性能特点上还是存在很大的差异。 首先,锐龙R7-5800H是一款采用7nm FinFET制程的八核心十六线程处理器,其主频为3.2GHz,最高主频可达4.4GHz。它还内置了AMD的集成显卡Vega 8,最高核心频率为2.1GHz。相比之下,i5-11300H是基于10nm SuperFin制程的四核八线程处理器,主频为3.1GHz,最高主频可达4.4GHz,但它不带集成显卡。 在性能方面,锐龙R7-5800H表现优异,特别是针对多线程任务。它的性能比i5-11300H优越,尤其是在处理多线程任务时。在游戏方面,R7-5800H的性能也要稍高于i5-11300H。但是,i5-11300H的单线程性能却要比R7-5800H更好,因此在执行单线程任务时,i5-11300H更具有优势。 在功耗方面,i5-11300H的TDP只有35W,相比之下,锐龙R7-5800H的TDP则高达45W。因此,从功耗的角度来看,i5-11300H更省电,适合用于移动设备,而R7-5800H则更适合台式机或大型游戏本。 最后,价格也是两者之间一个重要的因素。一般来说,i5-11300H的价格比R7-5800H要低得多,但是,当需要高性能处理器时,R7-5800H也是一个更好的选择。 综上所述,锐龙R7-5800Hi5-11300H都有自己的特点优势,具体应该根据用户的需求来选择。如果用户需要高性能处理器用于多线程任务或者游戏,那么R7-5800H是更好的选择。如果用户注重功耗轻便性,则应选择i5-11300H。 ### 回答3: 锐龙r7-5800h是AMD推出的一款处理器,而i5-11300h是Intel推出的一款处理器。这两款处理器都是针对笔记本电脑开发的。 首先来看锐龙r7-5800h。该处理器是基于7nm工艺制造的,具备8个物理核心16个线程,主频为3.2GHz,最大增强频率为4.4GHz。该处理器采用AMD的Zen 3架构,拥有32MB的L3缓存4MB的L2缓存。它还配备了Radeon Vega 8集成显卡,支持DDR4-3200MHz内存。总体来说,锐龙r7-5800h性能强劲,适合运行大型应用程序游戏。 然后是i5-11300h。该处理器也是基于10nm工艺制造的,具备4个物理核心8个线程,主频为3.1GHz,最大增强频率为4.4GHz。它采用了Intel的Tiger Lake架构,拥有12MB的L3缓存,但没有L2缓存。它配备了Intel Xe集成显卡,支持DDR4-3200MHz内存。总体来说,i5-11300h性能比较强,可以应对日常使用需求。 从性能方面来看,锐龙r7-5800h比i5-11300h更加强大。它有更多的核心线程,更大的缓存更好的集成显卡。但考虑到业务场景的不同,i5-11300h已经足够满足大多数人的日常需要。 总体来说,无论选择哪款处理器,都要考虑自己的使用需求笔记本电脑的其他配置,以获得更好的使用体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值