Cómo modificar la segunda pantalla de inicio durante el inicio de Android
1. La primera pantalla de inicio
La primera pantalla de inicio de Android es en realidad la pantalla de inicio del kernel de Linux. Por defecto esta pantalla no aparece a menos que habilitemos las siguientes dos opciones de compilación al compilar el kernel:
CONFIG_FRAMEBUFFER_CONSOLE
CONFIG_LOGO
La primera La opción de compilación indica que el kernel admite la consola framebuffer y sus elementos de menú de configuración correspondientes son: Controladores de dispositivo ---gt; soporte de gráficos ---gt; soporte de controlador de pantalla de consola ---gt; La segunda opción de compilación indica que el kernel necesita mostrar el logotipo durante el proceso de inicio. Los elementos del menú de configuración correspondientes son: Controladores de dispositivo ---gt; Soporte de gráficos de consola ---gt; soporte: Controladores de dispositivos ---gt; soporte de gráficos ---logotipo de arranque. )banda.
El dispositivo de hardware frame buffer tiene un módulo de controlador correspondiente fbmem en el kernel, que se implementa en el archivo kernel/goldfish/drivers/video/fbmem.c. Su función de inicialización es la siguiente:
/**
* fbmem_init - Inicia el subsistema frame buffer
*
* Inicializa el subsistema de buffer de cuadros.
*
* NOTA: Esta función _solo_ la llama el controlador /char/mem.c.
*
*/
static int __init
fbmem_init(void)
{
proc_create("fb", 0, NULL y fb_proc_fops);
if (register_chrdev(FB_MAJOR, "fb", & fb_fops))
printk(" no se puede obtener d mayor para fb devs\n", FB_MAJOR);
fb_class = class_create(THIS_MODULE, "graphics");
if (IS_ERR(fb_class)) {
p>printk(KERN_WARNING "No se puede crear la clase fb; errno = ld\n", PTR _ERR(fb_class));
fb_class = NULL
} p>
p>
devuelve 0.
Devuelve 0;
}
Esta función primero llama a proc_create para crear un archivo fb en el directorio /proc y luego llama a Register _chrdev para registrar un archivo. llamado dispositivo de caracteres fb y finalmente llame a class_create para crear un directorio de gráficos que describa el sistema de gráficos del kernel en el directorio /sys/class.
Además de realizar el trabajo de inicialización anterior, el módulo fbmem también exporta una función Register_framebuffer:
EXPORT_SYMBOL(register_framebuffer);
Esta función se utiliza durante el proceso de inicialización. Proceso de inicio del kernel llamado para realizar la operación de registrar el dispositivo de hardware del búfer de cuadros, la implementación específica es la siguiente:
/**
* registrar_framebuffer: registrar el dispositivo de búfer de cuadros <. /p>
* @fb_info: Estructura de información del frame buffer
*
* Registrar dispositivo frame buffer @fb_info.
*
* Devuelve un valor negativo errno en caso de error, cero en caso de éxito.
*
*/
int
register_framebuffer(struct fb_info *fb_info)
{
int i;
estructura fb_event evento
...
if (num_registered_fb == FB_MAX)
retorno -ENXIO;
...
num_registered_fb;
para (i = 0; i lt; FB_MAX; i)
p>if (!if (! registrado_fb[i])
break;
fb_info-gt; nodo = i;
mutex_init(amp; fb_info-gt ;lock);
fb_info-gt;dev = dispositivo_create(fb_class, fb_info-gt;dispositivo,
MKDEV(FB_MAJOR, i), NULL, "fbd", i
);if (IS_ERR(fb_info-gt;dev)){
/* No fatal*/
printk(KERN_WARNING "No se puede crear el dispositivo para framebuffer d . errno = ld\n", i, PTR_ERR(fb_info-gt;dev));
fb_info-gt;dev = NULL;
} else
fb_init_device( fb_info);
...
registrado_fb[i] = fb_info;
evento.info = fb_info
fb_notifier_call_chain(FB_EVENT_FB_REGISTERED; , amp; event);
return 0;
}
Dado que puede haber varios dispositivos de hardware de frame buffer en el sistema, el módulo fbmem utiliza el matrizregistrado_fb para guardar todos los dispositivos de hardware de búfer de cuadros registrados, donde cada hardware de búfer de cuadros se describe utilizando la estructura fb_info.