Zephyr 设备树中的特殊节点

这篇具有很好参考价值的文章主要介绍了Zephyr 设备树中的特殊节点。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

在zephyr中包含一部分特殊节点,他们的功能各不相同,节点如下:

  • aliases
  • chosen
  • zephyr,user

aliases

aliases 是对设备树中其他节点起的别名,别名用于为节点提供较短的名称,该名称可用于设备树的其他部分以引用节点。

/{
	aliases {
		led0 = &led0;
	};

	leds {
		compatible = "gpio-leds";
		led0: led_0 {
		gpios = <&gpio1 0 0>;
		label = "LED 0";
	};
}

chosen

在Zephyr中,chosen节点是一个特殊的设备树节点,用于指定一些系统级别的属性,这些属性可以在系统启动时被引导加载程序(bootloader)或内核使用,在这个特定的设备树文件中,chosen节点支持以下属性:

  • zephyr,bt-c2h-uart
    • Selects the UART used for host communication in the
  • zephyr,bt-mon-uart
    • Sets UART device used for the Bluetooth monitor logging
  • zephyr,bt-uart
    • Sets UART device used by Bluetooth
  • zephyr,canbus
    • Sets the default CAN controller
  • zephyr,ccm
    • Core-Coupled Memory node on some STM32 SoCs
  • zephyr,code-partition
    • Flash partition that the Zephyr image’s text section should be linked into
  • zephyr,console
    • Sets UART device used by console driver
  • zephyr,display
    • Sets the default display controller
  • zephyr,keyboard-scan
    • Sets the default keyboard scan controller
  • zephyr,dtcm
    • Data Tightly Coupled Memory node on some Arm SoCs
  • zephyr,entropy
    • A device which can be used as a system-wide entropy source
  • zephyr,flash
    • A node whose reg is sometimes used to set the defaults for CONFIG_FLASH_BASE_ADDRESS and CONFIG_FLASH_SIZE
  • zephyr,flash-controller
    • The node corresponding to the flash controller device for
      the zephyr,flash node
  • zephyr,gdbstub-uart
    • Sets UART device used by the gdbstub subsystem
  • zephyr,ieee802154
    • Used by the networking subsystem to set the IEEE 802.15.4 device
  • zephyr,ipc
    • Used by the OpenAMP subsystem to specify the inter-process communication (IPC) device
  • zephyr,ipc_shm
    • A node whose reg is used by the OpenAMP subsystem to determine the base address and size of the shared memory (SHM) usable for interprocess-communication (IPC)
  • zephyr,itcm
    • Instruction Tightly Coupled Memory node on some Arm SoCs
  • zephyr,ocm
    • On-chip memory node on Xilinx Zynq-7000 and ZynqMP SoCs
  • zephyr,osdp-uart
    • Sets UART device used by OSDP subsystem
  • zephyr,ot-uart
    • Used by the OpenThread to specify UART device for Spinel protocol
  • zephyr,pcie-controller
    • The node corresponding to the PCIe Controller
  • zephyr,ppp-uart
    • Sets UART device used by PPP
  • zephyr,settings-partition
    • Fixed partition node. If defined this selects the partition used by the NVS and FCB settings backends.
  • zephyr,shell-uart
    • Sets UART device used by serial shell backend
  • zephyr,sram
    • A node whose reg sets the base address and size of SRAM memory
      available to the Zephyr image, used during linking
  • zephyr,tracing-uart
    • Sets UART device used by tracing subsystem
  • zephyr,uart-mcumgr
    • UART used for device_mgmt
  • zephyr,uart-pipe
    • Sets UART device used by serial pipe driver
  • zephyr,usb-device
    • USB device node. If defined and has a vbus-gpios property, these will be used by the USB subsystem to enable/disable VBUS

zephyr,user

Zephyr 的 devicetree 脚本将/zephyr,user节点作为一种特殊情况进行处理:可以将任意的属性放入其中并检索它们的值,而无需编写绑定文件。当只需要几个简单的属性时,它是一个方便的容器.

简单属性

/ {
     zephyr,user {
             boolean;
             bytes = [81 82 83];
             number = <23>;
             numbers = <1>, <2>, <3>;
             string = "text";
             strings = "a", "b", "c";
     };
};

在上面的设备树中包含了一些基本的数据类型,如果需要获取他们的值,可以通过下面的方式:

 #define ZEPHYR_USER_NODE DT_PATH(zephyr_user)

DT_PROP(ZEPHYR_USER_NODE, boolean) // 1
DT_PROP(ZEPHYR_USER_NODE, bytes)   // {0x81, 0x82, 0x83}
DT_PROP(ZEPHYR_USER_NODE, number)  // 23
DT_PROP(ZEPHYR_USER_NODE, numbers) // {1, 2, 3}
DT_PROP(ZEPHYR_USER_NODE, string)  // "text"
DT_PROP(ZEPHYR_USER_NODE, strings) // {"a", "b", "c"}

设备节点

 / {
     zephyr,user {
             handle = <&gpio0>;
             handles = <&gpio0>, <&gpio1>;
     };
};

也可以将 phandle 和 phandles 转换为设备指针:


const struct device *my_device =
     DEVICE_DT_GET(DT_PROP(ZEPHYR_USER_NODE, handle));

#define PHANDLE_TO_DEVICE(node_id, prop, idx) \
     DEVICE_DT_GET(DT_PHANDLE_BY_IDX(node_id, prop, idx)),

const struct device *my_devices[] = {
     DT_FOREACH_PROP_ELEM(ZEPHYR_USER_NODE, handles, PHANDLE_TO_DEVICE)
};

GPIOs

 #include <zephyr/dt-bindings/gpio/gpio.h>

/ {
     zephyr,user {
             signal-gpios = <&gpio0 1 GPIO_ACTIVE_HIGH>;
     };
};

除此之外,如果你需要使用GPIO,也可以直接将其添加到该节点下。文章来源地址https://www.toymoban.com/news/detail-432549.html

#include <zephyr/drivers/gpio.h>

#define ZEPHYR_USER_NODE DT_PATH(zephyr_user)

const struct gpio_dt_spec signal =
        GPIO_DT_SPEC_GET(ZEPHYR_USER_NODE, signal_gpios);

/* Configure the pin */
gpio_pin_configure_dt(&signal, GPIO_OUTPUT_INACTIVE);

/* Set the pin to its active level */
gpio_pin_set_dt(&signal, 1);

到了这里,关于Zephyr 设备树中的特殊节点的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Zephyr mailbox

    mailbox 是Zephyr 中的一个内核对象,它提供了增强的消息队列功能,超越了消息队列对象的能力。邮箱允许线程同步或异步地发送和接收任何大小的消息。 信箱允许线程,但不允许 ISR,交换消息。发送消息的线程被称为发送线程,而接收消息的线程则被称为接收线程。每个消

    2023年04月20日
    浏览(29)
  • Zephyr入门教程 2 线程

    当你开始增加你的嵌入式应用的功能时,在单一的主循环和一些中断例程中做所有的事情变得越来越难。通常情况下,下一级的复杂性是某种状态机,你的电子设备的输出会根据这个(内部)状态而改变。如果你需要能够同时操作多个复杂的输入和输出呢?一个很好的例子是

    2024年02月13日
    浏览(33)
  • Zephyr驱动程序框架简介

    Zephyr 为驱动提供一套具体的 驱动框架模型 ,开发者可根据这一套驱动框架模型来实现自己的驱动,这一套模型非常类似 Linux内核的驱动实现 ,如果你对Linux内核驱动模型或有Linux内核驱动开发相关经验那么学习起来会非常轻松与简单。 驱动模型框架是使用了结构化的方式描

    2024年02月06日
    浏览(38)
  • Zephyr-7B-β :类GPT的高速推理LLM

    Zephyr 是一系列语言模型,经过训练可以充当有用的助手。 Zephyr-7B-β 是该系列中的第二个模型,是 Mistralai/Mistral-7B-v0.1 的微调版本,使用直接偏好优化 (DPO) 在公开可用的合成数据集上进行训练 。 我们发现,删除这些数据集的内置对齐可以提高 MT Bench 的性能,并使模型更加有

    2024年02月05日
    浏览(27)
  • 物联网操作系统Zephyr入门教程4调度(scheduling)

    调度器决定哪个线程被允许在任何时间点上执行;这个线程被称为当前线程。 在不同的时间点有机会改变当前线程的身份。这些点被称为重新安排点。一些潜在的重排点是: 从运行状态过渡到暂停或等待状态,例如通过k_sem_take()或k_sleep()。 过渡到准备状态,例如通过k_sem_

    2024年02月13日
    浏览(35)
  • RLHF的替代算法之DPO原理解析:从RLHF、Claude的RAILF到DPO、Zephyr

    本文的成就是一个点顺着一个点而来的,成文过程颇有意思 首先,如上文所说,我司正在做三大LLM项目,其中一个是论文审稿GPT第二版,在模型选型的时候,关注到了Mistral 7B( 其背后的公司Mistral AI号称欧洲的OpenAI,当然 你权且一听,切勿过于当真,详见《七月论文审稿GPT第

    2024年02月04日
    浏览(31)
  • C++力扣题目450--删除二叉搜索树中的节点

    给定一个二叉搜索树的根节点  root  和一个值  key ,删除二叉搜索树中的  key  对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。 一般来说,删除节点可分为两个步骤: 首先找到需要删除的节点; 如果找到了,删除它。 示例

    2024年01月17日
    浏览(28)
  • 代码随想录-67-450. 删除二叉搜索树中的节点

    我在刷卡哥的“代码随想录”,自己的总结笔记均会放在“算法刷题-代码随想录”该专栏下。 代码随想录此题链接 按照二叉搜索树特性递归。 递归三部曲: 参数与返回值: 参数:当前节点cur和需要删除节点的值val 返回值:返回TreeNode类型对象 终止条件:当前节点为null,

    2023年04月12日
    浏览(35)
  • 算法刷题Day 22 二叉搜索树的最近公共祖先+二叉搜索树中的插入操作+删除二叉搜索树中的节点

    根据二叉搜索树的性质,相比普通二叉树可以极大程度的简化代码,作为公共祖先其值一定在两个给定节点值之间,从树根往下遍历,第一次出现两个给定节点值之间的值,那个节点即为最近公共祖先(为什么是最近不是最远?根节点一般为最远,第一次出现的值处于两个给

    2024年02月17日
    浏览(30)
  • 力扣日记1.11-【二叉树篇】450. 删除二叉搜索树中的节点

    日期:2024.1.11 参考:代码随想录、力扣 题目描述 难度:中等 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。 一般来说,删除节点可分为两个步骤: 首

    2024年01月23日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包