如何使用cpio修改或创建ramdisk?

How to use cpio to modify or creat ramdisk?

这个问题包含 2 parts.New 在第 29 行。

我使用 cygwin cpio 命令创建 ramdisk.But 我发现它不能在 android 中使用,因为文件树是 E:\xx\xx。 我需要的ramdisk内容是\xx.How做什么?

set "bin=E:\cygwin64\bin"
set "PATH=E:"
"%bin%"\find "%PATH%"\ramdisk -depth -print0 | "%bin%"\cpio --null -ov >e:\ramdisknew

当我使用 cpio -t 时输出是这样的。

E:\ramdisk/acct
E:\ramdisk/bugreports
E:\ramdisk/cache
E:\ramdisk/charger
E:\ramdisk/config
E:\ramdisk/d
E:\ramdisk/data

我需要这样的-t putput。

"E:\cygwin64\bin"\cpio -t "E:"\ramdisk0
acct
bugreports
cache
charger
config
d

数据

我在 windows 中发现文件或目录所有者是 1000 而不是 root 可能就是问题所在。

所以我换了 Fedora 31.

原始文件 ramdisk0 属性 Kind=CPIO archive.

使用 cpio -idv < /ramdisk0 然后 -ov 到 ramdisknew.Replace origin ramdisk0 到 运行 android

它不起作用。

我发现两个问题

1.Output 序列变反了 [acct bugreports cache d]

selinux_version
sepolicy
init.environ.rc
init.zygote32.rc
etc
config

2.ramdisknew 十六进制内容与 ramdisk0 不同 原始 ramdisk0 包含很多 '07070100049...' 但 ramdisknew 有 none 唯一的字符串 'acct' 是一个仍在格式

中的目录

[070701000493e0000041ed0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002] [= 16 = 16 =]

但在 ramdisknew 中格式是[...Õ^Gð....acct]

origin ramdisk hex [部分]

...
30 30 00 00  30 37 30 37  30 31 30 30  30 34 39 33 | 00..070701000493
65 31 30 30  30 30 61 31  61 34 30 30  30 30 30 30 | e10000a1a4000000
30 30 30 30  30 30 30 30  30 30 30 30  30 30 30 30 | 0000000000000000
30 31 30 30  30 30 30 30  30 30 30 30  30 30 30 30 | 0100000000000000
33 32 30 30  30 30 30 30  30 30 30 30  30 30 30 30 | 3200000000000000
30 30 30 30  30 30 30 30  30 30 30 30  30 30 30 30 | 0000000000000000
30 30 30 30  30 30 30 30  30 30 30 30  30 30 30 30 | 000000000b000000
30 30 62 75  67 72 65 70  6F 72 74 73  00 00 00 00 | 00bugreports.... 
2F 64 61 74  61 2F 75 73  65 72 5F 64  65 2F 30 2F | /data/user_de/0/com
...

new ramdisknew hex [部分]

D5 5E 47 F0  0B 00 00 00  32 00 62 75  67 72 65 70 | Õ^Gð....2. bugrep
6F 72 74 73  00 00 2F 64  61 74 61 2F  75 73 65 72 | orts../data/user_de/0/com

如何解决?

我相信这样的事情可能会奏效:

pushd "%PATH%"\ramdisk
"%bin%"\find . -depth -printf "%P[=10=]" | "%bin%"\cpio --null -ov >e:\ramdisknew
popd

这里的 Cpio 显然存储了 Find 传递的完整路径。 pushdpopd 命令临时将工作目录更改为存储文件的位置。 find 命令被修改为查看当前目录(但这种更改不是绝对必要的)并仅打印相对路径(%P);保留空字符分隔符([=15=] 部分)。