如何使用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 传递的完整路径。 pushd
和 popd
命令临时将工作目录更改为存储文件的位置。 find
命令被修改为查看当前目录(但这种更改不是绝对必要的)并仅打印相对路径(%P
);保留空字符分隔符([=15=]
部分)。
这个问题包含 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 传递的完整路径。 pushd
和 popd
命令临时将工作目录更改为存储文件的位置。 find
命令被修改为查看当前目录(但这种更改不是绝对必要的)并仅打印相对路径(%P
);保留空字符分隔符([=15=]
部分)。