Her gün Linux çekirdeğinde önemli sayıda değişiklik yapılıyor. Bu değişiklikler genellikle güvenlik etkisi açısından değerlendirilmez ancak birçoğunun çekirdeğin güvenliğini etkileme potansiyeli vardır. Bu değişikliklerin her birinin güvenlik etkisi açısından değerlendirilmesi pahalı ve muhtemelen gerçekleştirilmesi mümkün olmayan bir işlemdir. Bunun yerine daha sürdürülebilir ve sürdürülebilir bir yaklaşım, değişiklikleri yukarı akış Linux çekirdeğiyle düzenli olarak senkronize etmektir.
Cihazların daha yeni Uzun Süreli Desteklenen (LTS) çekirdeklerle düzenli olarak güncellenmesi önerilir. Düzenli LTS güncellemeleri, kamuya açıklanmadan veya kötü niyetli aktörler tarafından keşfedilmeden önce, 2019'un başlarında yayınlanan bu Proje Sıfır raporu gibi potansiyel tanınmayan güvenlik açıklarının giderilmesine yardımcı olabilir.
Önkoşullar
- Android ortak çekirdek dalı (AOSP'den)
- Hedef cihaz çekirdeği için bir LTS birleştirme hazırlama 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ştirmeye yönelik tipik adımlar özetlenmektedir.
- Hedef çekirdek sürüm dalını -LTS hazırlama dalına geri birleştirin
- Linux-stable veya Android common'u yerel olarak -LTS hazırlama dalıyla birleştirin
- Birleştirme çakışmalarını çözün (gerektiğinde alan/kod sahiplerine danışın)
- Yerel olarak oluşturun ve akıl sağlığı/birim testi gerçekleştirin (aşağıdaki test bölümüne bakın)
- Android ortak değişikliklerini LTS hazırlama şubesine yükleyin ve birleştirin
- -LTS aşamalandırma dalını kullanarak kapsamlı bir şekilde test edin (aşağıdaki test bölümüne bakın)
- Test sonuçlarını inceleyin
- Tüm gerilemeleri ele alın, birleştirmeyi gerektiği gibi ikiye bölün
- -LTS hazırlama dalını ana cihaz çekirdek yayın dalıyla birleştir
- Cihazlarınız için hazırlama LTS çekirdeğini içeren yeni Android derlemesi oluşturun
- Sürüm yapısını/ROM'u yeni çekirdekle derleyin
LTS ile birleştirme örneği.
Android-4.9'u ana (LTS aşamalandırma yoluyla) ile birleştirin ve LTS aşamalandırma dalını satın alın ve 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ştirmeyi kaynak uzaktan kumandanıza göndermek en iyisidir. Bundan sonra, Android Common'u LTS aşamalandırmayla 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ırlama dalı arasında çakışmalar olacaktır. LTS birleştirmeleri sırasındaki birleştirme çakışmalarını çözmek zor olabilir; bu nedenle aşağıda bunların çözümüne yönelik bazı yararlı ipuçları verilmiştir.
Artımlı birleştirme
Bir cihaz çekirdeğinin LTS ile güncellenmesinden bu yana önemli miktarda zaman geçtiyse, son birleştirilmiş güncellemenin yukarı yönde yayımlanmasından bu yana çok sayıda (>50) kararlı sürümün olması ihtimali yüksektir. Bu sorunu çözmenin en iyi yolu, yolun her adımında test ederken aynı anda daha az sayıda sürümü (<=5 küçük sürüm) birleştirerek yavaş yavaş yetişmektir.
Örneğin, cihaz çekirdeği sürümü alt düzeyi 4.14.100 ve yukarı akış kararlı alt düzeyi 4.14.155 ise, makul miktardaki değişikliğin yeterince incelenip test edilebilmesini sağlamak için küçük artışlarla birleştirme en iyisidir.
Genel olarak, birleştirme başına <=5 küçük sürümden oluşan gruplar halinde artımlı olarak çalışmanın daha yönetilebilir bir yama kümesi sağladığını bulduk.
Test yapmak
Hızlı önyükleme testi
Hızlı önyükleme testi gerçekleştirmek için öncelikle LTS değişikliklerini yerel olarak birleştirmeli ve çekirdeği oluşturmalısınız.
Aşağıdaki adımlarda hızlı önyükleme testi işlemi açıklanmaktadır.
Hedef cihazı bir USB kablosu kullanarak bilgisayarınıza bağlayın ve Android Hata Ayıklama Köprüsü'nü (ADB) kullanarak .ko dosyasını cihaza gönderin.
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 tarafa 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 çekirdeği ve modülleriyle yerel olarak oluşturun.
Devam etmeden önce /dev/kmsg'de herhangi bir hata olup olmadığını kontrol edin ve hata olmadığını doğrulayın. Her şeyin beklendiği gibi hareket ettiğinden emin olmak için aşağıdakileri test edin.
- Wi-Fi hızı
- Chrome tarayıcı
- Kamera uygulamasıyla resim ve video çekimi
- Dahili hoparlörler ve Bluetooth kulaklıkla YouTube video oynatma
- Operatör ağı üzerinden aramalar
- Wi-Fi üzerinden görüntülü görüşme
Otomatik test paketleri
Ürün görüntüsünün gerilemediğinden emin olmak için yapılan son doğrulama, satıcı test paketi (VTS) aracılığıyla sunulan test paketleri ve otomatik stabilite stres testi kullanılarak gerçekleştirilir.