Zephyr - 设备驱动和设备模型

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()

声明一个设备对象。
<

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值