Una función importante del marco del conductor HDI es proporcionar al sistema una interfaz de hardware estable y unificada para garantizar que los servicios del sistema puedan funcionar en diferentes hardware sin necesidad de adaptaciones adicionales. El HDI (interfaz de dispositivo de hardware) está diseñado para este propósito.
El HDI es una interfaz abstracta avanzada para funciones de hardware. Después de la definición de la interfaz hdi, varios periféricos solo se cambiarán bajo las reglas de compatibilidad HDI para garantizar la estabilidad de la interfaz. La implementación específica del controlador no requiere definir repetidamente la interfaz hdi, solo necesita implementarla bajo demanda para acceder a las funciones del sistema.
En sistemas openharmony de diferentes tamaños, el HDI tiene dos modos de despliegue: el modo IPC y el modo directo.
En el ligero sistema openharmony, para reducir la carga de rendimiento del sistema, el HDI se implementa como una biblioteca compartida en modo usuario, que es cargada directamente por los servicios del sistema en sus propios procesos para llamadas de función. La implementación de HDI encapsula un proceso de interacción específico del núcleo del usuario. Cuando se necesita acceder al controlador, se utiliza Io Service request para llamar al mensaje al controlador del núcleo a través de una llamada al sistema.
En el sistema openharmony, el HDI se despliega como un proceso de servicio independiente. Los servicios del sistema solo cargan clientes HDI en sus propios procesos. El negocio real funciona en un proceso independiente. El cliente interactúa con el servidor a través del ipc, lo que facilita el desacoplamiento de la arquitectura y la gestión de permisos.
Implementación de la interfaz HDI
El modo directo es un modo de implementación de funciones que se puede implementar sin el soporte de otros componentes, independientemente de la llamada o implementación. Aquí nos centraremos en la implementación del modelo ipc.
Lanzamiento de HDI
El modelo IPC HDI se basa en el modelo general del marco de comunicación del sistema openharmony. Sin embargo, debido a que el conductor a menudo implica operaciones de bajo nivel y escenarios de migración multisistema, está escrito en lenguaje c. Por lo tanto, el marco del conductor también proporciona los componentes básicos de los servicios HDI implementados en el lenguaje c, mientras que la implementación utiliza principalmente los componentes del marco de comunicación del sistema.
La publicación del servicio HDI se basa en la implementación de uhdf (marco de controlador hdf en modo usuario). La publicación del Servicio General se realiza de la siguiente manera.
1. entrada de la unidad
Int sampledriverbindï ¼ STRUCT hddfdeviceobeject * deviceobejeï1 / 4; (hdf logeï1 / 4àsampledriverbinding entereï1 / 4; static STRUCT ideeviceioservice Test Service = (.... Dispatch = sampleservice dispatch, / / Service Callback interface); Devideobject - ão Service = Servicio de prueba; Devolver hdf sucsess;; Int sampledriverinitï ¼ STRUCT hdf deviceobjeto * deviceobjeto ï (...) modulevision = 1 ï. modulename = àsample driver aï. Bind = sampdriverbindï. init = sampdriverinï.... Lanzamiento = sampdriverrealeaï);
Hdf initï, g sampledriverentryï;
En primer lugar, necesita agregar un controlador uhdf para publicar el servicio ioservice. El Servicio de dispositivos ioservice es una entidad de servicio hdi. El modo de ejecución es consistente con la unidad khdf.
2. realización de la interfaz de respuesta al servicio
Int32 T sampleserviceonremoterequest STRUCT hdfddeviceioclient * Client ï1 / 4 Int cmdiï "¿ Case Sample Service pingï? Return sampleservice stumpingï 1 / 4 clientï 1 / 4 data ï1 / 4 replyï" * replyï Return sampleserviceonremoterequest ï cliente ï cmdidï datos ï replyï1 / 4;;
Cuando se recibe una llamada hdi, se llama a la interfaz de respuesta del servicio "sampleservice dispatch".
No se admiten objetos de llamada del cliente en el controlador del modo usuario
La palabra de comando de llamada cmdid se utiliza para distinguir la API llamada. en el escenario de llamada ipc, el objeto de Serialización de parámetros de entrada de llamada de datos está encapsulado en el lenguaje C del objeto envuelto. Antes de usarlo, es necesario usar la interfaz serializada para obtener parámetros de entrada del objeto de datos. Responder llama al objeto parámetro y necesita escribir la información devuelta a la llamada en el objeto serializado. Si el cliente de implementación C + + puede usar las siguientes interfaces para convertir el objeto sbuf en un objeto de paquete, puede realizar esta operación:
3. configuración de la unidad uhdf
Platform ï host; priority = 50; Sample deviceï; device (...) device0ï ¿ device0ï ¿ devicenodo de dispositivo (...); Policy = 2; priority = 100; modulename = àlibsample driver.z.sà; servicename = à Sample driver....);
Descripción de los parámetros:
El nodo host es un proceso independiente. Si necesita un proceso independiente, agregue su propio nodo host. política de publicación de servicios, el servicio HDI se establece en 2. el nombre de la Biblioteca de implementación del controlador de nombre de módulo. nombre del servicio servicename, por favor, mantenga su singularidad global. hay algunas diferencias en la implementación específica porque las implementaciones del servicio HDI C y c + + utilizan diferentes componentes IPC e implementaciones orientadas a objetos. Para apoyar la implementación de hdi, el marco uhdf proporciona los siguientes componentes básicos (solo para la implementación de HDI en lenguaje c):
Sbuf es un objeto de herramienta que admite khdfs y uhdfs para impulsar la Serialización de mensajes de ioservice. En el escenario de comunicación uhdff ipc, sbuf puede transformarse con el objeto serializado del marco IPC del sistema, el objeto messageparcel (solo admite C + +), para lograr la interoperabilidad IPC entre C y c +.
Las API comunes son las siguientes:
Estructura hdfsruf; Estructura hdfsbufimpl; Estructura hdfremoteservice;
Todas las interfaces IPC anteriores tienen las interfaces de escritura correspondientes, que no se enumeran una por una. Consulte el documento de referencia del sitio web oficial de la iniciativa de desarrollo humano.