análisis trama de capa Android HAL (a)

Como un androide participar unidad o participar en el fondo, creo que es necesario para hal de dominar, pero debe llegar a una cierta profundidad, por lo que resumió lo que para escribir toda la idea de su propio análisis.

Android sobre todo para ver el código fuente, el código fuente se obtiene de acuerdo con la idea. (Ver código fuente que ver qué libros son libro útil)

Lo que HAL androide? ¿Por qué tiene?

capa de abstracción de hardware es entre la estructura de capa abstracta entre la capa superior y Android kernel kernel. Él es un paquete de, la capa superior de Linux impulsado para proporcionar una interfaz unificada para el hardware subyacente, la aplicación superior no tiene que saber cómo conseguir un trabajo específico, que protege los detalles de implementación.

Se coloca en toda la arquitectura androide como se muestra a continuación:

El hardware operativo Linux tradicional, básicamente, se dio cuenta de que el conductor en el espacio del núcleo Linux, entonces ¿por qué hacerlo ahora molestar al funcionamiento del hardware divide en dos partes, Hal y Linux conducirlo?

También pertenecen a la hal espacio de usuario, el espacio del núcleo Linux que pertenece a la unidad. De hecho, no es redundante. Entonces ¿por qué tal cosa superior, citando numerosas:

1. establecer el marco Google Hal, el marco para el juego superior a través de hal llamada JNI proporciona una API unificada, los desarrolladores de hardware o el trasplante sólo tiene que seguir el desarrollo del marco sin la realización de la factura de energía en la interacción con la capa superior , se centrará en la capa de hal sí se puede lograr.

2. Desde un punto de vista comercial, muchos fabricantes de hardware no quieren poseer alguna del núcleo cosas relacionados con el hardware se abren, si será el propietario de todos los conductores del hardware en la implementación del controlador espacio del núcleo, debe cumplir con la GPL, se requiere de código abierto. Una vez que tenga la capa HAL, que pueden lograr algo algoritmos como HAL en la capa central, y la capa hal en el espacio de usuario, no pertenece al núcleo de Linux y el código fuente de Android es el siguiente appache acuerdo, esto es de código abierto o no abrir.

 

figura Hal cabo el sentido de la existencia, de acuerdo a analizar la siguiente capa hal hal fuente al final es la forma de lograr un marco y principios, análisis en profundidad de lo.

Código androide capa hal se encuentra principalmente en el hardware / / libhardware ir Vamos desde la parte superior hacia abajo.

En el hal capa, las capas hal de diversos tipos de hardware se describe en la forma de módulos de hardware hw_module_t se describe la estructura, y cada tipo de módulos de hardware tienen cada uno independiente del hardware, hal es un hw_device_t estructura describió el cuerpo.

Jni llamada a través de la aplicación de hardware superior, primero debe llegar a la estructura hw_module_t, es decir, el módulo de hardware, con este fin y luego que el hardware funcione. A continuación, echamos un vistazo a vistazo a estas dos estructuras definen lo que era.

Se definen en el interior /hardware/libhardware/include/hardware/hardware.h.

. Un hw_module_t representa un módulo de hardware, que contiene principalmente la definición de la información, parte de la estructura de hardware del módulo:

/**
 * Every hardware module must have a data structure named HAL_MODULE_INFO_SYM
 * and the fields of this data structure must begin with hw_module_t
 * followed by module specific information.
 */
typedef struct hw_module_t {
    /** tag must be initialized to HARDWARE_MODULE_TAG */
    uint32_t tag;  //tag,根据引文注释可以看到必须被初始化为HARDWARE_MODULE_TAG

    /** major version number for the module */
    uint16_t version_major;//主版本号

    /** minor version number of the module */
    uint16_t version_minor;//次版本号

    /** Identifier of module */
    const char *id;//模块id字符串

    /** Name of this module */
    const char *name;//模块名

    /** Author/owner/implementor of the module */
    const char *author;//作者

    /** Modules methods */
    struct hw_module_methods_t* methods;//硬件模块方法结构体

    /** module's dso */
    void* dso;//打开硬件模块的库时得到的句柄

    /** padding to 128 bytes, reserved for future use */
    uint32_t reserved[32-7];

} hw_module_t;

 etiqueta frontal, nombre que varios miembros de la propiedad no va a decir, leer el comentario que creo que todos sabemos, echar un vistazo a la siguiente hw_module_methods_t, estos métodos de puntero que señala a es una estructura asociada con este método de módulos de hardware, que no puede ver supongo que debe haber algún puntero de función, pero sólo hay un puntero de función. Podemos mirar a la definición:

1 typedef struct hw_module_methods_t {
2     /** Open a specific device */
3     int (*open)(const struct hw_module_t* module, const char* id,//打开硬件设备函数指针
4             struct hw_device_t** device);
5 
6 } hw_module_methods_t;

Podemos ver realmente sólo un puntero de función, abrirlo dispositivos de hardware del módulo de hardware función abiertos.

A continuación, un miembro de la DSO * vacío, que está abierto después de que el importe de los módulos de hardware del dispositivo identificador devuelto relacionados con ella, la función fuente en la vista trasera hw_get_module cuando se va a entender.

b. Aquí nos fijamos en la estructura hw_device_t, esta estructura se utiliza principalmente para describir la información de atributos de hardware del módulo o algo así. módulo de hardware puede tener una pluralidad de dispositivos de hardware.

Por ejemplo, el módulo de sensor, sensor_module, es un módulo de hardware, pero el teléfono en el sensor correspondiente en una variedad buena, como acc_sensor aceleración, sensores magnéticos M_sensor, etc., todos ellos pertenecen a sensor_module, pero han tenido su propia

estructura hw_device_t se describirá. definición hw_device_t:

 1 /**
 2  * Every device data structure must begin with hw_device_t
 3  * followed by module specific public methods and attributes.
 4  */
 5 typedef struct hw_device_t {
 6     /** tag must be initialized to HARDWARE_DEVICE_TAG */
 7     uint32_t tag;   //设备tag
 8 
 9     /** version number for hw_device_t */
10     uint32_t version;//版本
11 
12     /** reference to the module this device belongs to */
13     struct hw_module_t* module;//本设备归属的硬件模块
14 
15     /** padding reserved for future use */
16     uint32_t reserved[12];//保留
17 
18     /** Close this device */
19     int (*close)(struct hw_device_t* device);//关闭设备的函数指针
20 
21 } hw_device_t;

En donde el tercer módulo de hardware miembro está dirigida estructura de módulo de este aparato pertenece.

Por último, un puntero de función puntos para cerrar definitivamente fuera de las funciones del dispositivo.

 

Bueno, esto, las dos estructuras principales hal está terminado, la siguiente continuamos, combinará código fuente, capa de Hal en el final para ver cómo funciona este, miren en la parte superior como llegar módulos de hardware, dispositivos de hardware, y al final es la forma de resolver biblioteca compartida dinámicamente cargado.

Publicados 407 artículos originales · ganado elogios 150 · vistas 380 000 +

Supongo que te gusta

Origin blog.csdn.net/ds1130071727/article/details/104908771
Recomendado
Clasificación