新闻详情

新闻详情

首页 / 资讯中心 / 详情

Zephyr BSP: 36-Zephyr集成公司HAL

发布时间:2026/9/29 4:19:32来源:尧图网络
Zephyr BSP: 36-Zephyr集成公司HAL
摘要:本文是 Zephyr BSP 系列第 36 篇,核心回答一个现实问题——公司已有 HAL 时,Zephyr Driver 该如何与之协作。文章首先给出最终架构:Zephyr Driver 调 Company HAL,Company HAL 直接操作 SoC,并解释为什么不要让 Driver 直接操作寄存器(避免代码重复、绕过 SoC workaround)。随后详细阐述 HAL 与 Driver 的职责边界:HAL 管"怎么操作硬件",Driver 管"怎么把硬件变成 Zephyr Device";HAL 应保持 RTOS independent,不解析 Devicetree、不依赖 Kconfig,而 Clock/Reset 的 ownership 要清晰划分。最后给出推荐的目录结构、常见错误清单,以及从 09 到 36 篇的完整学习链路总结。Company HAL 怎么放进 Zephyr?这一篇非常关键。到35 — BSP Validation,你已经建立了一个完整认识:Application ↓ Zephyr API ↓ Zephyr Driver ↓ Company SoC ↓ Hardware但真正做公司 SoC BSP 时,还会遇到一个现实问题:公司通常已经有一套 HAL。为什么还要重新写 Zephyr Driver?答案是:Zephyr Driver 不应该重新实现硬件寄存器逻辑。最理想的架构是:Zephyr Driver 调 Company HAL,Company HAL 再直接操作 SoC。1. 先看最终架构假设公司已经有:Company HAL ├── uart.c ├── gpio.c ├── spi.c ├── i2c.c ├── timer.c ├── clock.c └── irq.c那么 Zephyr BSP 推荐形成:┌─────────────────────────────┐ │ Application │ │ │ │printk()/UART API/GPIO │ └──────────────┬──────────────┘ │ ▼ ┌─────────────────────────────┐ │ Zephyr API │ │ │ │uart_poll_out()│ │gpio_pin_set()│ │spi_transceive()│ └──────────────┬──────────────┘ │ ▼ ┌─────────────────────────────┐ │ Zephyr Driver │ │ │ │ uart_company.c │ │ gpio_company.c │ │ spi_company.c │ └──────────────┬──────────────┘ │ ▼ ┌─────────────────────────────┐ │ Company HAL │ │ │ │company_uart_init()│ │company_uart_write()│ │company_gpio_set()│ │company_spi_transfer()│ └──────────────┬──────────────┘ │ ▼ ┌─────────────────────────────┐ │ Company SoC HW │ │ │ │ UART/GPIO/SPI/I2C │ │ Clock/IRQ/Timer │ └─────────────────────────────┘这就是今天这一篇最核心的结构。2. 为什么不要让 Zephyr Driver 直接操作寄存器?当然可以:staticintcompany_uart_poll_out(...){UART0-TXDATA=c;while(!(UART0-STATUSTX_READY));return0;}但是如果公司已经有 HAL:company_uart_write(UART0, c);那么重新写寄存器逻辑会产生两个问题。问题 1:代码重复原来:Company HAL ↓ UART register现在变成:Zephyr UART Driver ↓ UART register两套代码都维护 UART。问题 2:HAL 的 SoC workaround 被绕过真实 SoC 往往不是:UART=几个寄存器而可能存在:ClockenableReset release Pinmux FIFO configuration Errata workaround DMA Power management Silicon revision这些东西可能已经封装在 HAL:company_uart_init(){company_clock_enable(...);company_reset_deassert(...);company_pinmux_uart(...);/* * Silicon revision workaround */...UART-CTRL=...;}如果 Zephyr Driver 自己重新实现:UART-CTRL=...很容易绕过这些逻辑。3. 所以 Company HAL 的位置是什么?可以把它理解成:HAL 是 SoC 厂商提供的「硬件操作库」。而:Zephyr Driver 是把这些硬件能力翻译成 Zephyr API。两者不是竞争关系。4. 一个非常重要的边界例如 Company HAL:intcompany_uart_init(conststructcompany_uart_config*cfg);intcompany_uart_putc(uint32_tbase,uint8_tc);intcompany_uart_getc
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Matlab贝叶斯分类实战:朴素贝叶斯与判别式分析完整指南 2026/9/29 5:07:15

Matlab贝叶斯分类实战:朴素贝叶斯与判别式分析完整指南

简介:一套基于 Matlab 编写的贝叶斯分类完整实现,配备图形用户界面,适合机器学习初学者、算法研究人员以及需要快速完成特征分类任务的工程人员使用;内容涵盖朴素贝叶斯分类器核心代码,覆盖数据预处理、训练集与测试集…

阅读更多 →
Windows U盘格式化失败的底层原理与Diskpart修复指南 2026/9/29 5:07:09

Windows U盘格式化失败的底层原理与Diskpart修复指南

1. 这不是U盘坏了,是Windows在“假装努力”——从系统底层看格式化失败的真实逻辑你插上U盘,右键选“格式化”,进度条走到一半突然弹窗:“Windows无法完成格式化”。你换台电脑试,还是不行;用磁盘管理器删卷…

阅读更多 →
azkaban-solo-server tar.gz包部署指南:单机任务调度从零到可运行 2026/9/29 5:07:08

azkaban-solo-server tar.gz包部署指南:单机任务调度从零到可运行

简介:这是一份面向中小型团队或个人开发者的Azkaban单机版部署包,名为azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz,可用于大数据工作流的可视化创建、定时调度与依赖执行。包内为已编译的服务器程序与配套脚本,用户下载解压后即可…

阅读更多 →
Vue + WebRTC 低延迟音视频直播实战:信令、ICE 与弱网排查 2026/9/29 5:07:02

Vue + WebRTC 低延迟音视频直播实战:信令、ICE 与弱网排查

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Win11时间错误深层解析:W32Time服务、UTC配置与双系统时钟同步 2026/9/29 5:07:02

Win11时间错误深层解析:W32Time服务、UTC配置与双系统时钟同步

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
WorkBuddy定时任务实战:AI日报自动推送微信 2026/9/29 5:07:02

WorkBuddy定时任务实战:AI日报自动推送微信

1. 为什么我要给 WorkBuddy 设一个“十点半闹钟”每天早上到工位,第一件事不是泡茶,而是打开各种窗口翻昨天的消息、任务进度、待办事项,这个动作我重复了大半年,直到某天我意识到:这件事完全可以交给一个 AI 日报自动…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉