Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Fusiones estables en Linux

Todos los días se realiza una cantidad significativa de cambios en el kernel de Linux ascendente. Estos cambios generalmente no se evalúan para determinar el impacto en la seguridad, pero muchos de ellos tienen el potencial de afectar la seguridad del kernel. Evaluar cada uno de estos cambios para determinar el impacto en la seguridad es una operación costosa y probablemente inviable. En cambio, un enfoque más sostenible y fácil de mantener es sincronizar regularmente los cambios con el kernel de Linux ascendente.

Se recomienda actualizar periódicamente los dispositivos con kernels compatibles a largo plazo (LTS) más nuevos. Las actualizaciones regulares de LTS pueden ayudar a abordar posibles vulnerabilidades de seguridad no reconocidas, como este informe del Proyecto Cero de principios de 2019, antes de la divulgación pública o el descubrimiento por parte de actores malintencionados.

Prerrequisitos

  • Rama común del kernel de Android (de AOSP)
  • Una rama de ensayo de fusión LTS para el kernel del dispositivo de destino
  • Rama de lanzamiento del kernel del dispositivo
  • Repositorio de Git
  • Cadena de herramientas de construcción de kernel

Fusión con cambios LTS

Fusionar cambios de LTS
Figura 1 : Fusionar cambios de LTS

Los siguientes pasos describen los pasos típicos para una combinación LTS.

  • Realice una fusión inversa de la rama de lanzamiento del núcleo de destino en la rama de ensayo -LTS
  • Fusionar localmente linux-stable o Android common en la rama de ensayo -LTS
  • Resuelva los conflictos de fusión (consulte a los propietarios de áreas / códigos según sea necesario)
  • Construya localmente y realice pruebas de cordura / unidad (consulte la sección de pruebas a continuación)
  • Cargar y fusionar cambios comunes de Android en la rama de ensayo de LTS
  • Pruebe a fondo utilizando la rama de ensayo -LTS (consulte la sección de prueba a continuación)
  • Revisar los resultados de la prueba
  • Aborde cualquier regresión, bisecte la fusión según sea necesario
  • Fusionar la rama de ensayo -LTS en la rama de lanzamiento del kernel del dispositivo principal
  • Cree una nueva compilación de Android para sus dispositivos que incluya el kernel LTS de ensayo
  • Compilar la versión / ROM de la versión con el nuevo kernel

Ejemplo de fusión con LTS.

Fusionar android-4.9 en main / master (a través de la preparación de LTS) y realizar el pago y sincronizar la rama de preparación de 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

En este punto, es mejor presionar la fusión hacia atrás con el control remoto de origen antes de continuar. Después de eso, combine Android common en LTS staging.

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

Resolución de conflictos de fusión

En la mayoría de los casos, habrá conflictos entre el kernel común de Android y la rama de ensayo -LTS. Resolver conflictos de fusión durante las fusiones LTS puede ser un desafío, por lo que a continuación se ofrecen algunos consejos útiles para abordarlos.

Fusión incremental

Si ha pasado una cantidad significativa de tiempo desde que se actualizó el kernel de un dispositivo con LTS, es muy probable que haya habido muchas (> 50) versiones estables desde que se lanzó la última actualización combinada. La mejor manera de abordar esto es ponerse al día lentamente fusionando un número menor de versiones a la vez (<= 5 versiones menores), mientras se prueba en cada paso del camino.

Por ejemplo, si el subnivel de la versión del kernel del dispositivo es 4.14.100 y el subnivel estable ascendente es 4.14.155, es mejor fusionar en pequeños incrementos para garantizar que se pueda revisar y probar adecuadamente un volumen razonable de cambios.

En general, hemos descubierto que trabajar de forma incremental en lotes de <= 5 versiones menores por fusión garantiza un conjunto de parches más manejable.

Pruebas

Prueba de arranque rápida

Para realizar una prueba de arranque rápido, primero debe fusionar los cambios de LTS localmente y compilar el kernel.
Los siguientes pasos explican el proceso de prueba de arranque rápido.

Conecte el dispositivo de destino a su computadora con un cable USB y presione .ko al dispositivo usando 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

Inicie dtbo y descargue la imagen del kernel.

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

Consulte el registro / dev / kmsg para ver si hay errores.

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

Pruebas de Android

Primero compile la imagen -userdebug localmente con el nuevo kernel y módulos LTS.

Verifique / dev / kmsg para ver si hay errores y confirme que no haya ninguno antes de continuar. Pruebe las siguientes cosas para asegurarse de que todo funcione como se esperaba.

  • Velocidad de Wi-Fi
  • Navegador Chrome
  • Captura de imágenes y videos con la aplicación de la cámara
  • Reproducción de videos de YouTube con altavoces integrados y auriculares Bluetooth
  • Llamadas a través de la red del operador
  • Videollamada a través de Wi-Fi

Suites de pruebas automatizadas

La verificación final para garantizar que la imagen del producto no retroceda se realiza utilizando los conjuntos de pruebas disponibles a través del conjunto de pruebas del proveedor (VTS) y las pruebas de estrés de estabilidad automatizadas.