成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

樹莓派4B編寫HDF驅動示例

系統
前段時間已經在樹莓派4B成功加入了HDF驅動框架,帖子鏈接。得用HDF編寫個自己的驅動來測試下移植的效果。

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

前言

前段時間已經在樹莓派4B成功加入了HDF驅動框架,帖子鏈接。得用HDF編寫個自己的驅動來測試下移植的效果。不說了代碼最實在,看代碼吧。

樹莓派4B編寫HDF驅動示例-鴻蒙HarmonyOS技術社區

1.內核態驅動代碼

一個簡單的測試驅動,可以認為是串口驅動。因為在linux內核下,所以驅動放置在linux\platform\uart目錄下。

drivers\adapter\khdf\linux\platform\uart\my_hdf_uart.c

  1. #include "hdf_device_desc.h"    // HDF框架對驅動開發相關能力接口的頭文件 
  2. #include "hdf_log.h"            // HDF 框架提供的日志接口頭文件 
  3.  
  4. #define HDF_LOG_TAG "my_hdf_uart"   // 打印日志所包含的標簽,如果不定義則用默認定義的HDF_TAG標簽 
  5.  
  6. // 【3.1驅動消息機制管理】Dispatch是用來處理用戶態發下來的消息 
  7. int32_t MyUartDriverDispatch(struct HdfDeviceIoClient *client, int cmdId, struct HdfSBuf *data, struct HdfSBuf *reply) 
  8.     HDF_LOGE("%s::enter", __func__); 
  9.     HDF_LOGE("get cmdId::%d",cmdId); 
  10.     return HDF_SUCCESS; 
  11.  
  12. // 【1.驅動開發】驅動對外提供的服務能力,將相關的服務接口綁定到HDF框架 
  13. int32_t MyHdfUartDriverBind(struct HdfDeviceObject *deviceObject) 
  14.     HDF_LOGE("%s::enter", __func__); 
  15.  
  16.     // 【2.驅動服務管理】deviceObject為HDF框架給每一個驅動創建的設備對象,用來保存設備相關的私有數據和服務接口 
  17.     if (deviceObject == NULL) { 
  18.         HDF_LOGE("My Uart device object is null!"); 
  19.         return HDF_FAILURE; 
  20.     } 
  21.     static struct IDeviceIoService testService = { 
  22.         .Dispatch = MyUartDriverDispatch,   // 【3.2驅動消息機制管理】在服務實現過程中,實現服務基類成員IDeviceIoService中的Dispatch方法 
  23.         .Open = NULL,                       // 【2.驅動服務管理】驅動提供的其他服務。 
  24.         .Release = NULL
  25.         // .ServiceA = SampleDriverServiceA, 
  26.     }; 
  27.     deviceObject->service = &testService; 
  28.  
  29.     return HDF_SUCCESS; 
  30.  
  31. // 【1.驅動開發】驅動自身業務初始的接口 
  32. int32_t MyHdfUartDriverInit(struct HdfDeviceObject *deviceObject) 
  33.     HDF_LOGE("%s::enter", __func__);  
  34.     HDF_LOGD("Uart driver bind success");        
  35.     return 0; 
  36. static int32_t MyUartParseAndInit(struct HdfDeviceObject *device, const struct DeviceResourceNode *node) 
  37.     HDF_LOGE("%s::enter", __func__); 
  38.     return 0; 
  39.  
  40.  
  41. // 【1.驅動開發】驅動資源釋放的接口 
  42. void MyHdfUartDriverRelease(struct HdfDeviceObject *deviceObject) 
  43.     HDF_LOGE("%s::enter", __func__); 
  44.     return
  45.  
  46. // 【1.驅動開發】定義驅動入口的對象,必須為HdfDriverEntry(在hdf_device_desc.h中定義)類型的全局變量 
  47. struct HdfDriverEntry g_myhdfUartDriverEntry = { 
  48.     .moduleVersion = 1, 
  49.     .moduleName = "my_hdf_uart"
  50.     .Bind = MyHdfUartDriverBind, 
  51.     .Init = MyHdfUartDriverInit, 
  52.     .Release = MyHdfUartDriverRelease, 
  53. }; 
  54.  
  55. // 【1.驅動開發】調用HDF_INIT將驅動入口注冊到HDF框架中,在加載驅動時HDF框架會先調用Bind函數,再調用Init函數加載該驅動,當Init調用異常時,HDF框架會調用Release釋放驅動資源并退出。 
  56. HDF_INIT(g_myhdfUartDriverEntry); 

drivers\adapter\khdf\linux\platform\uart\Makefile:將驅動加入內核編譯

  1. - uart_adapter.o 
  2.  
  3. + uart_adapter.o \ 
  4. + my_hdf_uart.o 

2.添加驅動配置文件

vendor\raspberrypi\RPI4B\hdf_config\khdf\device_info\device_info.hcs

  1. # device_uart :: device 下添加 
  2.  
  3. device2 :: deviceNode { 
  4.     policy = 2; 
  5.     permission = 0644; 
  6.     priority = 40; 
  7.     moduleName = "my_hdf_uart"
  8.     serviceName = "my_hdf_uart_service"

3.用戶態HDF驅動交互驗證

applications\standard\app\myuarttest.c:用戶態主程序,主要代碼已經添加注釋了。

  1. #include <utils/hdf_log.h> 
  2. #include <core/hdf_io_service_if.h> 
  3. #include "hdf_sbuf.h" 
  4.  
  5. #define HDF_LOG_TAG "my_hdf_uart" 
  6. #define SAMPLE_SERVICE_NAME "my_hdf_uart_service" 
  7.  
  8. #define SAMPLE_WRITE_READ 1001   // 【驅動消息機制管理】讀寫操作碼,驅動定義消息處理函數中的cmd類型 
  9.  
  10. int main() 
  11.     HDF_LOGE("%s::enter", __func__); 
  12.     int ret = 0; 
  13.  
  14.     // 用戶態獲取驅動的服務,獲取該服務之后通過服務中的Dispatch方法向驅動發送消息。 
  15.     struct HdfIoService *serv = HdfIoServiceBind(SAMPLE_SERVICE_NAME);  // 【3驅動消息機制管理】用戶態(通過服務名)獲取服務接口 
  16.     if (serv == NULL) { 
  17.         HDF_LOGE("fail to get service %s", SAMPLE_SERVICE_NAME); 
  18.         return HDF_FAILURE; 
  19.     } 
  20.      
  21.     char *sendData = ""
  22.     struct HdfSBuf *data = HdfSBufObtainDefaultSize();      // 存放要發送的數據 
  23.     if (!HdfSbufWriteString(data, sendData)) {              // 發送的內容賦值 
  24.         HDF_LOGE("fail to write sbuf"); 
  25.         ret = HDF_FAILURE; 
  26.     } 
  27.  
  28.     struct HdfSBuf *reply = HdfSBufObtainDefaultSize();                                         // 存放返回的數據 
  29.     ret = serv->dispatcher->Dispatch(&serv->object, SAMPLE_WRITE_READ, data, reply);        // 發送消息到驅動 
  30.     if (ret != HDF_SUCCESS) { 
  31.         HDF_LOGE("fail to send service call"); 
  32.     } 
  33.  
  34.     HdfIoServiceRecycle(serv); 
  35.     return HDF_SUCCESS; 

applications\standard\app\BUILD.gn:編寫構建腳本

  1. import("//build/ohos.gni"
  2. import("//drivers/adapter/uhdf2/uhdf.gni"
  3.  
  4. ohos_executable("myuarttest") { 
  5.   sources = [ 
  6.     "myuarttest.c" 
  7.   ] 
  8.   include_dirs = [     
  9.     "//drivers/framework/include",                                  # <utils/hdf_log.h> <core/hdf_io_service_if.h> 
  10.     "//drivers/adapter/uhdf2/osal/include",                         # hdf_log_adapter.h 
  11.     "//base/hiviewdfx/hilog/interfaces/native/innerkits/include",   # <hilog/log.h> 
  12.     "//drivers/framework/ability/sbuf/include",                     # hdf_sbuf.h 
  13.     "//drivers/framework/include/utils",                            # hdf_base.h 
  14.   ] 
  15.   deps = [ 
  16.     "//drivers/adapter/uhdf2/osal:libhdf_utils",                    # hdf_log_adapter.h 
  17.     "//base/hiviewdfx/hilog/interfaces/native/innerkits:libhilog"   # <hilog/log.h> 
  18.   ] 
  19.   subsystem_name = "applications" 
  20.   part_name = "prebuilt_hap" 

 applications\standard\hap\ohos.build:最后將app加入編譯框架

  1. "//applications/standard/app:myuarttest"

4.測試

最后執行用戶態的myuarttest程序,就可以測試驅動是否添加成功了。

樹莓派4B編寫HDF驅動示例-鴻蒙HarmonyOS技術社區

用戶態只需要發送cmdId比如1001,然后內核驅動程序根據cmdID執行相應的操作即可。

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2021-11-23 15:35:05

鴻蒙HarmonyOS應用

2021-12-09 10:11:04

鴻蒙HarmonyOS應用

2021-12-31 10:00:30

鴻蒙HarmonyOS應用

2022-06-21 11:02:27

系統移植鴻蒙

2019-03-31 08:00:02

樹莓派更新樹莓派 Linux

2019-03-24 20:30:18

樹莓派Linux

2019-03-12 18:33:57

樹莓派Linux

2022-08-08 19:35:37

HDF驅動開發鴻蒙

2023-03-23 16:02:07

樹莓派4GPU調試

2021-07-25 10:30:04

樹莓派Linux

2022-05-16 11:30:39

openEuler樹莓派鴻蒙

2021-12-22 15:30:24

樹莓派Android開發者

2021-09-26 10:11:14

Ubuntu樹莓派

2021-03-29 21:24:40

樹莓派Linux

2022-02-11 09:24:05

樹莓派OpenWrt固定IP服務

2021-11-17 16:20:49

Linux 系統 樹莓派

2023-08-18 14:34:09

HDF驅動框架

2019-03-23 19:33:14

樹莓派Linux操作系統

2018-10-12 11:20:20

樹莓派NAS Linux

2021-10-06 10:46:02

樹莓派樹莓派 4Linux
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩一区二区三区在线 | 亚洲国产自产 | 国产精品久久久久久久久久东京 | 亚洲国产精品一区二区久久 | 欧美日一区 | 国产一区在线免费 | 精品久久久久一区二区国产 | 欧美二区在线 | 午夜视频在线免费观看 | 欧美精品在欧美一区二区 | 国产精品久久久亚洲 | 综合二区 | 成人激情视频免费在线观看 | 一区二区三区四区电影 | 亚洲欧美日韩国产综合 | av首页在线| 国产精品久久午夜夜伦鲁鲁 | 91人人澡人人爽 | 亚洲精品日韩在线观看 | 中文一区二区视频 | 久久综合一区 | 三级欧美 | 91在线观看| 欧美一区二区三区免费电影 | 国产成人在线播放 | 色综合久久久 | 日韩在线| 最新中文字幕在线 | 久草网址 | 日韩视频在线免费观看 | 精品一区二区三区中文字幕 | 亚洲精品视频免费看 | 欧美在线一区二区三区 | 成人在线观看免费视频 | 精品久久网 | 久久国产精品免费视频 | 91天堂| 欧美精品一区二区三区在线播放 | 亚洲成人日韩 | 精品国产乱码久久久久久牛牛 | 免费啪啪 |