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 definir la interfaz hdi, varios periféricos solo se cambiarán de acuerdo con 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, ya sea llamado o implementado, se puede implementar sin el soporte de otros componentes. 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 del carril
Int sampledriverbindyï ¼ estructura hdf deviceobjeto * deviceobjeto ï1 / 4 ('hdf logeï1 / 4à sampledriverbinding entereï1 / 4);; static STRUCT ideeviceioservice Test Service = (.... Dispatch = sampleservice dispatch, / / Service Callback interface); Devideobject - ão Service = & Test service; Return hdf sucsess;; Int sampledriverinitï ¼ STRUCT hdf deviceproject * deviceproject ïs (...) hdf logeï; ¿ sampledriverinit - entereï 1 / 4; Return hdf success;, void sampledriverreleaï ¿ STRUCT hdf device Project * deviceproject * ï1 / 4 (...) hdf logeï 1 / 4 sampledriverinit - enterà ¼; return;, structhddriverentry g sampledriverentry (...) modulevision = 1 ï. modulename = àsample driver aï. Bind = sampledriver bindï. init = sampledriver initï. (...) replase = sampledriver release ï);
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. La implementación es consistente con la unidad khdf.
2. realización de la interfaz de respuesta al servicio
Int32 T sampleserviceonremoterequest STRUCT hdfddeviceioclient * clientï s Int cmdiï ¿¿ Case Sample Service pingï ¼ Return sampleservice stumpingï? Client ï ¼ data ï? Responsï? * replyï Return sampleserviceonremoterequest ï cliente ï cm didï, data ï, replyï;;
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
Cmdid llama a la palabra de comando 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 se encapsula en el lenguaje C del objeto de paquete. Antes de usarlo, es necesario usar la interfaz serializada para obtener parámetros de entrada del objeto de datos. Responder al objeto de parámetros de llamada y 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ï ¿ devicenode (...) Policy = 2; priority = 100; modulename = àlibsample driver.z.so à; 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 anfitrión. Política de publicación de servicios, el servicio HDI se establece en 2. el controlador modulename implementa el nombre de la biblioteca. Nombre del servicio servicename, por favor, mantenga su singularidad global. Debido a que las implementaciones de C y c + + del servicio HDI utilizan diferentes componentes IPC e implementaciones orientadas a objetos, hay algunas diferencias en implementaciones específicas. 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 tanto khdf como uhdf para impulsar la Serialización de mensajes de ioservice. En el escenario de comunicación uhdff ipc, sbuf puede convertir 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 del hdi.