¿Cómo cambió Android el kernel de Linux?
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 p>
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 p>
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 p>
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() p >
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>
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 p>
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 p>
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.