오랜 유닉스 사용자이지만 안드로이드 세계에는 비교적 새로운 곳입니다. 읽어.
에피소드 1 : 새로운 백업 (희망)
최근에 Asus MemoPAD (ME103K)를 구입했습니다. 그런 다음 루트 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
실제로 2GiB 크기의 유효한 EXT4 이미지였으며 fsck -f
전혀 오류없이 통과 한 것으로 밝혀졌습니다 . 그리고 fastboot
(태블릿에 연결된 리눅스 머신에서) 다음과 같이 동의했습니다 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를 태블릿으로 다시 플래시하려고 시도한다-유닉스 세계에서 우리가하는 방탄 백업의 어떤 것 ( 예를 들어, 드라이브의 컨텐츠를 통해 복원)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
.
좋아, 안드로이드에서 큰 이미지 파일을 어떻게 플래시합니까?
인터넷 검색, 검색-이 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
나는 Ctrl-C를 누르기 전에 1 시간을 기다렸다. 빠른 부팅 모드로 다시 부팅 된 태블릿의 전원을 껐다 켜야했습니다.
이것은 좋아 보이지 않습니다.
더 작은 이미지를 만들면 어떻게됩니까? 어쩌면 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 분 밖에 걸리지 않았습니다). 이제 다시 부팅 할 수 있고 모든 것이 정상이어야한다고 생각합니다.
아니 :-)
나는만큼 내가 같은 임시 벽돌 장치를 상관하지 않습니다 않는 내가,의 마스터 아니에요 내가 작동 걱정하지 않는다 기계 것으로 (결국 기계를 제어 할 수 ;-)
내가 잘못한 것에 대한 아이디어와 이것을 고치기 위해 무엇을 할 수 있습니까?
미리 감사드립니다.
추신 : 나는 태블릿의 Asus 지원 페이지를 확인했다. 커널의 소스와 OTA (Over-the-air) .zip 파일 만 제공한다. 그것은 루트에서 파일 시스템 수준의 백업을 포함합니다. 즉 system
폴더는 이미지가 아닌 폴더로만 존재하며 system.img
플래시 할 수는 없습니다. 그래서 실제로 도움이되지 않습니다.
에피소드 2 : 커스텀 부츠의 공격
recovery.img
Asus 의 어떤 종류의 부재에도 불구하고 (왜 제조업체는 fastboot-flashable recovery.img
? 혼자.
고맙게도, Asus의 OTA (Over-the-air) 업데이트 파일은 그 안에 포함되어 있습니다 ...
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
램 디스크 확장 중 ...
linuxbox$ mkdir initrd
linuxbox$ cd initrd
linuxbox$ gzip -cd ../initrd.img | cpio -ivd
...
linuxbox$ vi default.prop
default.prop
커널 부팅시 루트로 설정했습니다 :
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가 루트로 실행되지 않습니까?
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로 패치합니다 (/ system / bin / sh를 OTA 이미지에서 initrd의 rootfs로 복사했습니다) : Reboot, fastboot ...
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
그래, / 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 boot <FILE>.img
), 전체 ZIP 파일을 플래시하십시오. 또는 웹에서 fastboot를 사용하여 플래시 할 수있는 스톡 ROM 파일이 있는지 확인하십시오.
unzip -l UL-K01E-WW-12.16.1.12-user.zip | grep recovery
두 개의 쉘 스크립트 만 표시합니다-살펴볼 것이지만 확실히는 없습니다 recovery.img
). 인터넷 검색도 도움이되지 않았습니다.이 태블릿의 복구 이미지가 어디에도 없습니다 ... dd
복구 파티션과 공유 에 대한 일종의 영혼을 기다려야 할 것 같 습니까?