Araç seçimi
Burada sunduğum yöntem CyanogenMod'un Android kaynak koduna dayanıyor.
Google'ın AOSP sadece aracı sağlarken inşaboot.img
dosyayı, CyanogenMod da ekler unpackbootimg
size 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.img
dosyayı 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.img
dosyanın içeriğini çıkarır ve mkbootimg
yapı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.img
Ambalajlama 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.img
dosyayı, 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 mkbootimg
ile 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.img
Dosyayı 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.img
arşivin kökünde tam orada olmalıdır.
İkinci yöntem için, önce depolama cihazının boot.img
iç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 mtd2
iliş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.img
bu 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.img
dosyanın boot.img
stok 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.img
dosyayı ambalajından çıkarın
boot.img
Daha ö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 upackbootimg
aynı 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.gz
veya *-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.img
telefonun kök dizininin içeriğini düzenlemek için. Yukarıda görüldüğü gibi, bu içerik *-ramdisk.gz
veya *-ramdisk.lz4
dosyada 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.img
dosyayı almak için yeniden oluştur
CyanogenMod ROM oluşturma işlemi mkbootfs
, boot.img
dosyayı ü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 cpio
iç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, mkbootfs
sos kodunda (çok) hızlı bir kontrolden sonra anladığım kadarıyla , ikincisinin, aşağıdaki dosyaları temel /root
alan cpio
prosedü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, ramdisk
yukarı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.img
Dosyanın kendisini oluşturmak için şimdi üst dizine gidin .
cd ..
Yukarıda görüldüğü gibi, CyanogenMod'un unpackbootimg
komutu , beklenen her parametreyle eşleşen bir dosya oluşturur mkbootimg
. Bu nedenle, yapmanız gereken tek şey, mkbootimg -h
tü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.img
Dosyayı 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.img
dosya 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ızboot.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.img
dosyadan gelen verilerle veya telefonda görülen verilerle karşılaştırabilir veya örneğin boot.img
dosyayı orijinal veya yeni oluşturulan ile yeniden oluşturmayı deneyebilirsiniz. Herhangi bir fark yaratıp boot.img
yaratmadığı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).