Her gün, ana Linux çekirdeğine önemli sayıda değişiklik gönderilir. Bu değişiklikler genellikle güvenlik üzerindeki etkileri açısından değerlendirilmez ancak çoğu, çekirdeğin güvenliğini etkileyebilir. Bu değişikliklerin her birinin güvenlik üzerindeki etkisini değerlendirmek pahalı ve muhtemelen uygulanabilir olmayan bir işlemdir. Bunun yerine, değişiklikleri yukarı akış Linux çekirdeği ile düzenli olarak senkronize etmek, daha sürdürülebilir ve sürdürülebilir bir yaklaşım olacaktır.
Cihazları, daha yeni uzun süreli destekli (LTS) çekirdeklerle düzenli olarak güncellemeniz önerilir. Düzenli LTS güncellemeleri, herkese açık şekilde ifşa edilmeden veya kötü amaçlı kişiler tarafından keşfedilmeden önce 2019'un başlarında yayınlanan bu Project Zero raporu gibi tanınmayan olası güvenlik açıklarının düzeltilmesine yardımcı olabilir.
Ön koşullar
- Android ortak çekirdek dalı (AOSP'den)
- Hedef cihaz çekirdeği için LTS birleştirme hazırlık dalı
- Cihaz çekirdeği sürüm dalı
- Git deposu
- Çekirdek oluşturma araç zinciri
LTS değişiklikleriyle birleştirme
Aşağıdaki adımlarda, LTS birleştirmeyle ilgili tipik adımlar özetlenmiştir.
- Hedef çekirdek sürüm dalını tekrar -LTS hazırlık dalına bağlayın
- linux-stable veya Android common'u -LTS hazırlık şubesiyle yerel olarak birleştirme
- Birleştirme anlaşmazlıklarını çözün (gerektiğinde alan/kod sahiplerine danışın)
- Yerel olarak derleyin ve sağlık/birim testleri yapın (aşağıdaki test bölümüne bakın)
- Android'deki ortak değişiklikleri LTS hazırlık dalına yükleme ve birleştirme
- -LTS hazırlık şubesini kullanarak kapsamlı bir şekilde test edin (aşağıdaki test bölümüne bakın)
- Test sonuçlarını inceleme
- Geriye gidişleri giderin, gerekirse bisect birleştirin
- -LTS hazırlık dalını ana cihaz çekirdek sürüm dalıyla birleştirme
- Cihazlarınız için LTS çekirdeğini içeren yeni Android derlemesi oluşturun
- Sürüm derlemesini/ROM'u yeni çekirdekle derleme
LTS ile birleştirme örneği.
android-4.9'u main ile birleştirin (LTS hazırlık aşaması üzerinden) ve LTS hazırlık aşaması dalını kontrol edip senkronize edin:
repo init -b <Device kernel LTS staging branch> # init
repo sync
git checkout -b lts <Device kernel LTS staging branch>
git merge <Device kernel release branch> # back-merge
git commit
Bu noktada, devam etmeden önce geri birleştirme işlemini kaynak uzaktan kumandanıza göndermeniz önerilir. Ardından, Android ortak öğelerini LTS hazırlığına birleştirin.
git merge -X patience android-4.9-q # LTS merge
Birleştirme çakışmalarını çözme
Çoğu durumda, Android ortak çekirdeği ile -LTS hazırlık şubesi arasında çakışmalar vardır. LTS birleştirme işlemleri sırasında birleştirme çakışmalarını çözmek zor olabilir. Bu nedenle, bu tür sorunları gidermeyle ilgili bazı faydalı ipuçlarını aşağıda bulabilirsiniz.
Artımlı birleştirme
Bir cihaz çekirdeğinin LTS ile güncellenmesinden bu yana önemli bir süre geçmişse son birleştirilmiş güncellemenin yayına sunulmasından bu yana birçok (>50) kararlı sürüm yayınlanmış olabilir. Bu sorunu gidermenin en iyi yolu, her adımda testler gerçekleştirirken aynı anda daha az sayıda sürüm (<=5 küçük sürüm) birleştirerek yavaş yavaş güncellemeleri uygulamaktır.
Örneğin, cihaz çekirdek sürümü alt düzeyi 4.14.100 ve yayındaki kararlı alt düzey 4.14.155 ise makul miktarda değişikliğin yeterli şekilde incelenip test edilebilmesi için küçük artışlarla birleştirme yapmak en iyisidir.
Genel olarak, birleştirme başına 5'ten az küçük sürüm içeren gruplar halinde artımlı şekilde çalışmanın daha yönetilebilir bir yama grubu sağladığını tespit ettik.
Test
Hızlı başlatma testi
Hızlı bir önyükleme testi yapmak için önce LTS değişikliklerini yerel olarak birleştirip çekirdeği oluşturmanız gerekir. Aşağıdaki adımlar hızlı başlatma testi işlemini açıklar.
Hedef cihazı USB kablosuyla bilgisayarınıza bağlayın ve Android Debug Bridge'i (adb) kullanarak .ko dosyasını cihaza yükleyin.
adb root
adb disable-verity
adb reboot
(wait for device boot-to-home)adb root
adb remount
adb push *.ko vendor/lib/modules/
adb reboot bootloader
dtbo'yu önyükleyin ve çekirdek görüntüsünü yan yükleyin.
fastboot boot --header-version=2 Image.lz4 (redo again if device rebooted)
Hata olup olmadığını görmek için /dev/kmsg günlüğünü kontrol edin.
adb shell
su
cat /dev/kmsg (inspect kernel log for obvious new errors)
Android testleri
Öncelikle -userdebug görüntüsünü yeni LTS çekirdek ve modülleriyle yerel olarak derleyin.
Devam etmeden önce /dev/kmsg
'te hata olup olmadığını kontrol edin ve hata olmadığını onaylayın. Her şeyin beklendiği gibi çalıştığından emin olmak için aşağıdakileri test edin.
- kablosuz ağ hızı
- Chrome tarayıcı
- Kamera uygulamasıyla resim ve video çekme
- YouTube videolarını yerleşik hoparlörler ve Bluetooth kulaklık ile oynatma
- Operatör ağı üzerinden yapılan aramalar
- Kablosuz ağ üzerinden görüntülü görüşme
Otomatik test paketleri
Ürün resminin gerilememesini sağlamak için nihai doğrulama, tedarikçi firma test paketi (VTS) ve otomatik kararlılık stres testi aracılığıyla sunulan test paketleri kullanılarak gerçekleştirilir.