Google is committed to advancing racial equity for Black communities. See how.
Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

Penggabungan yang stabil untuk Linux

Setiap hari sejumlah besar perubahan dilakukan pada kernel Linux hulu. Perubahan ini umumnya tidak dievaluasi untuk dampak keamanan, tetapi banyak di antaranya yang berpotensi memengaruhi keamanan kernel. Mengevaluasi setiap perubahan ini untuk mengetahui dampak keamanan adalah operasi yang mahal dan kemungkinan besar tidak dapat dilakukan. Sebaliknya, pendekatan yang lebih berkelanjutan dan dapat dipelihara adalah dengan menyinkronkan perubahan secara teratur dengan kernel Linux hulu.

Direkomendasikan untuk memperbarui perangkat secara teratur dengan kernel Long Term Supported (LTS) yang lebih baru. Pembaruan LTS reguler dapat membantu mengatasi potensi kerentanan keamanan yang tidak dikenali, seperti laporan Project Zero ini dari awal tahun 2019, sebelum pengungkapan atau penemuan publik oleh aktor jahat.

Prasyarat

  • Cabang kernel umum Android (dari AOSP)
  • Cabang pementasan gabungan LTS untuk kernel perangkat target
  • Cabang rilis kernel perangkat
  • Git repo
  • Kernel build toolchain

Penggabungan dengan perubahan LTS

Menggabungkan perubahan LTS
Gambar 1 : Menggabungkan perubahan LTS

Langkah-langkah berikut menjelaskan langkah-langkah khas untuk gabungan LTS.

  • Gabungkan kembali cabang rilis kernel target ke cabang pementasan -LTS
  • Gabungkan linux-stable atau Android common secara lokal ke dalam cabang staging -LTS
  • Selesaikan konflik penggabungan (konsultasikan dengan pemilik area / kode sesuai kebutuhan)
  • Bangun secara lokal dan lakukan pengujian sanity / unit (lihat bagian pengujian di bawah)
  • Unggah dan gabungkan perubahan umum Android ke cabang pementasan LTS
  • Uji secara menyeluruh menggunakan -LTS staging branch (lihat bagian pengujian di bawah)
  • Tinjau hasil tes
  • Atasi regresi apa pun, gabungkan dua jika perlu
  • Gabungkan -LTS staging branch ke dalam cabang rilis kernel perangkat utama
  • Buat versi Android baru untuk perangkat Anda yang menyertakan kernel LTS penahapan
  • Kompilasi rilis build / ROM dengan kernel baru

Contoh penggabungan dengan LTS.

Gabungkan android-4.9 ke main / master (melalui penahapan LTS) dan checkout serta sinkronkan cabang pementasan LTS:

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

Pada titik ini yang terbaik adalah mendorong penggabungan-kembali ke remote sumber Anda sebelum melanjutkan. Setelah itu, gabungkan Android biasa ke dalam pementasan LTS.

git merge -X patience android-4.9-q            # LTS merge

Menyelesaikan konflik penggabungan

Dalam kebanyakan kasus, akan ada konflik antara kernel umum Android dan cabang pementasan -LTS. Menyelesaikan konflik penggabungan selama penggabungan LTS bisa menjadi tantangan, jadi di bawah ini adalah beberapa tip berguna untuk mengatasinya.

Penggabungan bertahap

Jika sejumlah besar waktu telah berlalu sejak kernel perangkat diperbarui dengan LTS, ada kemungkinan besar telah ada banyak (> 50) rilis stabil sejak pembaruan gabungan terakhir dirilis di upstream. Cara terbaik untuk mengatasi hal ini adalah mengejar ketinggalan secara perlahan dengan menggabungkan rilis dalam jumlah yang lebih kecil pada satu waktu (<= 5 versi kecil), sambil menguji di setiap langkahnya.

Misalnya, jika sublevel versi kernel perangkat adalah 4.14.100 dan sublevel stabil upstream adalah 4.14.155, sebaiknya gabungkan sedikit demi sedikit untuk memastikan volume perubahan yang wajar dapat ditinjau dan diuji secara memadai.

Secara umum, kami telah menemukan bahwa bekerja secara bertahap dalam batch <= 5 rilis minor per penggabungan memastikan kumpulan patch yang lebih mudah dikelola.

Menguji

Tes boot cepat

Untuk melakukan tes boot cepat, Anda harus menggabungkan perubahan LTS secara lokal dan membangun kernel.
Langkah-langkah berikut menjelaskan proses uji boot cepat.

Hubungkan perangkat target ke komputer Anda menggunakan kabel USB dan dorong .ko ke perangkat menggunakan Android Debug Bridge (ADB).

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

Boot dtbo dan lakukan sideload image kernel.

fastboot boot --header-version=2 Image.lz4 (redo again if device rebooted)

Periksa log / dev / kmsg apakah ada kesalahan.

adb shell
su
cat /dev/kmsg  (inspect kernel log for obvious new errors)

Tes Android

Pertama-tama buat image -userdebug secara lokal dengan kernel dan modul LTS yang baru.

Periksa / dev / kmsg apakah ada kesalahan dan konfirmasi tidak ada kesalahan sebelum melanjutkan. Uji hal-hal berikut untuk memastikan semuanya berfungsi seperti yang diharapkan.

  • Kecepatan Wi-Fi
  • Browser Chrome
  • Pengambilan gambar dan video dengan aplikasi kamera
  • Pemutaran video YouTube dengan speaker internal dan headset Bluetooth
  • Panggilan melalui jaringan operator
  • Panggilan video melalui Wi-Fi

Rangkaian pengujian otomatis

Verifikasi akhir untuk memastikan citra produk tidak mengalami kemunduran dilakukan dengan menggunakan rangkaian pengujian yang tersedia melalui rangkaian pengujian vendor (VTS) dan pengujian tekanan stabilitas otomatis.