向ramdisk类的镜像文件中添加内容

1. 简介

        Ramdisk是虚拟内存盘的意思,是通过软件将一部分的内存模拟成硬盘来使用的一种技术,相对于直接的硬盘文件访问来说,速度提升了,但缺点是你对ramdisk的文件系统中的所有操作,在重启后都是失效的。失效的这点不包括系统启动后将存储介质挂载到某个目录下的文件。

 

2. 问题描述

        在跟进公司原有系统的时候,发现有的嵌入式系统的根文件目录采用了ramdisk,但是原来的目录源文件是没有的,只是有一个ramdisk的镜像文件,我们想把新的文件更新到ramdisk中的目录里边去。

 

3. 实现

        在ramdisk镜像中添加文件的思路是 将ramdisk的镜像文件挂载到本地目录下,然后在目录中进行添加删除的操作,然后umount。但多数情况,系统使用的ramdisk镜像经过了gzip压缩,是一个压缩文件,因此,在操作之前需要解压缩的步骤。

 

3.1 首先查看文件是什么格式

        > file xxx

比如,我电脑上的一个例子:

        > file uramdisk_lip.image.gz

uramdisk_lip.image.gz: u-boot legacy uImage, , Linux/ARM, RAMDisk Image (gzip), 5310008 bytes, Thu Dec 19 11:03:49 2019, Load Address: 0x00000000, Entry Point: 0x00000000, Header CRC: 0xF876A786, Data CRC: 0xBF1F36F4

        > file arm_ramdisk.image

arm_ramdisk.image: Linux rev 0.0 ext2 filesystem data (mounted or unclean), UUID=00000000-0000-0000-0000-000000000000

 

3.2 解压和压缩

解压 (arm_ramdisk.img.gz --> arm_ramdisk.img)

        > gunzip arm_ramdisk.image.gz

压缩 (arm_ramdisk.img --> arm_ramdisk.img.gz)

        > gzip [-v9] arm_ramdisk.image // 其中的v表示显示压缩情况,9表示按最大压缩比压缩,当然这个[]选项是可有可无的

但是,有时需要在压缩文件的开头添加些信息

        > mkimage -A arm -T ramdisk -C gzip -d arm_ramdisk.image.gz uramdisk_lip.image.gz

$ mkimage --help
Usage: mkimage -l image
    -A ==> set architecture to 'arch'
    -T ==> set image type to 'type'
    -C ==> set compression type 'comp'
    -d ==> use image data from 'datafile'

 

3.3 挂载和卸载

挂载后可进行文件操作

        > sudo mount -o loop arm_ramdisk.image tmp_mnt/

卸载,卸载后才能进行压缩等操作

        > umount tmp_mnt/

 

4. 小改进

        对挂载卸载ramdisk,通常编写脚本以提供方便:

mount.sh 和 umount.sh 分别如下。

#!/bin/bash

gunzip arm_ramdisk.image.gz
sudo mount -o loop arm_ramdisk.image tmp_mnt/
#!/bin/bash

 sudo umount tmp_mnt/
 gzip arm_ramdisk.image
 echo "Now arm_ramdisk.image can used!"
 mkimage -A arm -T ramdisk -C gzip -d arm_ramdisk.image.gz uramdisk_lip.image.gz
 echo "uramdisk_lip.image.gz generated!"

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值