当前位置: 首页 > article >正文

从设备树到驱动:在RK3566上点亮一个LED的完整实战(GPIO0_B4为例)

从设备树到驱动在RK3566上点亮一个LED的完整实战GPIO0_B4为例当你第一次拿到一块Rockchip RK3566开发板时最令人兴奋的莫过于让硬件真正活起来。而点亮一个LED就像嵌入式世界的Hello World看似简单却蕴含着从硬件连接到软件控制的完整知识链。本文将带你以GPIO0_B4为例完整走通从设备树配置、驱动编写到内核编译烧录的全流程过程中你会遇到那些文档里没写的坑也会掌握真正实用的调试技巧。1. 硬件准备与环境搭建在开始编码之前我们需要确保硬件连接正确且开发环境就绪。ROC-RK3566-PC开发板上的GPIO0_B4对应物理引脚的位置可能因版本不同有所变化建议先查阅板子的原理图确认。通常这个引脚会位于扩展接口的某个位置用一个跳线帽连接LED时记得串联一个220Ω的限流电阻。开发环境需要准备一台运行Linux的主机推荐Ubuntu 20.04 LTS已安装的RK3566 SDK包含交叉编译工具链串口调试工具如minicom或picocom烧录工具RKDevTool或upgrade_tool提示在Ubuntu上安装依赖工具链时经常会遇到库版本冲突问题。建议使用SDK提供的docker环境避免污染主机系统。2. 深入理解RK3566的GPIO子系统Rockchip的GPIO控制器采用bank分组设计RK3566包含5组GPIO bankGPIO0-GPIO4每组又分为A、B、C、D四个子组。GPIO0_B4的命名规则解析如下字段含义值GPIO0Bank编号0B子组编号14引脚编号4计算全局GPIO编号的公式为pin bank * 32 group * 8 pin_num因此GPIO0_B4对应的全局编号为0 * 32 1 * 8 4 12在设备树中我们既可以使用数字编号gpio0 12也可以使用SDK提供的宏定义gpio0 RK_PB4。后者可读性更好但需要包含头文件#include dt-bindings/pinctrl/rockchip.h3. 设备树节点配置实战设备树是连接硬件描述与驱动程序的桥梁。我们在rk356x-firefly-demo.dtsi中添加一个gpio_demo节点gpio_demo: gpio_demo { status okay; compatible firefly,rk356x-gpio; led-gpio gpio0 RK_PB4 GPIO_ACTIVE_HIGH; };几个关键点需要注意compatible属性必须与驱动中的匹配表一致GPIO_ACTIVE_HIGH表示高电平点亮LED如果是低电平有效则使用GPIO_ACTIVE_LOW确保该GPIO没有被其他功能复用检查pinctrl配置编译设备树时经常会遇到语法错误导致编译失败。建议先用dtc工具检查dtc -I dts -O dtb -o test.dtb test.dts4. 编写LED驱动代码创建一个最简单的字符设备驱动主要实现以下功能#include linux/module.h #include linux/gpio.h static int led_gpio; static int gpio_demo_probe(struct platform_device *pdev) { struct device_node *np pdev-dev.of_node; enum of_gpio_flags flags; led_gpio of_get_named_gpio_flags(np, led-gpio, 0, flags); if (!gpio_is_valid(led_gpio)) { dev_err(pdev-dev, invalid GPIO pin\n); return -EINVAL; } if (gpio_request(led_gpio, led-gpio)) { dev_err(pdev-dev, GPIO request failed\n); return -EBUSY; } gpio_direction_output(led_gpio, 1); // 初始点亮LED return 0; } static const struct of_device_id gpio_demo_ids[] { { .compatible firefly,rk356x-gpio }, { } }; MODULE_DEVICE_TABLE(of, gpio_demo_ids); static struct platform_driver gpio_demo_driver { .driver { .name gpio-demo, .of_match_table gpio_demo_ids, }, .probe gpio_demo_probe, }; module_platform_driver(gpio_demo_driver);驱动开发中最常遇到的三个问题GPIO申请失败可能被其他驱动占用设备树匹配失败compatible字符串不匹配电平设置无效检查IO电压域配置5. 内核编译与固件烧录将驱动代码放入SDK的drivers/gpio目录后需要修改Kconfig和Makefile# drivers/gpio/Kconfig config GPIO_FIREFLY_DEMO tristate Firefly GPIO Demo default y# drivers/gpio/Makefile obj-$(CONFIG_GPIO_FIREFLY_DEMO) gpio-firefly-demo.o编译完整固件./build.sh kernel ./build.sh uboot ./mkfirmware.sh烧录时常见的坑开发板必须进入Loader模式按住Recovery键上电工具版本必须与芯片型号匹配烧录后务必执行重启设备操作6. 调试与问题排查当LED没有按预期点亮时可以按以下步骤排查确认GPIO是否成功申请cat /proc/interrupts | grep gpio检查GPIO当前状态# 导出GPIO echo 12 /sys/class/gpio/export # 查看方向 cat /sys/class/gpio/gpio12/direction # 手动设置电平 echo 1 /sys/class/gpio/gpio12/value测量物理引脚电压高电平应为3.3V左右低电平应接近0V如果电压异常检查IO电源域配置7. 进阶添加用户空间控制为了让应用层能控制LED我们可以实现一个简单的ioctl接口static long gpio_demo_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { switch (cmd) { case LED_ON: gpio_set_value(led_gpio, 1); break; case LED_OFF: gpio_set_value(led_gpio, 0); break; default: return -ENOTTY; } return 0; }测试时可以用一个简单的Python脚本import fcntl fd open(/dev/gpio_demo, r) fcntl.ioctl(fd, LED_ON) # 点亮LED这个项目虽然简单但涵盖了嵌入式Linux开发的完整流程。在实际产品开发中还需要考虑电源管理、异常处理等更多因素。

相关文章:

从设备树到驱动:在RK3566上点亮一个LED的完整实战(GPIO0_B4为例)

从设备树到驱动:在RK3566上点亮一个LED的完整实战(GPIO0_B4为例) 当你第一次拿到一块Rockchip RK3566开发板时,最令人兴奋的莫过于让硬件真正"活"起来。而点亮一个LED,就像嵌入式世界的"Hello World&q…...

告别电脑“飞机起飞“噪音:FanControl风扇控制终极指南

告别电脑"飞机起飞"噪音:FanControl风扇控制终极指南 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Tr…...

3步掌握OmenSuperHub:惠普游戏本性能控制终极指南

3步掌握OmenSuperHub:惠普游戏本性能控制终极指南 【免费下载链接】OmenSuperHub 使用 WMI BIOS控制性能和风扇速度,自动解除DB功耗限制。 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否厌倦了官方Omen Gaming Hub的臃肿界面…...

如何用DankDroneDownloader实现无人机固件完全掌控:Windows用户终极指南

如何用DankDroneDownloader实现无人机固件完全掌控:Windows用户终极指南 【免费下载链接】DankDroneDownloader A Custom Firmware Download Tool for DJI Drones Written in C# 项目地址: https://gitcode.com/gh_mirrors/da/DankDroneDownloader 你是否曾因…...

观察不同模型在Taotoken平台上的实际Token消耗速率

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 观察不同模型在Taotoken平台上的实际Token消耗速率 对于依赖大模型API进行开发的团队和个人而言,成本控制是一个持续关…...

通过Taotoken快速为OpenClaw智能体配置统一模型接入点

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 通过Taotoken快速为OpenClaw智能体配置统一模型接入点 对于使用OpenClaw框架构建AI智能体的开发者而言,管理多个智能体…...

终极指南:如何用BookGet快速下载全球50+图书馆古籍资源

终极指南:如何用BookGet快速下载全球50图书馆古籍资源 【免费下载链接】bookget bookget 数字古籍图书下载工具。 项目地址: https://gitcode.com/gh_mirrors/bo/bookget BookGet是一款强大的数字古籍图书下载工具,支持全球50多个知名数字图书馆的…...

Taotoken用量看板如何帮助团队精细化管控大模型成本

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken用量看板如何帮助团队精细化管控大模型成本 对于团队技术负责人或项目管理者而言,大模型API的调用成本正成为一…...

Smithbox终极指南:如何轻松定制你的魂类游戏世界

Smithbox终极指南:如何轻松定制你的魂类游戏世界 【免费下载链接】Smithbox Smithbox is a modding tool for Elden Ring, Armored Core VI, Sekiro, Dark Souls 3, Dark Souls 2, Dark Souls, Bloodborne and Demons Souls. 项目地址: https://gitcode.com/gh_mi…...

使用SEGGER Ozone调试nRF9160 Zephyr多线程应用:从HardFault到线程可视化

1. 项目概述:为什么选择Ozone调试nRF9160 Zephyr应用如果你正在用Nordic的nRF9160开发物联网设备,并且选用了Zephyr RTOS作为软件基础,那么调试环节很可能会成为你项目中的一个“痛点”。nRF9160本身集成了Cortex-M33内核、蜂窝调制解调器和丰…...

开源ChatGPT API代理部署指南:低成本调用AI模型实战

1. 项目概述:一个开源ChatGPT API代理的诞生最近在折腾AI应用开发的朋友,估计都绕不开一个核心问题:如何稳定、低成本地调用类似ChatGPT这样的强大语言模型。官方API虽然稳定,但价格和网络限制让很多个人开发者和初创团队望而却步…...

从CTF逆向到软件分析:用z3-solver自动化求解约束方程

1. 为什么我们需要z3-solver? 第一次参加CTF比赛时,我遇到一道逆向题,需要解一个包含30多个变量的方程组。当时我花了整整两天时间手工计算,最后还是没能解出来。赛后才知道,原来可以用z3-solver在几分钟内自动求解。这…...

Austroads:速度管理证据与指导回顾(英) 2026

这份报告是澳大利亚和新西兰道路运输委员会(Austroads)2025 年发布的《车速管理证据与指南回顾》,核心是为更新《道路安全指南:安全车速》(AGRS Part 3)梳理研究证据、 stakeholder 反馈并给出修订建议。下…...

STM32 I2C驱动AT24C02 EEPROM:手把手教你搞定页边界对齐与连续读写(附完整代码)

STM32 I2C驱动AT24C02 EEPROM:页边界对齐与连续读写实战指南 在嵌入式开发中,EEPROM因其非易失性存储特性成为参数保存的首选方案。而AT24C02作为经典的I2C接口EEPROM,其页写入机制却暗藏玄机——许多开发者第一次遭遇"写入数据丢失&quo…...

第一章-09-相应类型-HTML格式

1.响应类型设置方式2.装饰器中指定响应类3.响应 HTML 格式设置响应类为 HTMLResponse,当前接口即可返回 HTML 内容...

统信UOS系统管理员必看:一招搞定用户配置文件(.config/autostart)的模板化部署

统信UOS系统配置模板化实战:从屏保设置到全局用户环境部署 在大型企业或教育机构的桌面环境管理中,统信UOS作为国产操作系统的代表,其标准化部署能力直接影响运维效率。当我们在模板用户中精心配置了各项参数——从屏幕保护时间到电源管理策略…...

PXIe-9150嵌入式控制器:构建高集成度自动化测试系统的核心

1. 项目概述:从一块板卡到一套系统最近在整理实验室的测试设备,翻出来几台老旧的PXI机箱,想着怎么把它们重新利用起来。正好手头有个新项目,需要搭建一套多通道、高精度的数据采集与实时处理系统,传统的工控机加板卡的…...

Infinity Router:构建统一流量网关的架构设计与生产实践

1. 项目概述:一个面向未来的路由聚合器 最近在折腾一个很有意思的项目,叫“Infinity Router”。这名字听起来挺唬人的,但说白了,它就是一个 路由聚合器 。不过,它和我们平时在项目里用的那些路由库(比如 …...

硅与锗PN结实战对比:手把手测量导通电压VF与温度系数

硅与锗PN结实战对比:手把手测量导通电压VF与温度系数 在电子工程实践中,PN结的特性测量是理解半导体器件行为的基础。硅(Si)和锗(Ge)作为两种经典半导体材料,其PN结在导通电压(VF)和温度特性上表现出显著差异。本文将带领读者通过实际测量&a…...

ARM TRCCONFIGR寄存器解析与调试追踪实践

1. ARM TRCCONFIGR寄存器深度解析在嵌入式系统开发和处理器调试领域,ARM架构的调试追踪技术一直是工程师们分析程序执行流程、定位性能瓶颈的利器。作为ARMv8/v9架构中调试系统的核心组件,TRCCONFIGR寄存器扮演着追踪配置控制中心的角色。这个64位的系统…...

告别混乱的微生物组数据:手把手教你用R包MaAsLin2找出关键关联(附IBD研究实战代码)

微生物组数据关联分析实战:用MaAsLin2解锁IBD研究的关键发现 当面对成百上千个微生物物种丰度与数十项临床指标的复杂关系网时,许多研究者常陷入"数据沼泽"——明明手握高通量测序结果,却难以提炼出具有生物学意义的关联模式。这正…...

别再手动一个个改了!用PowerCLI脚本5分钟批量搞定VMware虚拟机网卡升级(ESXi 7.0实测)

5分钟极速升级:PowerCLI全自动批量替换VMware虚拟机网卡实战指南 每次ESXi版本升级后,总有一堆历史遗留问题等着处理——比如那些性能拉胯的E1000网卡。上周我负责的金融客户集群刚完成ESXi 7.0迁移,结果压测时发现300台虚拟机里竟有192台还在…...

从稀疏重构到精准定位:OMP-CS算法在DOA估计中的实战解析

1. 从稀疏信号到空间定位:OMP-CS算法的核心逻辑 第一次接触OMP-CS算法时,我盯着那堆数学公式发呆了半小时。直到把天线阵列想象成麦克风阵列,事情突然变得简单——这不就是通过多个麦克风判断声音方向的升级版吗?在雷达和通信系统…...

电商客服机器人如何通过 Taotoken 动态选择性价比最优的模型

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 电商客服机器人如何通过 Taotoken 动态选择性价比最优的模型 在电商客服场景中,用户咨询的问题复杂度差异巨大。从简单…...

口碑好的芯片老化座选哪家?

芯片测试和老化是确保产品质量的关键环节。选择一款性能稳定、可靠性高的芯片老化座对于企业来说至关重要。本文将对比分析几家知名品牌的芯片老化座,并推荐其中的佼佼者——鸿怡电子。1. 鸿怡电子:国产优质IC测试座领军者产品特点设计结构:鸿…...

国民技术N32G030K8L7芯片,用MDK从官方FTP下载到点亮LED的保姆级教程

国民技术N32G030K8L7芯片开发实战:从资料获取到LED点亮的全流程指南 拿到一块全新的开发板时,那种既兴奋又忐忑的心情想必每位工程师都经历过。N32G030K8L7作为国民技术推出的高性价比MCU,凭借其出色的性能和丰富的外设资源,正成为…...

观察Taotoken用量看板如何精细化管控API调用成本

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 观察Taotoken用量看板如何精细化管控API调用成本 对于依赖大模型API进行开发的项目团队而言,成本控制与预算管理是项目…...

2026年网络安全行业发展全景解析(技术从业者必看)_最新网络行业发展锐评

2026年网络安全行业发展全景解析(技术从业者必看) 摘要:随着数字化转型进入深水区,AI、云原生、物联网等技术的普及,网络安全已从“辅助保障”升级为“核心刚需”。 一、行业发展现状:政策与市场双轮驱动&…...

30ms低延迟投屏终极指南:用QtScrcpy实现专业级手游直播

30ms低延迟投屏终极指南:用QtScrcpy实现专业级手游直播 【免费下载链接】QtScrcpy Android实时投屏软件,此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限 项目地址: https://gitcode.com/barry-ran/QtScrcpy…...

泛微E-Office V10 OfficeServer 文件上传漏洞深度剖析与实战复现

1. 漏洞背景与影响范围 泛微E-Office作为国内广泛使用的协同办公系统,其V10版本中的OfficeServer.php组件存在高危文件上传漏洞。这个漏洞的本质在于服务端未对上传文件的类型、内容及路径进行严格校验,导致攻击者可以绕过常规防护机制,直接上…...