长期从事UNIX的人,但在Android领域相对较新。继续阅读。
第1集:新备份(希望如此)
我最近购买了华硕MemoPAD(ME103K);然后,我成为root用户,并将dd
只读system
分区的图像镜像到外部SD卡上:
$ su
# dd if=/dev/block/platform/msm_sdcc.1/by-name/system \
of=/storage/MicroSD/system.img bs=1M
# ls -l /storage/MicroSD/system.img
-rw-r--r-- 1 root root 2147483648 Sep 27 13:15 system.img
大小(恰好是2GiB)有点可疑-可能是因为SD卡上的FAT32分区了吗?
不,它不是- tune2fs -l
确实显示这是有效的EXT4图像,大小精确为2GiB,并且fsck -f
没有任何错误通过。并且fastboot
(在平板电脑附带的linux机器上)同意adb reboot bootloader
:
linuxbox# fastboot getvar all
(bootloader) version-bootloader: 3.03
(bootloader) version-hardware: rev_c
(bootloader) variant: LEOPARDCAT 16G
(bootloader) version-baseband: H00_0.16.F_0521
(bootloader) serialno: 0a3dXXXX
...
(bootloader) partition-type:system: ext4
(bootloader) partition-size:system: 0x0000000080000000
该大小确实为2GB:
linuxbox# python2 -c 'print 0x0000000080000000'
2147483648
所以,一切都很好-我有图像的备份。现在测试还原它。
我尝试将system.img刷新回平板电脑-确保我可以从任何东西中恢复,这是我们在Unix世界中所做的那种防弹备份(例如通过还原驱动器的内容dd if=backup.image of=/dev/sdXXX
)。
一切都与之完美相关adb
并且可以fastboot
正常工作-所以我尝试...
linux_box# fastboot devices
0a3dXXXX fastboot
linux_box# mount /dev/sdcard /mnt/sdcard
linux_box# cp /mnt/sdcard/system.img .
linux_box# fastboot flash system system.img
error: cannot load 'system.img'
嗯 我android-tools-5.1.1
从源代码下载并构建我的发行版,添加调试信息-并进入调试器,以查看此失败:
linuxbox# gdb --args fastboot flash system system.img
...
有趣的是-尽管我使用的是64位计算机,但显然存在使文件大小变为“负”的问题(在32位世界中,我图像的文件大小2 ^ 31实际上被认为是负的),确切地说是-2147483648
。
好的,很好-它们如何在Android中闪存大图片文件?
谷歌搜索,搜索-事实证明他们使用此make_ext4fs
工具创建了可刷新的图像。实际上,这是我刚刚编译的一部分,因此我不妨使用它:
linuxbox# mkdir /system
linuxbox# mount -o loop,ro system.img /system
linuxbox# ls -l /system
total 208
drwxr-xr-x 106 root root 8192 Sep 17 22:24 app
drwxr-xr-x 3 root 2000 8192 Sep 26 21:08 bin
-rw-r--r-- 1 root root 6847 Sep 12 16:59 build.prop
drwxr-xr-x 19 root root 4096 Sep 26 21:08 etc
drwxr-xr-x 2 root root 4096 Aug 11 22:27 fonts
drwxr-xr-x 4 root root 4096 Sep 12 16:56 framework
drwxr-xr-x 10 root root 16384 Sep 12 16:59 lib
drwxr-xr-x 2 root root 4096 Jan 1 1970 lost+found
drwxr-xr-x 3 root root 4096 Aug 11 22:18 media
drwxr-xr-x 59 root root 4096 Aug 11 22:29 priv-app
-rw-r--r-- 1 root root 126951 Aug 1 2008 recovery-from-boot.p
drwxr-xr-x 3 root root 4096 Aug 11 21:02 scripts
drwxr-xr-x 3 root root 4096 Aug 11 21:02 tts
drwxr-xr-x 11 root root 4096 Sep 26 21:08 usr
drwxr-xr-x 8 root 2000 4096 Aug 11 22:29 vendor
drwxr-xr-x 2 root 2000 4096 Sep 26 21:09 xbin
linuxbox# ../extras/source/extras/ext4_utils/make_ext4fs \
-l 2048M new_system.img /system
Creating filesystem with parameters:
Size: 2147483648
Block size: 4096
Blocks per group: 32768
Inodes per group: 8192
Inode size: 256
Journal blocks: 8192
Label:
Blocks: 524288
Block groups: 16
Reserved block group size: 127
Created filesystem with 2666/131072 inodes and 375014/524288 blocks
很酷-所以我显然可以从简单的旧文件夹构建系统映像。天空将是我的极限-我将可以在此图像中添加任何我想要的东西。
烧吧...
linuxbox# fastboot flash system new_system.img
erasing 'system'...
OKAY [ 0.064s]
sending 'system' (2088960 KB)...
^C
我等了1小时后才按下Ctrl-C。而且必须重启平板电脑,然后以快速启动模式重新启动。
这看起来不好。
如果我生成较小的图像怎么办?也许2GB可能是一个问题,并且此分区无法完全使用-它具有可用空间:
linuxbox# ../extras/source/extras/ext4_utils/make_ext4fs \
-l 1536M new_system.img /system
linuxbox# ./fastboot flash system system.img
erasing 'system'...
OKAY [ 0.065s]
sending 'system' (1572864 KB)...
OKAY [ 51.039s]
writing 'system'...
OKAY [235.080s]
finished. total time: 286.183s
好的,这看起来很有希望(只花了5分钟)。我想我现在可以重新启动,一切都应该正常了,是吗?
否:-)
我不介意暂时砖砌设备,只要我不要去控制它到底(机器,我不是大师,是机器我不在乎工作;-)
关于我做错了什么以及我可以做些什么来解决此问题的任何想法?
提前致谢。
PS:我检查了我的平板电脑的Asus支持页面-它们仅提供内核的源代码以及Over-the-air .zip文件。这反过来又包含了从根开始的文件系统级别的备份-即该system
文件夹以一个文件夹而不是映像的形式存在于其中,而不是system.img
我可以闪存的文件夹-因此这对我没有帮助。
第2集:自定义长靴的袭击
在recovery.img
华硕的任何形式下(为什么制造商会费心地发布可快速启动的闪存recovery.img
?为什么如此...),并且在CWM和TWRP站点上也没有类似的恢复映像...我不得不与所有人抗争单独。
幸运的是,华硕的无线更新文件包含在其中...
linuxbox# unzip -l /opt/Asus/firmware/UL-K01E-WW-12.16.1.12-user.zip |\
grep boot.img$
7368704 2011-03-22 11:21 boot.img
...我平板电脑的启动映像。现在也许-也许-我可以这样做。
linuxbox$ mkdir rootfs
linuxbox$ cd rootfs
linuxbox$ abootimg -x /path/to/boot.img
linuxbox$ ls -l
bootimg.cfg
initrd.img
zImage
扩展ramdisk ...
linuxbox$ mkdir initrd
linuxbox$ cd initrd
linuxbox$ gzip -cd ../initrd.img | cpio -ivd
...
linuxbox$ vi default.prop
default.prop
当内核启动时,我设置为root:
ro.secure=0
ro.debuggable=1
ro.adb.secure=0
androidboot.selinux=disabled
我还/system/bin/sh
(从无线Asus .zip文件中)复制到/sbin/sh
。我对busybox也做了同样的事情-非常方便的工具。
并重新包装boot.img ...
busybox$ find . | cpio --create --format='newc' | gzip -9 > ../initrd.custom.gz
busybox$ cd ..
busybox$ abootimg --create ../new_boot_busybox.img \
-f bootimg.cfg -k zImage -r initrd.custom.gz
abootimg
第一次运行时实际上失败了,因为bootimg.cfg
必须更新- bootsize
必须更改参数,因为程序包现在更大了。abootimg
报告所需信息,这很容易。
现在,我启动我的自定义映像...
linuxbox# fastboot boot new_boot_busybox.img
...并见证以下内容...
linuxbox# adb logcat
- exec '/system/bin/sh' failed: Permission denied (13) -
linuxbox# adb shell
- exec '/system/bin/sh' failed: Permission denied (13) -
嗯...也许adbd不是以root身份运行?
linuxbox# adb root
restarting adbd as root
linuxbox# adb shell
- exec '/system/bin/sh' failed: Permission denied (13) -
很好...我hexedit adbd,并将/ system / bin / sh修补为/ sbin / sh(我将OTA映像中的/ system / bin / sh复制到了initrd的rootfs):重新启动,快速启动...
linuxbox# adb shell
- exec '/sbin/sh' failed: Permission denied (13) -
真是 这东西能做任何事吗?
linuxbox# adb pull /proc/partitions
15 KB/s (1272 bytes in 0.079s)
是...让我们看看:
linuxbox# adb pull /proc/mounts
16 KB/s (1358 bytes in 0.079s)
linuxbox# grep system mounts
/dev/block/platform/msm_sdcc.1/by-name/system /system ext4 rw,seclabel,relatime,data=ordered 0 0
OK,所以/ system 已安装。我可以看看里面有什么吗?
linuxbox# adb pull /system
remote object '/system' does not exist
什么...也许我可以检查/ proc / kmsg包含什么(“ dmesg”将输出什么)
linuxbox# adb pull /proc/kmsg
failed to copy '/proc/kmsg' to './kmsg': Operation not permitted
不,我需要扎根。
linuxbox# adb push /sbin/sh /system/bin/sh
failed to copy '/sbin/sh' to '/system/bin/sh': Permission denied
那也是。
事实证明这真是个难题。
fastboot
仍然可以运行(对请求的响应很好),所以我可以刻录任何恢复映像,(a)我搜索并没有找到ME103K的CWM或TWRP恢复映像-我不认为有您所指的是“通用”的,在那里吗?(b)关闭电源,按电源按钮+降低音量不会调出恢复映像-我仍然只是进入fastboot状态。莫知道为什么。实际上,我从未见过恢复过程(有点好奇地看到它)...
fastboot boot <FILE>.img
),然后刷新整个stock ZIP文件。或者,查看(在Web上)是否存在可以使用fastboot刷新的常规ROM文件。
unzip -l UL-K01E-WW-12.16.1.12-user.zip | grep recovery
仅显示了几个shell脚本-我来看一下,但绝对没有recovery.img
)。谷歌搜索也无济于事-这款平板电脑没有恢复图像...猜猜我将不得不等待某种灵魂来dd
恢复分区并共享吗?