精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

淺析Zephyr應用的代碼結構中的自定義驅動

智芯原動ICETech ? 來源:HalfCoder ? 作者:lgl88911 ? 2021-08-18 09:08 ? 次閱讀

本篇是《《Zephyr應用的代碼結構》》系列的終篇和下面兩篇文章一起可以構建出一個有app獨立管理的zephyr項目

Zephyr應用的代碼結構--West提貨單: zephyr和zephyr外部項目納入到應用代碼目錄管理

Zephyr應用的代碼結構--自定義開發板: 將自定義board納入到應用代碼目錄管理

除了上面兩個場景外,我們的硬件可能也有新的驅動需求,而該驅動不被Zephyr支持,如果不想將驅動放入Zephyr中,就需要將驅動納入到應用代碼目錄。

Zephyr驅動的添加可以分為3個級別:

有驅動API抽象,有設備樹綁定:只用添加驅動代碼

有驅動API抽象,無設備樹綁定:添加設備樹綁定文件和驅動代碼

無驅動API抽象,無設備樹綁定:添加抽象API頭文件,添加設備樹綁定文件,添加驅動代碼

驅動代碼目錄

驅動代碼目錄添加

在app/目錄下添加drivers目錄,如下

app

├── drivers

│ └── zephyr

│ ├── CMakeLists.txt

│ ├── Kconfig

│ └── sensor

│ ├── CMakeLists.txt

│ ├── Kconfig

│ └── rotary_encoder

├── CMakeLists.txt

├── Kconfig

├── rotary_encoder.c

└── rotary_encoder.h

在drivers/zephyr下的將要添加的驅動類型分類,例如我需要添加傳感器類型的驅動,就增加一個sensor文件夾

zephyr/CMakeLists.txt中指定該文件夾, 如果有其它驅動類型的文件夾也加入到該文件中

1

add_subdirectory(sensor)

zephyr/Kconfig包含各個驅動類型文件夾的Kconfig

1

rsource “sensor/Kconfig”

zephyr/sensor/CMakeLists.txt中指定要使用的驅動文件夾,例如這里要指定選擇編碼器

1

add_subdirectory_ifdef(CONFIG_ROTARY_ENCODER rotary_encoder)

zephyr/sensor/Kconfig包含該類型下各個驅動的Kconfig

1

rsource “rotary_encoder/Kconfig”

zephyr/sensor/rotary_encoder/CMakeLists.txt指定驅動的源代碼

zephyr_include_directories(。)

zephyr_library()

zephyr_library_sources(rotary_encoder.c)

zephyr/sensor/rotary_encoder/Kconfig則是該驅動代碼rotary_encoder.c要使用的配置選項

menuconfig ROTARY_ENCODER

bool “Rotary Encoder Sensor”

depends on GPIO

help

Enable driver for Rotary encoder sensors.

if ROTARY_ENCODER

config ROTARY_ENCODER_THREAD_PRIORITY

int “Thread priority”

default 10

help

Priority of thread used by the driver to handle interrupts.

config ROTARY_ENCODER_THREAD_STACK_SIZE

int “Thread stack size”

default 1024

help

Stack size of thread used by the driver to handle interrupts.

驅動代碼由rotary_encoder.c和rotary_encoder.h組成,不是本文說明重點,如何實現驅動可以參考Zephyr驅動實現方式

指定使用驅動目錄

Zephyr建議將外部目錄的驅動作為module添加,在app/CMakeLists.txt中添加下面內容,構建時就會編譯app/drivers

list(APPEND ZEPHYR_EXTRA_MODULES

${CMAKE_CURRENT_SOURCE_DIR}/drivers

設備樹綁定文件目錄

為了硬件上的靈活性,Zephyr引入了設備樹,通過設備樹綁定的方式將設備樹轉換為C宏來使用。Zephyr的設備樹綁定文件可能不包含我們要用的硬件設備,這就需要我們自己添加。同樣設備樹綁定文件也可以納入app的目錄進行管理,在app目錄下添加dts目錄,里面放置設備樹綁定文件

app

├── dts

│ └── bindings

│ └── sensor

│ └── rotary-encoder.yaml

rotary-encoder.yaml的編寫和使用方法不是本文重點,詳細可以參考Zephyr添加旋轉編碼器驅動

在app/CMakeLists.txt中添加下面內容,構建時編譯設備樹會查找到app/dts目錄

1

list(APPEND DTS_ROOT ${CMAKE_SOURCE_DIR})

設備驅動API頭文件目錄

對于個人項目開發來說,設備驅動API一般是項目內使用,API抽象的普遍覆蓋性并不一定要非常全,此外使用的人員也不需要大范圍討論,根據需求進行自定義就可以, 所形成的頭文件放到對應的驅動目錄即可,例如zephyr/sensor/rotary_encoder/rotary_encoder.h, 為了方便應用直接使用,可以在app/CMakeLists中添加

1

include_directories(drivers/zephyr/sensor/rotary_encoder/)

之后應用代碼中就可以直接”#include “rotary_encoder.h”

結束語

到此為止我們通過三篇文章可以將Zephyr代碼, Zephyr外部項目,自定義board, 驅動都納入到一個app的倉庫進行管理,通過一個獨立的app倉庫可以驅動編譯所必須的代碼,既方便管理,又十分精簡。

如果你使用的SOC都還未被Zephyr支持,也可以將soc的移植納入到應用目錄下進行管理,這部分目前我并沒有使用過無法做實例解釋可以參考https://docs.zephyrproject.org/latest/application/index.html#soc-definitions進行操作。

參考

https://github.com/zephyrproject-rtos/zephyr/tree/main/samples/application_development/out_of_tree_driver

https://docs.zephyrproject.org/latest/samples/application_development/out_of_tree_driver/README.html

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 驅動
    +關注

    關注

    12

    文章

    1825

    瀏覽量

    85178
  • API
    API
    +關注

    關注

    2

    文章

    1485

    瀏覽量

    61814
  • 代碼
    +關注

    關注

    30

    文章

    4747

    瀏覽量

    68348

原文標題:Zephyr應用的代碼結構--自定義驅動

文章出處:【微信號:智芯原動ICETech,微信公眾號:智芯原動ICETech】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    創建自定義的基于閃存的引導加載程序(BSL)

    電子發燒友網站提供《創建自定義的基于閃存的引導加載程序(BSL).pdf》資料免費下載
    發表于 09-19 10:50 ?0次下載
    創建<b class='flag-5'>自定義</b>的基于閃存的引導加載程序(BSL)

    如何創建TestStand自定義步驟

    在之前的課程簡單地介紹過TestStand自帶的一些步驟類型,如測試、消息彈窗、賦值、標簽等等,這些簡單的步驟從TestStand的插入選版中就可以添加到序列。那么在使用如果碰到需要實現更加靈活、復雜的功能,使用自帶的一些
    的頭像 發表于 09-11 14:46 ?876次閱讀
    如何創建TestStand<b class='flag-5'>自定義</b>步驟

    EtherCAT運動控制器PT/PVT實現用戶自定義軌跡規劃

    EtherCAT運動控制器PT/PVT實現用戶自定義軌跡規劃。
    的頭像 發表于 08-15 11:49 ?554次閱讀
    EtherCAT運動控制器PT/PVT實現用戶<b class='flag-5'>自定義</b>軌跡規劃

    NVIDIA NeMo加速并簡化自定義模型開發

    如果企業希望充分發揮出 AI 的力量,就需要根據其行業需求量身定制的自定義模型。
    的頭像 發表于 07-26 11:17 ?686次閱讀
    NVIDIA NeMo加速并簡化<b class='flag-5'>自定義</b>模型開發

    Chrome移動版支持自定義菜單欄功能

    在先前版本,用戶通過點擊瀏覽器右上角的三個點按鈕即可調出包含各類圖標與操作的菜單。而此次更新后,Chrome新增了“自定義菜單”選項,允許用戶自主控制該區域的展示內容。
    的頭像 發表于 05-27 15:00 ?742次閱讀

    stm32cubemx如何自定義lwip平臺?

    有人知道stm32cubemx,如何自定義lwip平臺。(默認只
    發表于 05-22 07:50

    HarmonyOS開發案例:【 自定義彈窗】

    基于ArkTS的聲明式開發范式實現了三種不同的彈窗,第一種直接使用公共組件,后兩種使用CustomDialogController實現自定義彈窗
    的頭像 發表于 05-16 18:18 ?1286次閱讀
    HarmonyOS開發案例:【 <b class='flag-5'>自定義</b>彈窗】

    TSMaster 自定義 LIN 調度表編程指導

    LIN(LocalInterconnectNetwork)協議調度表是用于LIN總線通信中的消息調度的一種機制,我們收到越來越多來自不同用戶希望能夠通過接口實現自定義LIN調度表的需求。所以在
    的頭像 發表于 05-11 08:21 ?608次閱讀
    TSMaster <b class='flag-5'>自定義</b> LIN 調度表編程指導

    HarmonyOS開發案例:【UIAbility和自定義組件生命周期】

    本文檔主要描述了應用運行過程UIAbility和自定義組件的生命周期。對于UIAbility,描述了Create、Foreground、Background、Destroy四種生命周期。對于頁面
    的頭像 發表于 05-10 15:31 ?1178次閱讀
    HarmonyOS開發案例:【UIAbility和<b class='flag-5'>自定義</b>組件生命周期】

    HarmonyOS實戰開發-深度探索與打造個性化自定義組件

    今天分享一下 什么是自定義組件?及其自定義組件的實戰。 做過前端或者android開發的都知道自定義組件,鴻蒙顯示在界面上的UI都稱為組件,小打一個按鈕,再到一個列表。 鴻蒙提供的組
    發表于 05-08 16:30

    HarmonyOS開發實例:【自定義Emitter】

    使用[Emitter]實現事件的訂閱和發布,使用[自定義彈窗]設置廣告信息。
    的頭像 發表于 04-14 11:37 ?973次閱讀
    HarmonyOS開發實例:【<b class='flag-5'>自定義</b>Emitter】

    鴻蒙ArkUI實例:【自定義組件】

    組件是 OpenHarmony 頁面最小顯示單元,一個頁面可由多個組件組合而成,也可只由一個組件組合而成,這些組件可以是ArkUI開發框架自帶系統組件,比如?`Text`?、?`Button`?等,也可以是自定義組件,本節筆者簡單介紹一下自定義組件的語法規范。
    的頭像 發表于 04-08 10:17 ?602次閱讀

    RK3568驅動指南|驅動基礎進階篇-進階5 自定義實現insmod命令實驗

    RK3568驅動指南|驅動基礎進階篇-進階5 自定義實現insmod命令實驗
    的頭像 發表于 02-20 14:10 ?637次閱讀
    RK3568<b class='flag-5'>驅動</b>指南|<b class='flag-5'>驅動</b>基礎進階篇-進階5 <b class='flag-5'>自定義</b>實現insmod命令實驗

    基于YOLOv8實現自定義姿態評估模型訓練

    Hello大家好,今天給大家分享一下如何基于YOLOv8姿態評估模型,實現在自定義數據集上,完成自定義姿態評估模型的訓練與推理。
    的頭像 發表于 12-25 11:29 ?2783次閱讀
    基于YOLOv8實現<b class='flag-5'>自定義</b>姿態評估模型訓練

    博途用戶自定義庫的使用

    博途官方提供了很多庫,比如:基本函數庫、通信庫、安全庫、驅動庫等等,用戶可以使用庫的函數/函數塊來完成具體的控制任務。除了官方的庫,我們也可以創建自己的庫(用戶自定義庫)。比如,把項目
    的頭像 發表于 12-25 10:08 ?875次閱讀
    博途用戶<b class='flag-5'>自定義</b>庫的使用