1# 移植外设驱动子系统 2 3 4外设驱动子系统提供OpenHarmony专有的外部设备操作接口。本模块提供设备操作接口有:FLASH, GPIO, I2C, PWM, UART, WATCHDOG等。 5 6 7OpenHarmony提供了两种驱动适配方式:使用外设驱动子系统、使用HDF驱动框架。由于轻量级系统的资源有限,这里建议使用IOT子系统方式。 8 9 10## 移植指导 11 12厂商需要根据OpenHarmony提供的接口定义实现其功能,IOT子系统接口定义的头文件如下: 13 14 15``` 16base/iot_hardware/peripheral/ 17├── BUILD.gn 18└── interfaces 19 └── kits 20 ├── iot_errno.h 21 ├── iot_flash.h 22 ├── iot_gpio.h 23 ├── iot_i2c.h 24 ├── iot_pwm.h 25 ├── iot_uart.h 26 ├── iot_watchdog.h 27 ├── lowpower.h 28 └── reset.h 29``` 30 31其中“base/iot_hardware/peripheral/BUILD.gn”文件如下: 32 33 34``` 35import("//build/lite/config/subsystem/lite_subsystem.gni") 36import("//build/lite/ndk/ndk.gni") 37 38lite_subsystem("iothardware") { 39 subsystem_components = [ 40 "$ohos_vendor_adapter_dir/hals/iot_hardware/wifiiot_lite:hal_iothardware", 41 ] 42} 43if (ohos_kernel_type == "liteos_m") { 44 ndk_lib("iothardware_ndk") { 45 deps = [ 46 "$ohos_vendor_adapter_dir/hals/iot_hardware/wifiiot_lite:hal_iothardware", #依赖厂商的适配 47 ] 48 head_files = [ "//base/iot_hardware/peripheral/interfaces/kits" ] 49 } 50} 51``` 52 53从中可以看到厂商适配相关接口的存放目录应为“$ohos_vendor_adapter_dir/hals/iot_hardware/wifiiot_lite”,且该目录下BUILD.gn文件中的目标应为hal_iothardware。 54 55 56## 移植实例 57 581. 在“config.json”中添加iot_hardware子系统。 59 路径:“vendor/MyVendorCompany/MyProduct/config.json” 60 61 修改如下: 62 63 64 ``` 65 { 66 subsystem": "iot_hardware", 67 components": [ 68 { "component": "iot_controller", "features":[] } 69 ] 70 }, 71 ``` 72 732. 添加适配文件。 74 75 在“vendor/MyVendorCompany/MyProduct/config.json”文件中,通常将配置“vendor_adapter_dir”配置为 “//device/MyDeviceCompany/MyBoard/adapter”。 76 77 在“vendor_adapter_dir”目录下进行适配: 78 79 80 ``` 81 hals/iot_hardware/wifiiot_lite 82 ├── BUILD.gn 83 ├── iot_flash.c 84 ├── iot_gpio.c 85 ├── iot_i2c.c 86 ├── iot_lowpower.c 87 ├── iot_pwm.c 88 ├── iot_reset.c 89 ├── iot_uart.c 90 └── iot_watchdog.c 91 ``` 92 93 其中BUILD.gn内容如下: 94 95 96 ``` 97 static_library("hal_iothardware") { #目标名 98 sources = [ #厂商适配的源文件 99 "iot_watchdog.c", 100 "iot_reset.c", 101 "iot_flash.c", 102 "iot_i2c.c", 103 "iot_gpio.c", 104 "iot_pwm.c", 105 "iot_uart.c" 106 ] 107 include_dirs = [ ] 108 } 109 ``` 110 111 其中,“include_dirs”需要根据工程实际情况包含两个路径: 112 113 - iot子系统的头文件路径 114 115 - 适配iot子系统所使用到的SDK的头文件路径 116