Fabbricazione PCB di precisione, PCB ad alta frequenza, PCB ad alta velocità, PCB standard, PCB multistrato e assemblaggio PCB.
La fabbrica di servizi personalizzati PCB e PCBA più affidabile.
Dati PCB

Dati PCB - Capacità specifiche dei metodi di implementazione dell'IPC di HDI

Dati PCB

Dati PCB - Capacità specifiche dei metodi di implementazione dell'IPC di HDI

Capacità specifiche dei metodi di implementazione dell'IPC di HDI

2022-11-25
View:308
Author:iPCB

Una funzione importante del HDI Il framework driver è quello di fornire un'interfaccia hardware stabile e unificata per il sistema, in modo da garantire che i servizi di sistema possano funzionare su hardware diverso senza ulteriori adattamenti. HDI (Hardware Device Interfaces) is designed for this purpose.


HDI è un'interfaccia astratta di alto livello per funzioni hardware. Dopo la definizione della HDI interfaccia, varie periferiche saranno cambiate solo sotto HDI regole di compatibilità per garantire la stabilità dell'interfaccia. L'implementazione specifica del driver non ha bisogno di definire il HDI interfaccia ripetutamente, ma deve essere implementato solo su richiesta per accedere alle funzioni del sistema.


Su sistemi OpenHarmony di diverse grandezze, HDI ha due modalità di distribuzione: IPC modalità e modalità passante.


Sul sistema leggero OpenHarmony, al fine di ridurre il carico di prestazioni del sistema, HDI è implementato come libreria condivisa in modalità utente, che viene caricato direttamente dal servizio di sistema nel proprio processo per la chiamata di funzione. HDI L'implementazione incapsula lo specifico processo di interazione del kernel utente. Quando è necessario accedere al driver, Utilizzare IO Service Request per chiamare il messaggio al driver del kernel tramite chiamata di sistema.

553e610efc891badcf13935d90635085.jpg

Sul sistema OpenHarmony, HDI è distribuito come processo di servizio indipendente. Il servizio di sistema carica solo il HDI client nel proprio processo. L'attività effettiva funziona in un processo indipendente. Il client interagisce con il server attraversoIPC, facilitare il disaccoppiamento dell'architettura e la gestione delle autorizzazioni.


HDI interface attuazione

The pass through modalità is a function implementation mode, che possono essere implementate senza il supporto di altri componenti, indipendentemente dall'invito o dall'attuazione. Qui ci concentreremo sull'attuazione di IPC mode.


Rilascio HDI

La modalitàIPC HDI si basa sul modello generale del framework di comunicazione del sistema OpenHarmony. Tuttavia, poiché il driver comporta spesso operazioni a basso livello e scenari di migrazione multi-sistema, è scritto in linguaggio C. Pertanto, il framework driver fornisce anche i componenti di base del servizio HDI implementato in linguaggio C, mentre l'implementazione utilizza principalmente i componenti del framework di comunicazione del sistema.


La pubblicazione dei servizi HDI è implementata sulla base di UHDF (user mode HDF driver framework). L'attuazione dell'editoria dei servizi generali è la seguente.

1. Ingresso di guida

int SampleDriverBind(struct HdfDeviceObject *deviceObject(HDF_LOGE＀œSampleDriverBind enter!â€'!; struttura statica IDeviceIoService testService={. Dispatch=SampleServiceDispatch,//Service callback interface}; deviceObject-ã‹service = &testService; restituisce HDF_ SUCCESS;} int SampleDriverInit(struct HdfDeviceObject *deviceObject(HDF_LOGE＀œSampleDriverInit enterâ€'＀; return HDF_SUCCESS;} void SampleDriverRelease(struct HdfDeviceObject *deviceObject<HDF_LOGE(“SampleDriverRelease enterâ€'＀; return;} struct HdfDriverEntry g_ eDrive Entry = { .moduleVersion = 1, .moduleName = “sample_driverâ€', .Bind = SampleDriverBind, .Init = SampleDriverInit, .Release = SampleDriverRelease,};


HDF_ INIT(g_sampleDrive Entry(

Per prima cosa, è necessario aggiungere un driver UHDF per pubblicare il servizio IoService. Il servizio dispositivo IoService è l'entità del servizio HDI. La modalità di implementazione è coerente con l'unità KHDF.

2. Implementare l'interfaccia di risposta del servizio

int32_ t SampleServiceOnRemoteRequest, struct HdfDeviceIoClient *client, int cmd, struct HdfSBuf *data, struct HdfSBuf *reply1 switch (cmdId, { case SAMPLE_SERVICE_PING: return SampleServiceStubPing, client, data, reply: … … … defaultš HDF_LOGE(“SampleServiceDispatch: not support cmd%dâ€', cmdId: return HDF_ERR_INVALID_PARAM; } intstatic_ SampleServiceDispatch: not support cmd%dâ€', cmdId, *reply, return SampleServiceOnRemoteRequest, client, cmdId, data, reply,


Quando viene ricevuta la chiamata HDI, verrà chiamata l'interfaccia di risposta del servizio "SampleServiceDispatch".


L'oggetto chiamante client non è supportato nel driver della modalità utente

CmdId chiama la parola comando, che viene utilizzata per distinguere l'API chiamata.L'oggetto di serializzazione del parametro di input della chiamata dati è incapsulato nel linguaggio C dell'oggetto pacchetto nello scenario di chiamataIPC. Il parametro di input deve essere ottenuto dall'oggetto dati utilizzando l'interfaccia di serializzazione prima dell'uso. La risposta richiama l'oggetto parametro e le informazioni restituite alla chiamata devono essere scritte nell'oggetto serializzato. Se il client di implementazione C++ può utilizzare la seguente interfaccia per convertire l'oggetto sbuf nell'oggetto pacchetto, allora l'operazione può essere eseguita:


3. Configurazione dell'unità UHDF

platform :: host { hostName = “sample_hostâ€"; priority = 50; sample_device :: deviceNode { policy = 2; priority = 100; moduleName = “libsample_driver.z.soâ€"; serviceName = “sample_driver_serviceâ€;}

Descrizione dei parametri:

host Un nodo host è un processo indipendente. Se è necessario un processo indipendente, aggiungere il proprio nodo host.Politica di pubblicazione dei servizi politici, servizio HDI è impostato su 2.ModuloName Libreria di implementazione driver Name.ServizioName Service name, mantenerlo unico a livello globale.Poiché le implementazioni HDI Service C e C++ utilizzano diversi componentiIPC e implementazioni orientate agli oggetti, ci sono alcune differenze nelle implementazioni specifiche. Al fine di supportare l'implementazione HDI, il framework UHDF fornisce i seguenti componenti di base (solo per l'implementazione HDI in linguaggio C):


SBuf is a tool object that supports both KHDF and UHDF to drive the serialization of IoService messages. Nell'UHDFIPC scenario di comunicazione, SBuf può convertire con il sistemaIPC framework serialization object MessageParcel object (only C++is supported) to achieveIPC interazione tra C e C++++.


Le API comuni sono le seguenti:

struct HdfSBuf; struct HdfSbufImpl; struct HdfRemoteService;

Tutti i IPC le interfacce sopra hanno interfacce di scrittura corrispondenti, che non sono elencati uno per uno. Si prega di fare riferimento al sito ufficiale HDI documento di riferimento.