《2、HDC+2022+HDF新特性讓設備驅動開發更高效容易-public.pdf》由會員分享,可在線閱讀,更多相關《2、HDC+2022+HDF新特性讓設備驅動開發更高效容易-public.pdf(19頁珍藏版)》請在三個皮匠報告上搜索。
1、HDF新特性讓設備驅動開發更高效容易標準化南向接口標準化南向接口(HDI)(HDI)開發旅程開發旅程更高效、更易開發更高效、更易開發的驅動框架技術的驅動框架技術HDFHDF新驅動新驅動模型支持模型支持標準化南向接口標準化南向接口(HDI)(HDI)開發旅程開發旅程UHDF驅動組件外設驅動統一南向標準接口 HDI基礎能力庫對象管理器配置解析器設備驅動管理中心配置管理設備驅動管理設備驅動管理動態加載熱插拔管理對象管理器內核顯示基礎框架設備服務管理網絡SensorInputAudio電源管理電源CameraUSB平臺驅動CAN.GPIOSPII2C消息機制安全管理故障管理硬件系統服務AudioSer
2、viceCameraServiceRenderServiceMultimodalInputKHDFBuffer管理設計目標設計目標提供與芯片平臺、內核解耦的驅動開發/運行時環境并為系統提供標準化硬件抽象接口,實現驅動軟件在不同設備中部署,簡化硬件接入開發步驟。彈性化框架彈性化框架通過對象管理器,通過多態加載不同容量設備實現方式,實現彈性伸縮部署組件化設備模型組件化設備模型提供設備功能模型抽象,可動態拆解,滿足不同容量設備部署歸一化平臺底座歸一化平臺底座提供規范化的內核、硬件IO適配接口,屏蔽不同內核,芯片平臺實現差異統一配置界面統一配置界面HCS驅動配置解決方案面向不同容量設備,提供統一的配置
3、界面HDFHDF驅動框架驅動框架HDI(Hardware Device Interface)即硬件設備接口,為系統提供統一、標準的硬件設備抽象,實現系統服務與硬件解耦。標準化硬件接口 基于接口描述的語言無關化接口定義 支持C/C+客戶端服務端 支持IPC模式與直通模式兼容 支持Mini、Small、Standard多種系統部署 自動生成IPC過程代碼,開發效率大幅提升HDIUHDF硬件系統服務AudioServiceCameraServiceRenderServiceMultimodalInput.Kernel硬件設備驅動管理中心外設驅動硬件設備驅動管理中心設備驅動管理設備服務管理權限管理Au
4、dio HostCamera HostDeviceDriverServiceDeviceDriverService.DeviceDriverService用戶態驅動什么是HDI接口兼容性一致性可靠性隱私與安全性易用性接口設計支持不同量級設備接入,接口變更嚴格遵守兼容性策略職責單一、功能內聚、無冗余依賴業務術語一致、接口參數一致、內存所有權一致遵守隱私安全規則,接口權限最小化參數生命周期明確、接口可重入HDI接口設計原則行為識別子系統分布式硬件子系統升級子系統內核子系統電源子系統安全子系統通信互聯子系統驅動子系統 9大子系統 27個模塊 1473個接口通過提供豐富的標準化設備接口,讓硬件適配更加
5、便捷,使能更多硬件設備快速接入。AudioCameraCodecLightMotionSensorVibratorDisplayInputUsbWlanMemorytrackerNfcDistributedCameraActivityRecognitionBluetoothLocationConnectedNfcTagBatteryPowerThermal電話子系統RilFaceAuthFingerprintAuthPinAuthUserAuthPartitionSlotNextAR/VR/.HDI接口支持現狀接口定義實現接口執行與調試編譯接口Foo Host kernelIPC CallIF
6、oo.idlpackage ohos.hdi.foo.v1_0;interface IFoo Bar(in intval);foo_driver.cppfoo_service.cppclass FooService:public IFoo public:FooService();virtual FooService();Bar(int val);聲明服務udhf_configdevice0:deviceNodepolicy=2;priority=100;preload=2;moduleName=libfoo_driver.z.so;serviceName=“foo_service;BUILD.
7、gnhdi(battery)module_name=“foo_interface_servicesources=IFoo.idllanguage=cppsubsystem_name=hdfpart_name=drivers_interface_batterylibfoo_proxy_1.0.z.solibfoo_stub_1.0.z.so編譯實現BUILD.gnohos_shared_library(libfoo_service_1.0)sources=foo_service.cpp public_deps=/drivers/interface/foo/v1_0:foo_idl_headers
8、 subsystem_name=hdfpart_name=drivers_peripheral_foolibfoo_driver.z.solibfoo_service_1.0.z.soHardwareServicelibfoo_proxy_1.0.z.solibfoo_service_1.0.z.solibfoo_driver.z.solibfoo_stub_1.0.z.soHDIHDI接口開發旅程接口開發旅程IFoo.idlTypes.idlIFooCallback.idl直接編寫IDL文件ifoo.h也可以通過idl-gen工具將頭文件轉換為IDL文件#include#include v1
9、_0/ifoo_callback.hclass IFoo public:virtual int Ping(std:string sendMsg,std:string&recvMsg)=0;virtual int GetData(struct FooInfo&info)=0;virtual int SetCallback(IFooCallback cbObj)=0;package ohos.hdi.foo.v1_0;import ohos.hdi.foo.v1_0.IFooCallback;import ohos.hdi.foo.v1_0.Types;interface IFoo Ping(in
10、 String sendMsg,out String recvMsg);GetData(out struct FooInfo info);SetCallback(in IFooCallback cb);package ohos.hdi.foo.v1_0;enum FooType FOO_TYPE_ONE=1,FOO_TYPE_TWO=2,;struct FooInfo unsigned int id;String name;enum FooType type;package ohos.hdi.foo.v1_0;callback interface IFooCallback PushData(i
11、n String message);HDIHDI接口開發旅程接口開發旅程接口定義import(“/drivers/hdf_core/adapter/uhdf2/hdi.gni”)#導入idl編譯模板hdi(“foo”)#目標名稱,生成so規則:libfoo_proxy/stub_1.0.z.somodule_name=foo sources=#參與編譯的idl文件IFoo.idl,#接口idlIFooCallback.idl,#用于回調的idlTypes.idl,#自定義類型idllanguage=cpp#控制idl生成c或c+代碼 可選擇c或cppsubsystem_name=“hdf”#子
12、系統名稱part_name=drivers_interface_foo#部件名BUILD.gnout/xxx/gen/drivers/interface/foo/v1_0 ifoo_callback.h ifoo_interfaces.h foo_driver.cpp foo_proxy.cpp foo_proxy.h foo_stub.cpp foo_stub.h foo_types.cpp foo_types.h.idl描述生成代碼目錄結構HDIHDI接口開發旅程接口開發旅程接口編譯drivers/peripheral/foo BUILD.gn bundle.jsonhdi_service
13、 BUILD.gn include foo_service.h src foo_driver.cpp foo_service.cpp接口實現目錄結構out/xxx/gen/drivers/interface/foo/v1_0 foo_driver.cpp ifoo_callback.h ifoo.h foo_types.h.idl描述生成代碼foo_driver.cpp參考實現實現接口foo_service.cppvendor/xxx/hdf_config/uhdf/device_info.hcsfoo_host:host hostName=foo_host;priority=50;foo_d
14、evice:device device0:deviceNode policy=2;priority=100;moduleName=libfoo_driver.z.so;serviceName=foo_service;HDIHDI接口開發旅程接口開發旅程接口實現與服務聲明Build.gnfoo_test.cpp通過Interface部件依賴proxy庫通過接口靜態方法獲取對接口實例,調用相關功能接口注意:為實現組件解耦和兼容性保證,接口調用者不可直接依賴服務實現庫#include void WorkFunc(void)/獲取該服務客戶端實例sptr foo=Hdi:Foo:V1_0:IFoo:G
15、et();if(foo=nullptr)/hdi service not exist,handle errorfoo-Bar();/do interface callohos_shared_library(xxx)sources=.external_deps=drivers_interface_battery:libbattery_proxy_1.1,part_name=HDIHDI接口開發旅程接口開發旅程更高效、更易開發更高效、更易開發的驅動框架技術的驅動框架技術極致性能root module=test;foo term1=1;term2=0 x2;term3=0b11;config.hcs
16、config_gen.hdriver.chc-geninclude 資源占用相比二進制解析降低50%解析在編譯階段完成,運行效率提升70%為Mini系統提供極小資源占用的HCS配置管理方案HCS配置源碼HCS配置生成宏HCS解析接口驅動源碼hc-gen編譯開發友好 提供了適用于小型設備驅動軟硬件解耦方案 功能完備,支持節點和屬性的查詢、遍歷屬、性存在性判斷等操作HCSHCS宏式解析宏式解析安裝安裝導入導入編輯編輯導出導出 GUI界面可視化編輯,顯示直觀,操作友好 錯誤實時提示,降低HCS配置方法學習成本 完整語法檢查,HCS文件0錯誤HCSHCS可視化編輯器可視化編輯器HDFHDF新驅動新驅動
17、模型支持模型支持ADM音頻驅動模型(AudioDriverModel)核心特征KernelAudio Driver ModelUHDFAudioServerAudioManagerAudioRenderAudioCaptureAudioControlAudioVolumeAudioSceneSupportPluginalsa-lib AdapterOther AdapterADM AdapterAudio HostAccessOEM/ISV Adapter(DMA、I2S、Codec、DSP)Drivers(DMA Driver、I2S Driver、Codec Driver、DSP Driv
18、er)HDIIManager(音頻管理)IRender(音頻輸出)ICapture(音頻輸入)DMA HostSAPMCodec Reg MgrDAI Reg MgrPlatform Reg MgrDSP Reg MgrStreamDispatchDevices DriverPlatform Driver靈活的輕量級架構 輕量級架構,資源占用少,同時支持小型和標準系統 靈活的可裁剪性,支持Liteos與Linux多內核內核適配簡單 提供HDI層通用實現,只需適配驅動層即可讓音頻硬件快速接入系統豐富的外設類型支持 支持audio codec、smartPA 支持speaker、mic、3.5mm
19、耳機、USB type-c耳機插件化動態音效框架 支持硬件音效與軟件音效插件化集成新音頻驅動模型新音頻驅動模型ADMADM簡介簡介USB DDK(Driver Develpot Kit)核心特征支持用戶態USB驅動開發 用戶態USB DDK,支持便捷地開發安全穩定的用戶態USB驅動 支持設備熱插拔等常見特性 支持ACM、ECM USB設備模型Function DriverHost DDKKernel ModuleUHDFOperate devicePNP EventOperate USB Device HardwareLoading/Unloading DriverKHDFUSB Interface PoolUSB Protocol LayerDevice IO ManagerOS AdapterRaw API LibraryPNP NotifyUSBFSUSB CoreUSB HCD支持跨平臺遷移 支持Liteos、Linux內核 支持小型、標準系統支持多種USB設備模型 支持host模式與device模式 支持ACM、ECM 設備模型支持USB PnP特性 支持設備熱插拔等常見特性用戶態用戶態USBUSB驅動開發框架驅動開發框架USBUSB DDKDDK簡介簡介謝謝