यहां लंबे समय तक यूनिक्स लड़का, लेकिन एंड्रॉइड की दुनिया में अपेक्षाकृत नया है। पढ़ते रहिये।
EPISODE 1: एक नया बैकअप (मुझे उम्मीद है)
मैंने हाल ही में एक Asus मेमोपाड (ME103K) खरीदा है; मैं तब जड़ हो गया, और बाहरी एसडी कार्ड में dd
केवल-पढ़ने के system
लिए विभाजन की एक छवि ली :
$ 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
(टैबलेट से जुड़ी लाइनक्स मशीन से) संक्षिप्त रूप से, एक के बाद 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
।
ठीक है, ठीक है - वे एंड्रॉइड में बड़ी छवि फ़ाइलों को कैसे फ्लैश करते हैं?
Googling, खोज - पता चलता है कि वे इस 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 को मारने से पहले 1h का इंतजार किया। और टैबलेट को पावर-साइकिल करना था, जो फास्टबूट मोड में वापस बूट किया गया था।
यह अच्छा नहीं लग रहा है।
यदि मैं एक छोटी छवि बनाता हूं तो क्या होगा? हो सकता है कि 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 समर्थन पृष्ठ की जाँच की - वे केवल कर्नेल के लिए स्रोत प्रदान करते हैं, और ओवर-द-एयर .zip फ़ाइल। इसके बदले में रूट से एक फाइल-सिस्टम स्तर का बैकअप होता है - यानी system
फ़ोल्डर वहां मौजूद है बस एक फ़ोल्डर के रूप में, छवि नहीं, यह नहीं system.img
कि मैं फ्लैश कर सकता हूं - ताकि वास्तव में मेरी मदद न हो।
EPISODE 2: कस्टम बूट्स का हमला
recovery.img
Asus से किसी भी प्रकार की अनुपस्थिति में (एक निर्माता फास्टबूट-फ़्लेशबल प्रकाशित करने के लिए परेशान क्यों करेगा 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
रमडिस्क का विस्तार ...
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
( ओवर-द-एयर असुस .zip फ़ाइल से ) कॉपी किया /sbin/sh
। मैंने बिजीबॉक्स के साथ भी ऐसा ही किया है - काफी आसान टूल।
और 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) -
हम्म ... शायद एडीबी को रूट के रूप में नहीं चलाया जाता है?
linuxbox# adb root
restarting adbd as root
linuxbox# adb shell
- exec '/system/bin/sh' failed: Permission denied (13) -
ललित ... मैं हेक्सिडिट एडीबीडी, और पैच / सिस्टम / बिन / श टू बी / साइबिन / श (मैंने ओटीए छवि से / सिस्टम / बिन / श की नकल की जड़ के मूल में): रिबूट, फास्टबूट ...
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
ठीक है, तो / प्रणाली है रखा होगा। क्या मैं देख सकता हूं कि अंदर क्या है?
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
अभी भी चालू है (बस ठीक अनुरोधों का जवाब है) और मैं इसलिए किसी भी पुनर्प्राप्ति छवि को जला सकता हूं, (ए) मैंने ME103K के लिए कोई सीडब्ल्यूएम या TWRP पुनर्प्राप्ति छवि नहीं खोजी और पाया - मुझे इसका कोई समर्थन नहीं है एक "जेनेरिक" जिसे आप संदर्भित कर रहे हैं, क्या वहाँ है? (b) पावर ऑफ, पावर बटन + वॉल्यूम डाउन दबाने से रिकवरी इमेज नहीं आती है - मैं अभी भी फास्टबूट स्टेट पर पहुंच जाता हूं। मो विचार क्यों। वास्तव में मैंने कभी रिकवरी की प्रक्रिया नहीं देखी (थोड़े इसे देखने के लिए उत्सुक) ...
fastboot boot <FILE>.img
), तो पूरे स्टॉक ज़िप फ़ाइल को फ्लैश करें। वैकल्पिक रूप से, देखें कि क्या मौजूद है (वेब पर) स्टॉक रॉम फाइलें जिन्हें फास्टबूट का उपयोग करके फ्लैश किया जा सकता है।
unzip -l UL-K01E-WW-12.16.1.12-user.zip | grep recovery
केवल शेल स्क्रिप्ट के एक जोड़े को दिखाता है - मेरे पास एक नज़र होगा, लेकिन निश्चित रूप से कोई जानकारी नहीं recovery.img
है)। Googling ने या तो मदद नहीं की - कहीं भी इस टैबलेट की रिकवरी इमेज नहीं हैं ... लगता है मुझे dd
उनके रिकवरी पार्टीशन और शेयर के लिए किसी तरह की आत्मा का इंतजार करना पड़ेगा ?