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

问题描述 投票:0回答:1

这个问题包含两部分,新的在第29行。

我使用cygwin cpio命令来创建ramdisk,但是我发现它不能在android中使用,因为文件树是E:/xx/xx,我需要ramdisk的内容是xx。

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中,文件或dirctory Owner是1000而不是root,也许这就是问题所在。

所以我换了Fedora 31。

原文件ramdisk0属性Kind=CPIO存档。

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

它DONT工作。

我发现两个问题

1.输出顺序变成反向不[acct bugreports cache d]。

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

2.ramdisknew的十六进制内容与ramdisk0不同原版ramdisk0包含了大量的 "07070100049...",但ramdisknew却没有。

[070701000493e0000041ed000000000000000000000001000000000000000000000000000000000000000000000000000000000000000500000000acct]

但在ramdisknew中的格式是[...嚆矢^Gð...acct] 。

原点硬盘十六进制[部分]

...
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
...

新的ramdisknew六合资料大全[部分]。

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

如何解决这个问题?

android cygwin
1个回答
0
投票

我相信类似这样的东西可能会有用。

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

Cpio在这里显然存储了Find传递的完整路径。 这个 pushdpopd 命令将工作目录临时改变为文件存储的地方。 该 find 命令被修改为查找当前目录(但这一改变并不是严格意义上的必要),并且只打印相对路径(相对路径中的 %P);保留空字符分隔符(在此保留了 \0 部分)。)

© www.soinside.com 2019 - 2024. All rights reserved.