Red de conocimiento informático - Computadora portátil - ¿Cómo cambió Android el kernel de Linux?

¿Cómo cambió Android el kernel de Linux?

Sabemos que Android es un sistema de código abierto, pero no es completamente de código abierto. Además, Android ha realizado cambios y mejoras en el kernel de Linux en muchos aspectos. Aunque alguna vez no estuvo satisfecho con la Fundación Linux con respecto al kernel, se llegó a un acuerdo. finalmente alcanzado. Esto se describirá y analizará en detalle a continuación.

1. Goldfish

El emulador de Android se implementa ejecutando la CPU virtual Goldfish. Goldfish ejecuta el conjunto de instrucciones arm926t (arm926t pertenece a la arquitectura armv5) y simula entradas/salidas, como entradas de teclado y salidas de LCD. En realidad, el emulador está desarrollado sobre qemu, mientras que la entrada/salida se basa en libSDL. Dado que Goldfish es una CPU virtual en la que se ejecuta el emulador, debemos eliminarla cuando Android se ejecuta en un dispositivo de hardware real. Por lo tanto, solo podemos eliminar Goldfish correctamente si entendemos qué cambios específicos ha realizado Google en Goldfish. Según las estadísticas, los cambios en Goldfish en el kernel de Android involucran principalmente 44 archivos, que se resumen a continuación.

Nota En este libro, los archivos modificados están precedidos por la etiqueta Chg y los archivos agregados están precedidos por la etiqueta New.

1Chgarch/arm/Makefile Agregar CONFIG_ARCH_GOLDFISH

2Newarch/arm/configs/goldfish_defconfig Archivo de configuración predeterminado

3Newarch/arm/mach-goldfish/Kconfig Agregar CPU Goldfish Archivo de configuración del kernel

4Newarch/arm/mach-goldfish/Makefile Agregar board-goldfish.o

5Newarch/arm/mach-goldfish/Makefile.boot Configurar el inicio de la CPU Goldfish

6Newarch/arm/mach-goldfish/audio.c Entrada/salida de audio

7Newarch/arm/mach-goldfish/ board-goldfish.c Solicitud de interrupción, entrada/salida, etc.

8Newarch/arm/mach-goldfish/pdev_bus.c bus de dispositivos

9Newarch/arm/mach-goldfish/pm.c administración de energía

10Newarch/arm /mach-goldfish/switch.c control de interruptor

11Newarch/arm/mach-goldfish/timer.c obtiene y establece la hora

12Chgarch/arm/mm/Kconfig agrega ARCH _GOLDFISH Agregue goldfish_tty a la lista de soporte

13Chgdrivers/char/Makefile

14Newdrivers/char/goldfish_tty.cTTY driver

15Chgdrivers/input/keyboard/Kconfig para Goldfish Agregar configuración archivo para eventos de teclado

16Chgdrivers/input/keyboard/Makefile, agregar evento goldfish_events

17Newdrivers/input/keyboard/goldfish_tty.cTTY driver

14Newdrivers /char/ goldfish_tty.keyboard/goldfish_events.cControlador de teclado Goldfish

18Chgdrivers/mmc/host/Kconfig agrega opciones de configuración del kernel para la tarjeta MMC Goldfish

19Chgdrivers/mmc/host/ Makefile agrega el controlador de la tarjeta MMC Goldfish

20Nuevos controladores/mmc/host/goldfish.c Controlador multimedia

21Nuevos controladores/char/goldfish_tty.c Controlador multimedia

21Chgdrivers/mtd/devices/Kconfig, por agregando opciones de configuración del kernel para dispositivos flash NAND Goldfish

22Chgdrivers/mtd/devices/Makefile, agregando goldfish_nand

23Newdrivers/mtd/devices/goldfish_nand.cNAND flash Driver

24Nuevos controladores/mtd/devices/goldfish_nand_reg.hControlador flash NAND

25Chgdrivers/power/Kconfig Agregar configuración del kernel para el controlador de batería Goldfish a través de Opciones

26Chgdrivers /power/Makefile agrega batería Goldfish

26Chgdrivers /power/Makefile agrega batería Goldfish

27Newdrivers/power/goldfish_battery.c Controlador de estado de energía y batería

28Chgdrivers/rtc/ Kconfig agrega kernel para las opciones de configuración del controlador rtc (reloj) de Goldfish

29Chgdrivers/rtc /Makefile Agregar rtc-goldfish

30Newdrivers/rtc/rtc-goldfish.h

35Newinclude/asm-arm/arch-goldfish /

entrada- macro.S

36Newinclude/asm-arm/arch-goldfish/hardware.h

37Newinclude/asm-arm/arch-goldfish/io.h

38Nuevoinclude/asm-arm/arch-goldfish/irqs.h

39Nuevoinclude/asm-arm/arch-goldfish/memory.h

40Nuevoinclude/asm-arm/arch- goldfish/system.h

41Nuevoinclude/asm-arm/arch-goldfish/timer.h

42Nuevoinclude/asm-arm/arch-goldfish/timex.h

43Newinclude/asm-arm/arch-goldfish/uncompress.h

44Newinclude/asm-arm/arch-goldfish/vmalloc.h

2, YAFFS2

A diferencia de las PC (los archivos se almacenan en el disco duro), los teléfonos móviles utilizan FLASH como medio de almacenamiento. El G1 de HTC usa NANDFLASH. Este método de almacenamiento se ha vuelto bastante popular y hay muchos tipos (como SLC, MLC, etc.). La densidad de almacenamiento es cada vez mayor (ya hay decenas de GB de NANDFLASH). El precio también es cada vez más alto.

YAFFS2 es un sistema de archivos específico para FLASH. YAFFS2 es la abreviatura de "Yet Another Flash File System, 2nd edition". Proporciona al kernel de Linux una interfaz eficiente para acceder a NANDFLASH. YAFFS2 proporciona al kernel de Linux una interfaz eficiente para acceder a NANDFLASH. Sin embargo, el kernel estándar 2.6.25 no es compatible con NANDFLASH, por lo que Google agregó soporte para NANDFLASH.

Según las estadísticas, para admitir YAFFS2, Google ha modificado y agregado los siguientes 35 archivos en total:

1Chgfs/Kconfig agrega la configuración de YAFFS

2Chg fs/Makefile agrega YAFFS

Los siguientes archivos fueron agregados a YAFFS2:

1Newfs/yaffs2/Kconfig18Newfs/yaffs2/yaffs_mtddif2.h

2Newfs/yaffs2/Makefile19Newfs/yaffs2/yaffs_nand.c

3Newfs/yaffs2/ devextras.h20Newfs/yaffs2/yaffs_nand.h

4Newfs/yaffs2/moduleconfig.h21Newfs/yaffs2/yaffs_nandemul2k.h

5Newfs/yaffs2/ yaffs_checkptrw.h25Newfs/yaffs2 /yaffs_packed2.h

9Newfs/yaffs2 /yaffs_fs.c26Newfs/yaffs2/yaffs_qsort.c

10Newfs/yaffs2/yaffs_getblockinfo.h27Newfs/yaffs2/yaffs_qsort.h

11Newfs/yaffs2 /yaffs_guts.c28Newfs/yaffs2/yaffs_compat.c

12Newfs/yaffs2/yaffs_guts.h29Newfs/yaffs2/yaffs_compat.h

13Newfs/yaffs2/ yaffs_mtdif.h

16Newfs/yaffs2/yaffs_mtddif1.h33Newfs/yaffs2/yportenv.h

17Newfs/ yaffs2/yaffs_mtddif2.c

3. >

Google cambió 10 archivos en la pila de comunicación Bluetooth. Estos cambios corrigen algunos errores evidentes relacionados con los auriculares Bluetooth, así como algunas funciones relacionadas con la depuración de Bluetooth y el control de acceso, como se muestra a continuación.

1Chgdrivers/bluetooth/Kconfig Agregar depuración HCI UART

2Chgdrivers/bluetooth/hci_II.c (Si la depuración HCI UART está definida en la configuración del kernel, agregue la macro BT_DBG()

3Chgnet/bluetooth/Kconfig Agregue opciones de configuración L2CAP, HCI_CORE, HCI_SOCK e interfaz y voz comunes

4Chgnet/bluetooth/af_bluetooth.c Si se define CONFIG_ANDROID_PARANOID_NETWORK, agregue verificación de seguridad para la función Bluetooth

p>

5Chgnet/bluetooth/hci_event.

cCorregir errores de cifrado de Bluetooth y agregar soporte de voz

6Chgnet/bluetooth/rfcomm/core.c Solucionar errores

7Chgnet/bluetooth/rfcomm/sock.c Solucionar errores

8Chgnet/bluetooth/sco.c Deshabilitar enlace SCO

9Chginclude/net/bluetooth/hci_core.h Deshabilitar LMP_ESCO

9Chginclude/net/bluetooth/hci_core.h Deshabilitar LMP_ESCO.

10Chginclude/net/bluetooth/rfcomm.h agrega el parámetro "out" en rfcomm_dlc

4 Scheduler (Scheduler)

El kernel de Android también ha sido modificado. Estrategias relacionadas con la programación y cronometrado de procesos. Solo se han modificado cinco archivos, de la siguiente manera:

1Chgkernel/sched.c Agregar NORMALIZED_SLEEPER

2Chgkernel/sched_fair.c Modificar la programación del kernel

3Chgkernel/softirq. c se modifica a programación de CPU

4Chgkernel/time/tick-sched.c se modifica a programación de CPU

5Chginclude/linux/tick.h Si se define CONFIG_NO_HZ, agregue tick_nohz_ update_stop_ sched_ tick()

5. Nuevos controladores agregados para Android

Android ha agregado muchos controladores nuevos específicos para Linux, como se muestra a continuación.

1) Carpeta IPC Un mecanismo IPC (comunicación entre procesos). Sus procesos pueden proporcionar servicios a otros procesos a través de API de llamadas al sistema Linux estándar. El concepto de IPC Binder surgió de una empresa llamada Be.Inc y fue adoptado por Palm Software antes que por Google.

2) Asesino de memoria baja De hecho, ya existe una función similar en el kernel, su nombre es oom killer (asesino de memoria insuficiente). Esta política intenta finalizar un proceso cuando la memoria es baja.

3) Ashmem Anonymous ****-disfrute de la memoria. Esta característica permite que los procesos disfruten de grandes cantidades de memoria entre ellos. Por ejemplo, el sistema puede usar Ashmem para guardar algunos íconos, y múltiples aplicaciones pueden acceder a esta memoria tan disfrutada para obtener estos íconos. Ashmem proporciona una forma para que el kernel recupere estos bloques de memoria agotados y disfrutados. Si el proceso intenta acceder a estos bloques de memoria recuperados, obtendrá un valor de retorno de error para poder volver a disfrutar de la asignación de bloques. e inicialización de datos.

4) Consola RAM y dispositivo de registro Para facilitar la depuración, Android ha agregado una función que permite ingresar información de depuración en un bloque de memoria. Además, Android también ha agregado un módulo de registro separado para que los procesos del espacio del usuario puedan leer y escribir información de registro, depurar información de impresión, etc.

5) Puente de depuración de Android (Android Debug Bridge) La depuración de dispositivos integrados es realmente problemática. Para facilitar la depuración, Google diseñó esta herramienta de depuración, que puede denominarse ADB. Utiliza USB como conexión. ADB puede ver Es un conjunto de protocolos que conectan dispositivos Android y PC.

Además de estas funciones principales, Android también añade reloj en tiempo real, interruptor, temporización GPIO y otras funciones. Todos estos cambios y nuevas características están contenidos en los siguientes 28 archivos.

1Chgdrivers/Kconfig Ingrese el archivo de configuración

2Chgdrivers/Makefile Agregue interruptores, controladores, etc.

3Newdrivers/android/Kconfig Agregue BINDER_IPC, POWER, POWER_ en la configuración STAT, POWER_ALARM, LOGGER, RAM_CONNSOLE, TIMED_GPIO, PARANOID_NETWORK

4Newdrivers/android/Makefile Add binder.o, power.o, alarm.o, logger.o, ram_console.o, timed_gpio

5Nuevos controladores/android/alarm.c Reloj de hardware del sistema y gestión del reloj en tiempo real

6Nuevos controladores/android/binder.c Mecanismo IPC (Binder)

7Nuevos controladores/android/ logger.c API de registro de Google

8Nuevos controladores/android/ram_console.cConsola RAM y dispositivo de registro para una fácil depuración[1]

9Nuevos controladores/android/timed_gpio.cControlador de sincronización GPIO de Google

10Newdrivers/switch/Kconfig agrega opciones de configuración para GPIO

11Newdrivers/switch/Makefile presenta el controlador GPIO

12Newdrivers/switch/switch_class.c

13Newdrivers/switch/switch_gpio.c

14Chgdrivers/usb/gadget/Kconfig Agregar opciones de configuración ADB

15Chgdrivers/usb/gadget/Makefile Compile la configuración requerida para las opciones ADB

16Nuevos controladores/usb/gadget/android_adb.cADB driver

17Nuevoinclude/linux/android_aid .hAgregar AID, INET, redes

18Nuevoinclude/linux/android_alarm .hConfiguración de la función de reloj

p>

19Nuevoinclude/linux/android_timed_gpio.hEstructura GPIO

20Nuevoinclude/linux/ashmem.hAndroid***Disfruta de la memoria

21Nuevoinclude/linux/binder .hDefinición de API IPC de Binder

22Newinclude/linux/logger.hDefinición de registrador

23Newinclude/linux/switch.hInterfaz de conmutador GPIO

24Chgmm/Makefile Agregar ashmem.o

25Newmm/ashmem.c Implementación para disfrutar de la memoria ****

26Chgdrivers/misc/Kconfig Agregar la opción de configuración LOW_MEMORY_KILLER

27

Chgdrivers/misc/Makefile Agregar lowmemorykiller.c

28Newdrivers/misc/lowmemorykiller.c Cuando la memoria sea demasiado baja, seleccione y finalice el proceso

6.

La Gestión de Energía (Power Management) es muy importante para los dispositivos móviles, pero también es la función más compleja y difícil de desarrollar. Google ha agregado un nuevo sistema de administración de energía que no incluye los originales Google ha agregado un nuevo sistema de administración de energía que no incluye los apm y dpm originales. Este cambio involucra principalmente los siguientes cinco archivos:

1Newinclude/linux/android_power.h define la API de administración de energía

2Newdrivers/android/power.c implementa la API de administración de energía

p>

3Chgdrivers/input/evdev.h define la API de administración de energía

3Chgdrivers/input/evdev.c modifica el manejo de energía de Android

4Chgfs/inotify_user.c modifica Android Procesamiento de energía

5Chgkernel/power/process.c Modifica el procesamiento de energía de Android

7. Varios

Además de los cambios anteriores, hay algunos pequeños cambios. como agregar funciones de depuración adicionales, control de retroiluminación del teclado, administración de red TCP, etc. *** Incluye 36 archivos, consulte las referencias para obtener más detalles.

Para facilitar la depuración, Android ha agregado una función que permite ingresar información de depuración en un bloque de memoria. Además, Android ha agregado un módulo de registro separado para que los procesos del espacio del usuario puedan leer y escribir información de registro, depurar información de impresión, etc.