Zephyr - 设备驱动和设备模型

Zephyr内核支持多种设备驱动,提供一致的设备模型进行初始化。驱动程序API包括设备对象的创建、获取等,且大部分驱动提供中断而非轮询的实现。设备驱动分为只读配置和运行时数据,驱动实例化可多次,如GPIO或UART。初始化等级分为5个级别,系统驱动则无配置或运行时数据结构。
摘要由CSDN通过智能技术生成

Zephyr - 设备驱动和设备模型

介绍

Zephyr 内核支持大量的设备驱动程序。应用程序板级配置的可用设备驱动集合随着所关联的硬件组件和设备驱动软件的变化而变化。

Zephyr 的设备模型为配置驱动程序提供了一致的设备模型。设备模型负责初始化配置到系统中的所有驱动。

每种类型的驱动程序(UAR,SPI,I2C)都有一个通用类型的 API。

在这个模型中,当驱动程序初始化时,驱动中会填充指向包含指向它的 API 函数的结构的指针。这些结构体被按照初始化等级放到 RAM 区。

标准驱动

所有的板级配置中都支持的设备驱动包括:

  • 中断控制器:用于内核的中断管理子系统。

  • 定时器:用于内核的系统时钟和硬件时钟子系统。

  • 串行通信:用于内核的系统控制台子系统。

  • 随机数生产器:提供随机数源。

    … important::

    这种设备驱动的确切实现并不会产生真正意义上的随机数,只是一个近似随机的数。

同步调用

Zephyr 对多种板子提供了一系列的设备驱动程序。除非硬件不支持,否则每个驱动都应当提供基于中断(而不是轮询)的实现。

通过上层的设备API来调用这些驱动, 例如 i2c.h spi.h, 他们通常被特意设计为同步操作, 这些调用会产生阻塞.

驱动程序 API

:file:device.h 中提供了如下关于设备驱动程序的 API。这些 API 只能用于设备驱动程序中,不能应用于应用程序中。

:c:func:DEVICE_INIT()

创建设备对象,并在启动的初始化阶段调用其初始化函数。

:c:func:DEVICE_AND_API_INIT()

创建设备对象,并在启动的初始化阶段调用其初始化函数。此外,它还用一个指针指向驱动程序的 API。

:c:func:DEVICE_NAME_GET()

获得一个全局设别对象的全名。

:c:func:DEVICE_GET()

通过名字获取一个执行设备对象的指针。

:c:func:DEVICE_DECLARE()

声明一个设备对象。
<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值