ramdisk.gz的解压与还原

1.通过file ramdisk.gz命令查看如下:

$ file ramdisk.gz 
ramdisk.gz: u-boot legacy uImage, ramdisk, Linux/ARM, RAMDisk Image (Not compressed), 22077065 bytes, Wed Feb 20 05:44:29 2019, Load Address: 0x88080000, Entry Point: 0x88080000, Header CRC: 0xB56EB752, Data CRC: 0xFED1A0FD

或者dumpimage -l ramdisk.gz命令查看如下:

$ dumpimage -l ramdisk.gz
Image Name:   ramdisk
Created:      Wed Feb 20 13:44:29 2019
Image Type:   ARM Linux RAMDisk Image (uncompressed)
Data Size:    22077065 Bytes = 21559.63 kB = 21.05 MB
Load Address: 88080000
Entry Point:  88080000

可知ramdisk.gz实际为ramdisk.img,且增加了u-boot头,64Bytes大小。

2.首先去掉ramdisk.gz镜像的前64Bytes数据,通过dd if=ramdisk.gz of=ramdisk bs=64 skip=1命令如下,并通过file ramdisk命令查看如下:

$ sudo dd if=ramdisk.gz of=ramdisk bs=64 skip=1
344954+1 records in
344954+1 records out
22077065 bytes (22 MB, 21 MiB) copied, 0.497012 s, 44.4 MB/s
$ file ramdisk
ramdisk: gzip compressed data, last modified: Wed Feb 20 05:44:14 2019, from Unix

可知此时ramdisk为一个gzip压缩的文件。

3.修改ramdisk为*.gz文件格式,并使用gunzip ramdisk.gz命令解压,并用file ramdisk命令查看如下:

$ mv ramdisk ramdisk.gz
$ gunzip ramdisk.gz 
$ file ramdisk 
ramdisk: ASCII cpio archive (SVR4 with no CRC)

可知此时ramdisk为一个cpio格式的压缩包

4.创建tmp文件夹,并使用sudo cpio -idv < …/ramdisk命令解压至tmp文件夹,查看如下:

 $ mkdir tmp
 $ cd tmp/
 $ sudo cpio -idv < ../ramdisk
 $ ls
bin  boot  dev  etc  init  lib  lib32  libexec  linuxrc  media  mnt  opt  proc  root  run  sbin  sys  tmp  usr  var

此时已将ramdisk.gz文件解压为目录形式,可进行相应修改。

5.修改完,在tmp目录执行如下命令find . |cpio -ov -H newc |gzip > …/ramdisk.img,并返还到上一级目录使用file ramdisk.img命令查看如下:

$ find . |cpio -ov -H newc |gzip > ../ramdisk.img
.
./boot
find: ‘./root’: Permission denied
./boot/zImage
./boot/myd_c335x_emmc.dtb
./boot/myd_c335x.dtb
./linuxrc
./init
./lib
...
var/tmp
./var/www
./libexec
./libexec/rmt
98048 blocks
$ cd ../;file ramdisk.img
ramdisk: gzip compressed data, last modified: Wed Feb 20 05:44:14 

可知此时已经打包为gzip格式

6.使用mkimage命令添加uboot头,由于上面显示没有压缩格式,所以打包时选择none,打包完打印信息显示如下:

$ mkimage -n "ramdisk" -A arm -O linux -T ramdisk -C none -a 88080000 -e 88080000 -d ramdisk.img ramdisk.gz
Image Name:   ramdisk
Created:      Wed Feb 20 14:31:13 2019
Image Type:   ARM Linux RAMDisk Image (uncompressed)
Data Size:    50200576 Bytes = 49024.00 kB = 47.88 MB
Load Address: 88080000
Entry Point:  88080000

可知此时已全部还原ramdisk.gz。

7.在使用过程中发现ramdisk文件系统登录输入root用户名后仍需要输入密码,故应在文件系统中去掉密码。在/etc/passwd文件中去掉‘x’ 修改如下:
将 root❌0:0:root:/root:/bin/sh
修改为:root::0:0:root:/root:/bin/sh

修改后,登录时输入root用户名即可登录。

猜你喜欢

转载自blog.csdn.net/Qinus/article/details/87796169