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用户名即可登录。