Fungsi penting kerangka pemacu HDI adalah untuk menyediakan antaramuka perkakasan yang stabil dan bersatu untuk sistem, supaya pastikan perkhidmatan sistem boleh berjalan pada perkakasan berbeza tanpa penyesuaian tambahan. HDI (Antaramuka Peranti Perkasa) dirancang untuk tujuan ini.
HDI adalah antaramuka abstrak tahap tinggi untuk fungsi perkakasan. Selepas takrifan antaramuka HDI, pelbagai periferi hanya akan diubah dibawah peraturan kompatibilitas HDI untuk memastikan kestabilan antaramuka. Pelakuan pemacu khusus tidak perlu menentukan antaramuka HDI berulang kali, tetapi hanya perlu dilaksanakan sesuai permintaan untuk mengakses fungsi sistem.
Pada sistem OpenHarmony dengan ukuran yang berbeza, HDI mempunyai dua mod penerbangan: mod IPC dan mod lewat.
Pada sistem OpenHarmony ringan, untuk mengurangkan muatan prestasi sistem, HDI dilaksanakan sebagai perpustakaan berkongsi mod pengguna, yang dimuatkan secara langsung oleh perkhidmatan sistem ke dalam proses untuk panggilan fungsi sendiri. pelaksanaan HDI meliputi proses interaksi kernel pengguna khusus. Apabila pemacu perlu diakses, guna Permintaan Perkhidmatan IO untuk panggil mesej ke pemacu kernel melalui panggilan sistem.
Pada sistem OpenHarmony, HDI digunakan sebagai proses perkhidmatan independen. Servis sistem hanya memuatkan klien HDI ke dalam prosesnya sendiri. Bisnes sebenarnya berjalan dalam proses independen. Klien berinteraksi dengan pelayan melalui IPC, memudahkan pemisahan arkitektur dan pengurusan kebenaran.
Pelakuan antaramuka HDI
Laluan melalui mod adalah mod pelaksanaan fungsi, yang boleh dilaksanakan tanpa sokongan komponen lain, tidak kira-kira panggilan atau pelaksanaan. Di sini kita akan fokus pada pelaksanaan mod IPC.
Lepaskan HDI
Mod IPC HDI berdasarkan model umum kerangka komunikasi sistem OpenHarmony. Namun, kerana pemandu sering melibatkan operasi aras rendah dan skenario migrasi berbilang-sistem, ia ditulis dalam bahasa C. Oleh itu, kerangka pemandu juga menyediakan komponen asas perkhidmatan HDI yang dilaksanakan dalam bahasa C, sementara pelaksanaan terutama menggunakan komponen kerangka komunikasi sistem.
Pencetakan perkhidmatan HDI dilaksanakan berdasarkan UHDF (kerangka pemacu HDF mod pengguna). Pelaksanaan penerbitan perkhidmatan umum adalah seperti berikut.
1. Masukan pemandu
int SampleDriverBind ï¼ struct HdfDeviceObject *deviceObject ï¼{ HDF_LOGE ï¼¢¢¢SampleDriverBind enter ï¼¢¢¢¢¢¢¢¢¢¢¢ï¼; struktur statik IDeviceIoService testService={. Dispatch=SampleServiceDispatch,//Service callback interface}; Peranti kembalikan HDF_ SUCCESS;} PemPemPemPemSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenMenSampel PemacuEntry = {.moduleVersion = 1ï¼´ .moduleName = â´sample_driver´ ï¼´ .Bind = SampleDriverBind ï¼´ .Init = SampleDriverInit ï¼´ .Release = SampleDriverRelease ï¼´};
HDF_ INIT ï¼_ g_ sampleDriverEntry ï¼;
Pertama, anda perlu tambah pemacu UHDF untuk menerbitkan perkhidmatan IoService. Perkhidmatan peranti IoService adalah entiti perkhidmatan HDI. Mod pelaksanaan konsisten dengan pemacu KHDF.
2. Laksanakan antaramuka balas perkhidmatan
int32_ t SampleServiceOnRemoteRequest ï¼ struct HdfDeviceIoClient *client O int cmdId O struct HdfSBuf *data O struct HdfSBuf *reply O{ switch OcmdIdO KembaliSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamSamServiServiServiServiServiServiServiServiServiServiServiServiServiServiServiServiServiServiServiServiServiTuTuTuTuTuTuTuTuTuTuTuTuTuTuTuTuTuTuTuTuTuTuTuTuTuTuTuTuTuTuTuTuTuTuTuTuTuTuTuTuTuTuTuTuTuTuTuTuTuTuTu¼¯struct HdfDeviceIoClient *client O int cmdId O struct HdfSBuf *data O struct HdfSBuf *reply D{ return SampleServiceOnRemoteRequest DclientD cmdId D data D replyD;}
Apabila panggilan HDI diterima, antaramuka balas perkhidmatan "SampleServiceDispatch" akan dipanggil.
Objek pemanggil klien tidak disokong dalam pemacu mod pengguna
CmdId memanggil perkataan perintah, yang digunakan untuk membezakan API yang dipanggil.The data call parameter serialization object is encapsulated in the C language of the parcel object in the IPC call scenario. Parameter input perlu dicapai dari objek data menggunakan antaramuka penyeraian sebelum digunakan. Balasan memanggil objek parameter, dan maklumat yang dikembalikan ke panggilan perlu ditulis ke dalam objek berantai. Jika klien pelaksanaan C++ boleh guna antaramuka berikut untuk tukar objek sbuf ke objek pakej, maka operasi boleh dilakukan:
Konfigurasi pemacu UHDF
platform BBhost { hostName = ⢢sample_host ⢢; priority = 50; sample_device BBdevice { device0 BBdeviceNode { policy = 2; priority = 100; moduleName = ⢢libsample_driver.z.so ⢢; serviceName = ⢢¢sample_driver_service ⢢; }}
Huraian parameter:
hos Nod hos adalah proses independen. Jika anda perlukan proses independen, tambah nod hos anda sendiri.Policy service publishing policy, service HDI is set to 2.ModuleName Driver Implementation Library Name.Service Name name, please keep it globally unique.Because HDI Service C and C++implementations use different IPC components and object oriented implementations, there are some differences in specific implementations. Untuk menyokong pelaksanaan HDI, kerangka UHDF menyediakan komponen asas berikut (hanya untuk pelaksanaan HDI bahasa C):
SBuf adalah objek alat yang menyokong KHDF dan UHDF untuk memandu penyeraian mesej IoService. Dalam skenario komunikasi IPC UHDF, SBuf boleh tukar dengan objek sirisasi kerangka IPC sistem MessageParcel objek (hanya C++disokong) untuk mencapai interworking IPC antara C dan C++.
API umum adalah sebagai berikut:
struct HdfSBuf; struct HdfSbufImpl; struktur HdfRemoteService;
Semua IPC di atas antaramuka mempunyai antaramuka tulis yang sepadan, yang tidak disenaraikan satu per satu. Sila rujuk ke dokumen rujukan HDI laman web rasmi.