如何导入Zephyr Project设备驱动程序

问题描述 投票:0回答:1

我正在尝试使用 Zephyr 项目中存在的设备驱动程序。

据我了解导入驱动程序的步骤如下:

  1. 验证 zephyr 是否有适合您设备的驱动程序。 (我通过访问 github 并在这个 git hub 页面发现驱动程序是为 gnss u_blox_m10 设备制作的,确保 Zephyr 拥有适用于我的设备的驱动程序:https://github.com/zephyrproject-rtos/zephyr/tree/ v3.7-分支/驱动程序/gnss
  2. 查看驱动程序的 Kconfig 文件,并包含 proj.conf 文件中所需的配置项。 Kconfig文件如下:
# Copyright (c) 2023 Trackunit Corporation
# SPDX-License-Identifier: Apache-2.0

menuconfig GNSS
    bool "GNSS drivers"
    select EXPERIMENTAL
    help
      Enable GNSS drivers and configuration.

if GNSS

config GNSS_SATELLITES
    bool "GNSS satellites support"
    help
      Enable GNSS sattelites callback.

config GNSS_DUMP
    bool "GNSS dump support"
    depends on LOG
    help
      Enable GNSS dump library

config GNSS_DUMP_TO_LOG
    bool "Dump GNSS events to log"
    select GNSS_DUMP
    help
      Enable GNSS dump to log.

if GNSS_DUMP_TO_LOG

config GNSS_DUMP_TO_LOG_BUF_SIZE
    int "GNSS log dump buffer size"
    default 128
    help
      Size of GNSS log dump buffer

endif

config GNSS_PARSE
    bool "GNSS parsing utilities"
    help
      Enable GNSS parsing utilities.

config GNSS_NMEA0183
    bool "NMEA0183 parsing utilities"
    select GNSS_PARSE
    help
      Enable NMEA0183 parsing utilities.

config GNSS_NMEA0183_MATCH
    bool "GNSS NMEA0183 match utilities"
    select GNSS_NMEA0183
    help
      Enable NMEA0183 match utilities.

config GNSS_INIT_PRIORITY
    int "GNSS driver initialization priority"
    default 80
    range 0 99
    help
      Driver initialization priority for GNSS drivers.

config GNSS_U_BLOX_PROTOCOL
    bool "GNSS U-BLOX protocol"
    select MODEM_UBX
    help
      Enable gnss u-blox protocol.

module = GNSS
module-str = gnss
source "subsys/logging/Kconfig.template.log_config"

rsource "Kconfig.emul"
rsource "Kconfig.generic"
rsource "Kconfig.quectel_lcx6g"
rsource "Kconfig.u_blox_m10"
rsource "Kconfig.luatos_air530z"

endif

我已经包含了 config 关键字之后的所有配置。

  1. 包含与您的设备直接相关的驱动程序的配置语句。就我而言,然后我转到下面名为 Kconfig.u_blox_m10 的文件,并在 config 关键字后包含所需的配置:
# Copyright 2024 NXP
# SPDX-License-Identifier: Apache-2.0

config GNSS_U_BLOX_M10
    bool "U-BLOX M10 GNSS Module"
    default y
    depends on GNSS
    depends on DT_HAS_U_BLOX_M10_ENABLED
    select MODEM_MODULES
    select MODEM_BACKEND_UART
    select MODEM_CHAT
    select MODEM_UBX
    select GNSS_PARSE
    select GNSS_NMEA0183
    select GNSS_NMEA0183_MATCH
    select GNSS_U_BLOX_PROTOCOL
    select UART_USE_RUNTIME_CONFIGURE
    help
      Enable U-BLOX M10 GNSS modem driver.

config GNSS_U_BLOX_M10_SATELLITES_COUNT
    int "Maximum satellite count"
    depends on GNSS_SATELLITES
    default 24
    help
      Maximum number of satellite that the driver that can be decoded from
      the GNSS device. This does not affect the number of devices that the
      device is actually tracking, just how many of those can be reported
      in the satellites callback.

在此之后,我100%不确定要做什么,但根据之前的经验,我应该能够导入驱动程序文件并使用这些功能。

为此,我在 main.c 文件中包含以下语句:

#include <zephyr/drivers/gnss/gnss_u_blox_m10.c>

然而,这是一个错误。因此,在对此事进行了更多研究后,我了解到该设备仅使用通用 gnss 接口来获取数据。

这是真的吗?在查看 GNSS 示例时,它仅使用以下代码进行数据收集:

static void gnss_data_cb(const struct device *dev, const struct gnss_data *data)
{
    if (data->info.fix_status != GNSS_FIX_STATUS_NO_FIX) {
        printf("Got a fix!\n");
    }
}
GNSS_DATA_CALLBACK_DEFINE(GNSS_MODEM, gnss_data_cb);

我应该使用如上所示的通用接口吗?

有没有一些参考资料可以清楚地说明这一点?

gps device-driver zephyr-rtos
1个回答
0
投票

您缺少启用 GNSS 硬件的一个关键部分,并且没有完全正确使用您帖子中的 API。一般来说,对于任何硬件设备,您应遵循的步骤是:

  1. 正如你所说,看看Zephyr是否支持特定的硬件(或者如果你的硬件有标准接口,看看Zephyr是否支持该接口)。就您而言,似乎确实有 U-blox M10 GNSS 模块的驱动程序;否则你可能需要写一个。
  2. 将设备添加到您的项目或板设备树中。设备树是 Zephyr 了解存在哪些硬件及其连接方式的方式。查看 GNSS 示例,他们在
    boards/
    文件夹中有两个板覆盖层,其中包含有关如何将 GNSS 模块声明为其所连接的关联 UART 控制器的子级的示例。
  3. 在设备树之后,您需要确认您的项目中设置了正确的 Kconfig 设置。在这种情况下,添加大部分设置是不必要的,您可能只需要
    CONFIG_GNSS
    以及您不喜欢默认设置的任何其他设置。对于实际驱动程序(即
    CONFIG_GNSS_U_BLOX_M10
    ),它通常设置为
    y
    ,因此只有当存在匹配节点并且设备树中的
    status
    时才是
    "okay"
    。注意对
    DT_HAS_U_BLOX_M10_ENABLED
    的依赖,这个Kconfig是由devicetree生成的,不能被项目覆盖。如果未启用,您将无法强制
    CONFIG_GNSS_U_BLOX_M10
    ,因为即使在项目中将值设置为
    y
    ,它仍然会尊重其依赖项。
  4. 最后,应包含驱动程序并可供应用程序使用。请参阅上面的示例,了解如何正确使用 API 来访问它。
© www.soinside.com 2019 - 2024. All rights reserved.