Araç seçimi
Burada sunduğum yöntem CyanogenMod'un Android kaynak koduna dayanıyor.
Google'ın AOSP sadece aracı sağlarken inşa
boot.img dosyayı, CyanogenMod da ekler
unpackbootimgsize izin aracı paketten onu. Bu araç CyanogenMod için herhangi bir şekilde özel olarak tasarlanmamış gibi görünmektedir, bu nedenle çoğu olasılık diğer ROM'larda da çalışacaktır.
Bununla birlikte,
boot.imgdosyayı açmak için, az ya da çok aynı şekilde çalışan görece çok sayıda alternatif vardır .
Temel olarak, bu tür bir açma aracı
boot.imgdosyanın içeriğini çıkarır ve
mkbootimgyapılandırması (esas olarak çekirdek parametreleri ve bellek adresleri) orijinaliyle eşleşecek bir dosya oluşturmak için Google'ın aracına geçmeniz gereken bir dizi parametre görüntüler .
İşte birkaç örnek, onları kişisel olarak test etmedim, bu yüzden tavsiye edemem ve sadece referans amaçlı olarak sunuyorum:
Tüm bu araçlar (ve herhangi bir arama motorunda bulabileceğiniz diğerleri) aynı şekilde çalışmalıdır, ancak bazıları kendi cihazınızla karşılaşabileceğiniz belirli kenar durumlarını ele alırken diğerlerinden daha iyi çalışabilir. Bununla birlikte, çoğu, en azından açık kaynak arenasında düzenli olarak görünmüyor, bu yüzden çalışma, bakım ve belgeleme araçlarına sahip olmak için en iyi bahis CyanogenMod'larla gitmek.
Bazı üreticiler AOSP standardından (normal olmayan adresler, başlıklar, dosya formatı vb.) Az çok uzak ROM'lar üretir. Aşağıdaki standart prosedür işe yaramazsa, bu alternatif yazılımlardan biri hile yapabilir. Aksi takdirde, cihazınıza özgü sorunları kontrol etmeniz gerekir: bazılarının belirli bir prosedüre veya hatta belirli araçlara ihtiyacı vardır ( örneğin, bu soruyu MediaTek cihazlarıyla ilgili olarak verin).
Araçlar kurulumu
boot.imgAmbalajlama ve ambalajdan çıkarma için CyanogenMod araç setinin derlenmesi oldukça basittir.
- Zaten tam Android kaynak kodu ağacı yüklediyseniz (kontrol edebilirsiniz benim diğer cevabı gitmek, bu konuda daha fazla bilgi almak için)
system/core/mkbootimg/(dizine bir hatırlatma olarak, Google'ın AOSP kaynak kodu yalnızca kurmak için aracı sağlamak
boot.imgdosyayı, yaptıkları değil herhangi bir açma aracı sağlayın),
-
Buna başka bir amaçla ihtiyacınız yoksa ve ihtiyacınız yoksa, daha kolay ve hızlı bir çözüm yalnızca CyanogenMod'un android_system_core deposunu klonlamaktır :
git clone https://github.com/CyanogenMod/android_system_core.git
cd android_system_core/mkbootimg/
Doğru dizine girdikten sonra derleyin ve yükleyin:
gcc -o ./mkbootimg -I ../include ../libmincrypt/*.c ./mkbootimg.c
gcc -o ./unpackbootimg -I ../include ../libmincrypt/*.c ./unpackbootimg.c
sudo cp ./mkbootimg ./unpackbootimg /usr/bin/
Google C görevden aldığını Not
mkbootimgile bir Python sürümü gelecekteki sürümlerinde hiçbir derleme bu komut için artık gerekli olabilir bu nedenle,.
Telefonunuzla iletişim kurması için bilgisayarınıza Android araçları da yüklemeniz gerekir. Sen gerekecektir
adb(Android Debug Bridge, Android'in ayıklama alt sistemi ile iletişim kurmasını sağlayan bir kabuk programı),
adbd(ilgili cin) ve
fastboot(telefonunuzun bootloader sistemi ile iletişim kurmasını sağlayan bir kabuk programı).
En sevdiğiniz Linux dağıtımınız bunları tek veya ayrı bir pakette sağlayabilir, ancak genellikle her zaman "android araçları" olarak adlandırılır:
- Debian / Ubuntu:
sudo apt-get install android-tools-{adb,adbd,fastboot}
- Fedora / CentOS:
sudo yum install android-tools
- openSUSE:
sudo zypper install android-tools
boot.imgDosyayı getir
Boot.img dosyasını ROM .zip dosyasından veya doğrudan aygıttan çıkarın:
- Stok ROM .zip dosyasından: SuperSU gibi bazı uygulamalar boot.img'yi doğrudan aygıtta değiştirebilir, stokla değiştirmek, bu tür uygulamaları bozar.
- Doğrudan cihazdan: bazı kişiler bozulmaya yol açan okuma sorunu bildirir
boot.img. IMO, bu sorunlar büyük olasılıkla zayıf USB kablolarının veya USB hub'ının kullanımıyla bağlantılıdır ve telefonu doğrudan bilgisayara bağlayan kaliteli kablolar kullanılarak kolayca önlenebilir. ADB'yi kök modunda da çalıştırabilirsiniz (kullanılan ROM'a bağlı olarak, bu önemsiz olabilir veya olmayabilir).
İlk yöntem çok açıktır: .zip dosyasını herhangi bir ZIP yazılımı ile ayıklayın, dosya
boot.imgarşivin kökünde tam orada olmalıdır.
İkinci yöntem için, önce depolama cihazının
boot.imgiçeriğinin alınabileceği (ne yazık ki cihaza özel) yolu belirlemeniz gerekir. Bunun için iki yöntem biliyorum:
-
ls /dev/block/platform/*/by-name/(burada
*kapakları henüz başka cihaza özel klasör adı, büyük ihtimalle bunun altında tek dizindir vardır
platform/), arama kesin adı da platformu bağlıdır ama her zamanki mantıklı (bazı örnekler:
boot,
LNX"Linux") için (kısaltma). Bu dizindeki dosyalar aslında sembolik bağlantılardır ve bazı insanlar hedefe manuel olarak gitmeyi zahmete sokarlar, ancak daha uzun süre daha az hataya eğilimli kalan daha yüksek seviyeli isme dayalı yolla yapışmayı öneriyorum. Böylece böyle bir yolla bitireceksiniz
/dev/block/platform/sdhci-tegra.3/by-name/LNX.
- Bazı (eski?) Cihazlarda, çıktısı incelenerek doğru cihaz bulunabilir
cat /proc/mtd. Etiketle
mtd2ilişkilendirilmiş cihazı görürseniz
"boot"yolu kullanırsınız
/dev/mtd2.
Şimdi:
- Telefonun geliştirici menüsünden:
- Telefonunuzda hata ayıklamayı etkinleştirin,
- ADB'ye kök erişimine izin ver (bu adım CynogenMod çalıştıran telefonlar için geçerlidir, diğer cihazlar potansiyel olarak daha karmaşık bir prosedür gerektirebilir),
- Bilgisayarınıza bağlayın (ve sanal bir makineden Android araçları kullanıyorsanız, oradan VM misafirine).
Bu önceden yapılmadıysa, ADB sunucusunu bilgisayar tarafında manuel olarak başlatmanızı öneririm, bu, aşağıdaki ADB komutlarının davranışını etkilemeden cihazın yanındaki RSA anahtarını doğrudan doğrulamanızı sağlar:
adb start-server
Ardından kök modunda ADB'yi değiştirin:
adb root
Son olarak,
boot.imgbu komutu kullanarak dosyayı aygıttan doğrudan ayıklayabilmeniz gerekir (kaynak ve hedef yolu ve adları örnek olarak verilir, ihtiyaçlarınıza ve tercihlerinize uyarlayın):
adb pull /dev/block/platform/sdhci-tegra.3/by-name/LNX ./boot.img
Komut, hem kullanılmış hem de boş alanı tüm bölümü kopyalayacaktır, bu nedenle elde edilen
boot.imgdosyanın
boot.imgstok ROM .zip dosyasıyla birlikte gelen orijinal dosyadan daha büyük olacağına şaşırmayın , içeriğin kendisi benzer kalır.
Aktarım tamamlandığında, telefonun bağlantısını kesin ve geliştirici menüsünden hem hata ayıklamayı hem de kök erişimini devre dışı bırakmayı unutmayın.
Orijinal
boot.imgdosyayı ambalajından çıkarın
boot.imgDaha önce derlenmiş komutu kullanarak dosyanın kendisini açın :
unpackbootimg -i ./boot.img
Bu
boot.img, stoğa göre doğru yapıya sahip bir yeniyi yeniden oluşturmanıza izin vermek için gerekli olan birkaç bilgiyi verecektir
boot.img. Ancak, CyanogenMod's
upackbootimgaynı bilgileri daha sonra kullanacağımız birkaç dosyaya da kaydettiğinden not defterine acele etmeyin .
Bu komut, giriş dosyasının adına belirli sonekler eklenmiş birkaç dosya oluşturur:
-
*-second: Bu ikinci aşama önyükleyicidir, isteğe bağlı ve son kullanıcı telefonlarında nadiren kullanılır. Bu dosya boşsa (en yaygın durum), telefonun önyükleyici doğrudan Linux çekirdeğini çağırır.
-
*-zImage: Bu Linux çekirdeği.
-
*-ramdisk.gzveya
*-ramdisk.lz4: aygıtın kök dizinini doldurmak için kullanılan RAM diski. Uzantı, kullanılan sıkıştırma algoritmasına bağlı olarak farklılık gösterir.
-
*-dt: Yerleştirilen aygıt ağacı
/dev.
- Geri kalan her biri
unpackbootimgçıktıda gösterilen değerlerden birini saklayan küçük dosyalardır . Bu değerler, Linux çekirdeğine iletilecek komut satırı parametresini ve önyükleyicinin her nesneyi önyükleme zamanında yüklemesi gereken adresleri tanımlar.
Çoğu zaman,
boot.imgtelefonun kök dizininin içeriğini düzenlemek için. Yukarıda görüldüğü gibi, bu içerik
*-ramdisk.gzveya
*-ramdisk.lz4dosyada saklanır ve aşağıdaki komutlar kullanılarak çıkarılabilir:
mkdir ./ramdisk
cd ./ramdisk/
gzip -dc ../boot.img-ramdisk.gz | cpio -imd
LZ4 sıkıştırılmış RAM disk için son adımı ile değiştirin
lz4 -d ../boot.img-ramdisk.lz4 | cpio -imd.
Devam etmeden önce istediğiniz değişikliği yapmakta özgürsünüz. Bununla birlikte, araçlarınızın beklendiği gibi çalıştığından emin olmak için hiçbir şeyi değiştirmeden paketten çıkarma - yeniden paketleme - önyükleme yordamını bir kez izlemeye değer olabilir. Aksi takdirde, bir sorun olması durumunda, nedenin değişikliğiniz veya bazı uyumsuzluk olup olmadığından emin olmayacaksınız (başlangıçta standart olmayan prosedürler veya araçlar gerektiren bazı üreticiler hakkındaki açıklamalarıma bakın).
Yeni
new-boot.imgdosyayı almak için yeniden oluştur
CyanogenMod ROM oluşturma işlemi
mkbootfs,
boot.imgdosyayı üretmek için dahili bir araca dayanır (bu build / tools / releasetools / common.py dosyasında gerçekleşir ). Ancak, bu aracı oluşturma adımları benim
cpioiçin işe yaramaz derecede karmaşık görünüyor, ancak sağlanan sistemi kullanmak da aynı derecede iyi görünüyor. İkisi arasındaki temel fark,
mkbootfssos kodunda (çok) hızlı bir kontrolden sonra anladığım kadarıyla , ikincisinin, aşağıdaki dosyaları temel
/rootalan
cpioprosedür sırasında noktalı dosyaları ve sonuç arşivine dizini dahil etmeyerek bazı akıl sağlığı önlemleri uyguladığı gibi görünüyor. sadece seçilen dizin ağacını körü körüne arşive koyacaktır.
Sonuç: çok az avantajla derlemek için gereksiz derecede karmaşık, bu yüzden sistem tarafından sağlanan araçlara sadık kalalım!
Yeni RAM diskini oluşturarak başlayın,
ramdiskyukarıda oluşturulan dizinden şunu yazın:
find . ! -name . | LC_ALL=C sort | cpio -o -H newc -R root:root | gzip > ../new-boot.img-ramdisk.gz
Veya bir LZ4 arşivi oluşturmanız gerekirse:
find . ! -name . | LC_ALL=C sort | cpio -o -H newc -R root:root | lz4 > ../new-boot.img-ramdisk.lz4
Buradaki amaç, orijinal dosyaya olabildiğince yakın özelliklere sahip yeni bir RAM disk dosyası oluşturmaktır (örneğin, sahibinin forumlarda ve bloglarda paylaşılan prosedürlerde genellikle eksik görünmesi, ancak bu benim cihazımda gerekliydi).
new-boot.imgDosyanın kendisini oluşturmak için şimdi üst dizine gidin .
cd ..
Yukarıda görüldüğü gibi, CyanogenMod'un
unpackbootimgkomutu , beklenen her parametreyle eşleşen bir dosya oluşturur
mkbootimg. Bu nedenle, yapmanız gereken tek şey,
mkbootimg -htüm parametrelerin bir listesini almak, ardından eşleşen dosyayı kullanarak her birini uygun değere ayarlamaktır. Bazı parametrelerin dosya yolu beklerken, diğerleri dosyanın içeriğini değer olarak almayı beklediğini unutmayın. Aşağıdaki komutla ilgili bir örneğe bakın:
mkbootimg --kernel ./boot.img-zImage \
--ramdisk ./new-boot.img-ramdisk.gz \
--second ./boot.img-second \
--cmdline "$(cat ./boot.img-cmdline)" \
--base "$(cat ./boot.img-base)" \
--pagesize "$(cat ./boot.img-pagesize)" \
--dt ./boot.img-dt \
--ramdisk_offset "$(cat ./boot.img-ramdisk_offset)"
--second_offset "$(cat ./boot.img-second_offset)" \
--tags_offset "$(cat ./boot.img-tags_offset)" \
--output ./new-boot.img
Burada yalnızca iki parametre ayarlanmamıştır:
-
--board: Anladığım kadarıyla, bu sadece ortaya çıkan görüntüye bir model adı eklemeye izin veren bilgilendirici bir alandır.
-
--id: Bu herhangi bir değer beklemez, sadece görüntü oluşturulduktan sonra benzersiz bir tanımlayıcı yazdırır (zaman damgası ve sağlama toplamı birleştirerek).
new-boot.imgDosyayı cihaza flash
- Cihazı hızlı önyükleme modunda başlatın (genellikle güç ve ses açma düğmelerini basılı tutarak önyükleyici modu olarak da bilinir).
- USB kablosunu bağlayın.
-
Cihazın doğru tespit edildiğini kontrol edin:
sudo fastboot devices
-
Yeni ROM'u kullanarak önyüklemeyi deneyin (henüz yanıp sönmeden, bu nedenle sorun olması durumunda, izlere geri dönmek için telefonu yeniden başlatmanız,
./new-boot.imgdosya adını kendi adınızla değiştirmeniz yeterlidir):
sudo fastboot boot ./new-boot.img
-
Telefon yeni önyükleme görüntüsü ile başarılı bir şekilde çalışıyorsa, fastboot moduna geri dönün ve kalıcı olarak yanıp sönün:
sudo fastboot flash boot ./new-boot.img
sudo fastboot reboot
Sonuç
Bu prosedür ilk başta göz korkutucu görünebilir, ancak bir kez aldığınızda, aslında olmadığını göreceksiniz.
"Göz korkutucu" yönü, tek bir "Android sistemi" olmadığı gerçeğinden geliyor: birçok üretici ve ROM sağlayıcı, ince bir yol farkından tamamen standart dışı bir ortama kadar değişebilen değişiklikler yapıyor.
Yapmanız gereken, cihazınızın duruşunu ve sonra da sizin durumunuz için uygun olan birkaç komutun ne olduğunu belirlemektir. Onları aldıktan sonra, onlara yapışabilir ve hatta sık sık ihtiyacınız varsa kolayca komut dosyası oluşturabilirsiniz.
Bazen gönüllü olarak nispeten düşük düzeyli ayrıntılara girdim çünkü sorunlarınızı daha kolay çözmenizi sağlayacaktır. Yeni 'nizi oluşturmak ve flaş yapmak için bazı "daha kolay" opak yardımcı programı kullanır mısınız
boot.img dosyanızı cihazınızın onunla başlayamadığını görürseniz, hangi adımın yanlış gittiğini belirlemeniz daha zor olacaktır. Burada, her adımda, manipüle ettiğiniz verileri orijinal
boot.imgdosyadan gelen verilerle veya telefonda görülen verilerle karşılaştırabilir veya örneğin
boot.imgdosyayı orijinal veya yeni oluşturulan ile yeniden oluşturmayı deneyebilirsiniz. Herhangi bir fark yaratıp
boot.imgyaratmadığını kontrol etmek için RAM disk dosyası (bu, sorunun veya RAM disk dosyası oluşturma prosedüründen kaynaklanıp kaynaklanmadığını belirlemenizi sağlar).