Hợp nhất ổn định trên Linux

Mỗi ngày có một số lượng đáng kể các thay đổi được thực hiện đối với nhân Linux ngược dòng. Những thay đổi này thường không được đánh giá về tác động bảo mật, nhưng nhiều trong số chúng có khả năng tác động đến bảo mật của kernel. Đánh giá từng thay đổi này về tác động bảo mật là một hoạt động tốn kém và có thể không khả thi. Thay vào đó, một cách tiếp cận bền vững và dễ bảo trì hơn là thường xuyên đồng bộ hóa các thay đổi với nhân Linux ngược dòng.

Bạn nên thường xuyên cập nhật các thiết bị có hạt nhân được hỗ trợ dài hạn (LTS) mới hơn. Các bản cập nhật LTS thường xuyên có thể giúp giải quyết các lỗ hổng bảo mật tiềm ẩn chưa được nhận dạng, chẳng hạn như báo cáo Project Zero này từ đầu năm 2019, trước khi bị các tác nhân độc hại tiết lộ hoặc phát hiện công khai.

Điều kiện tiên quyết

  • Nhánh hạt nhân chung của Android (từ AOSP)
  • Nhánh dàn dựng hợp nhất LTS cho nhân thiết bị đích
  • Nhánh phát hành kernel thiết bị
  • Kho lưu trữ Git
  • Chuỗi công cụ xây dựng hạt nhân

Hợp nhất với các thay đổi LTS

Hợp nhất các thay đổi LTS
Hình 1 : Hợp nhất các thay đổi LTS

Các bước sau đây phác thảo các bước điển hình để hợp nhất LTS.

  • Hợp nhất ngược nhánh phát hành kernel đích vào nhánh dàn dựng -LTS
  • Hợp nhất cục bộ linux-ổn định hoặc Android phổ biến vào nhánh dàn dựng -LTS
  • Giải quyết xung đột hợp nhất (tham khảo ý kiến ​​chủ sở hữu khu vực/mã nếu cần)
  • Xây dựng cục bộ và thực hiện kiểm tra đơn vị/sanity (xem phần kiểm tra bên dưới)
  • Tải lên và hợp nhất các thay đổi phổ biến của Android vào nhánh dàn dựng LTS
  • Kiểm tra kỹ lưỡng bằng cách sử dụng nhánh dàn -LTS (xem phần kiểm tra bên dưới)
  • Xem lại kết quả kiểm tra
  • Giải quyết bất kỳ sự hồi quy nào, hợp nhất chia đôi khi cần thiết
  • Hợp nhất nhánh dàn dựng -LTS vào nhánh phát hành kernel thiết bị chính
  • Tạo bản dựng Android mới cho thiết bị của bạn có chứa nhân LTS dàn dựng
  • Biên dịch bản phát hành/ROM với kernel mới

Ví dụ về việc sáp nhập với LTS.

Hợp nhất Android-4.9 vào chính (thông qua dàn LTS) và kiểm tra và đồng bộ nhánh dàn 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

Tại thời điểm này, tốt nhất bạn nên đẩy quá trình hợp nhất ngược vào điều khiển nguồn của mình trước khi tiếp tục. Sau đó, hợp nhất Android phổ biến vào dàn LTS.

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

Giải quyết xung đột hợp nhất

Trong hầu hết các trường hợp, sẽ có xung đột giữa kernel chung của Android và nhánh dàn dựng -LTS. Việc giải quyết xung đột hợp nhất trong quá trình hợp nhất LTS có thể khó khăn nên dưới đây là một số mẹo hữu ích để giải quyết chúng.

Hợp nhất gia tăng

Nếu một khoảng thời gian đáng kể đã trôi qua kể từ khi nhân thiết bị được cập nhật bằng LTS thì rất có thể đã có nhiều (>50) bản phát hành ổn định kể từ khi bản cập nhật hợp nhất cuối cùng được phát hành ngược dòng. Cách tốt nhất để giải quyết vấn đề này là từ từ bắt kịp bằng cách hợp nhất số lượng bản phát hành nhỏ hơn cùng một lúc (<=5 phiên bản nhỏ), đồng thời thử nghiệm ở từng bước trong quá trình thực hiện.

Ví dụ: nếu cấp phụ của phiên bản nhân thiết bị là 4.14.100 và cấp phụ ổn định ngược dòng là 4.14.155 thì tốt nhất nên hợp nhất theo từng bước nhỏ để đảm bảo có thể xem xét và kiểm tra đầy đủ khối lượng thay đổi hợp lý.

Nói chung, chúng tôi nhận thấy rằng việc tăng dần theo lô <=5 bản phát hành nhỏ cho mỗi lần hợp nhất sẽ đảm bảo tạo ra một bộ bản vá dễ quản lý hơn.

Kiểm tra

Kiểm tra khởi động nhanh

Để thực hiện kiểm tra khởi động nhanh, trước tiên bạn phải hợp nhất các thay đổi LTS cục bộ và xây dựng kernel.
Các bước sau đây giải thích quy trình kiểm tra khởi động nhanh.

Kết nối thiết bị đích với máy tính của bạn bằng cáp USB và đẩy .ko vào thiết bị bằng Cầu gỡ lỗi Android (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

Khởi động dtbo và tải hình ảnh kernel.

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

Kiểm tra nhật ký /dev/kmsg để tìm lỗi.

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

kiểm tra Android

Trước tiên hãy xây dựng hình ảnh -userdebug cục bộ bằng hạt nhân và mô-đun LTS mới.

Kiểm tra /dev/kmsg xem có lỗi nào không và xác nhận không có lỗi nào trước khi tiếp tục. Kiểm tra những điều sau đây để đảm bảo mọi thứ đều hoạt động như mong đợi.

  • Tốc độ Wi-Fi
  • trình duyệt Chrome
  • Chụp ảnh và quay video bằng ứng dụng camera
  • Phát lại video YouTube bằng loa tích hợp và tai nghe Bluetooth
  • Cuộc gọi qua mạng của nhà mạng
  • Cuộc gọi video qua Wi-Fi

Bộ thử nghiệm tự động

Việc xác minh cuối cùng để đảm bảo hình ảnh sản phẩm không bị thoái lui được thực hiện bằng cách sử dụng bộ thử nghiệm có sẵn thông qua bộ thử nghiệm của nhà cung cấp (VTS) và thử nghiệm sức chịu đựng về độ ổn định tự động.