嵌入式--驱动3
设备树设备树是硬件的说明书告诉内核系统里有什么硬件、怎么配置。它让同一个内核可以支持不同的板子修改硬件只需改设备树而不需要重新编译内核。设备树描述引脚复用、时钟、中断、内存等硬件信息驱动根据设备树自动配置硬件。核心思想是设备与驱动分离设备树文件后缀类型设备树节点puteleds自定义的控制设备节点名称#address-cells表示子节点或寄存器地址用1个字4个字节表示#size-cells表示地址范围长度用1个字4个字节表示compatible绑定设备与驱动程序的标识符status显示启用该设备若为disabled则内核会忽略此节点reg每对值表示一个寄存器起始地址和长度。169 puteled 170 { 171 #address-cells1;//寄存器地址需要1个32位4字节 172 #size-cells1;//每个寄存器大小用 1 个 32 位4 字节描述 173 compatible PT,pute-led; 174 statusokay; 175 reg 176 0x20E0068 0x04 /*MUX*/ 177 0x020E02F4 0x04 /*PAD*/ 178 0x0209C000 0x04 /*DAT*/ 179 0x0209C004 0x04 /*DIR*/ 180 ; 181 };相关函数接口int ret 0; u32 v 0; u32 reg_array[8] {0}; int i 0; const char *compa NULL; const char *led_status NULL; ret misc_register(misc_dev); if (ret) { pr_err(misc_register error,errno %d\n, ret); return ret; } pnode of_find_node_by_path(/puteled); if (!pnode) { ret PTR_ERR(pnode); pr_err(of_find_node_by_path error, errno:%d\n, ret); return ret; } // compatible status ret of_property_read_string(pnode, compatible, compa); if (ret) { pr_err(of_property_read_string error,errno %d\n, ret); return ret; } ret of_property_read_string(pnode, status, led_status); if (ret) { pr_err(of_property_read_string error,errno %d\n, ret); return ret; } pr_info(compa:%s status:%s\n, compa, led_status); ret of_property_read_u32_array(pnode, reg, reg_array, 8); if (ret) { pr_err(of_property_read_u32_array error,errno %d\n, ret); return ret; } for (i 0; i 4; i) { printk(index:%d reg add:0x%x\n, i, reg_array[i * 2]); // 0 2 4 6 } // pmux ioremap(reg_array[0], reg_array[1]); pmux of_iomap(pnode, 0); if (NULL pmux) { pr_err(ioremap ADDR_MUX error\n); return -ENOMEM; } // ppad ioremap(reg_array[2], reg_array[3]); ppad of_iomap(pnode, 1); if (NULL ppad) { pr_err(ioremap ADDR_PAD error\n); return -ENOMEM; } // pdir ioremap(reg_array[6], reg_array[7]); pdir of_iomap(pnode, 3); if (NULL pdir) { pr_err(ioremap LED_DIR error\n); return -ENOMEM; } // pdata ioremap(reg_array[4], reg_array[5]); pdata of_iomap(pnode, 2); if (NULL pdata) { pr_err(ioremap LED_DATA error\n); return -ENOMEM; }创建杂项设备通过设备树的节点查找到设备通过字符串查找这个节点下的属性读寄存器数组建立reg的映射设备树将硬件配置信息从驱动代码中抽离出来变成独立的数据文件.dts。驱动通过读取设备树中的匹配字符串compatible找到对应设备再根据资源描述reg、interrupts等动态配置硬件从而做到同一份驱动适配多款硬件。简单来讲通过compatible 匹配机制连接驱动和设备通过 reg/自定义属性 描述硬件资源让驱动代码变成纯逻辑处理硬件参数变成纯数据描述。三者驱动代码、设备树、内核各自独立演进互不绑架这就是设备树实现设备与驱动分离的本质维度传统方式硬编码设备树方式分离硬件变了改驱动代码重新编译内核只改 .dts重新编译 dtb驱动升级了要重新适配所有硬件驱动代码不变匹配所有硬件内核升级了驱动接口可能变要大面积改代码匹配机制保持兼容驱动基本不改同一驱动支持多板写多个条件编译#ifdef BOARD_A同一份 .ko 不同 .dtb产品变体如高配/低配编译多个内核版本同一内核 不同 dtb设备树的核心理念是描述式配置而非指令式配置。驱动代码只描述操作流程如读取地址→映射→写寄存器设备树只描述硬件参数如地址是多少、中断号是多少内核通过compatible机制将两者匹配。这样硬件升级时只需修改.dts驱动升级时只需修改.c内核升级时只需保证匹配接口稳定三者互不影响各自独立演进。这就是驱动做逻辑设备树做数据内核做匹配的三层分离架构。

相关新闻

PCB设计规则设置全攻略:从电气安全到可制造性

PCB设计规则设置全攻略:从电气安全到可制造性

1. 项目概述:为什么设计规则是PCB的“宪法” 干了十几年硬件设计,画过的板子从简单的单片机控制板到复杂的高速背板,踩过的坑不计其数。如果说有什么经验是血泪换来的,那第一条一定是: 在画第一根线之前,先…

2026/8/8 8:17:22 阅读更多 →
进迭时空 K1 开发板:Qt5 + YOLOv8 + SpacemiT NPU 实时目标检测全记录

进迭时空 K1 开发板:Qt5 + YOLOv8 + SpacemiT NPU 实时目标检测全记录

一、项目概述在进迭时空 SpacemiT K1 RISC-V 开发板上,实现了一个完整的 Qt5 GUI 摄像头实时采集 YOLOv8 目标检测 应用,并最终将推理后端从 OpenCV DNN CPU 推理切换到 ONNX Runtime SpacemiT NPU 硬件加速,推理性能获得显著提升。技术栈…

2026/8/8 8:16:22 阅读更多 →
曲靖网站建设dodoco深度解析:为什么本地企业选择专业团队是品牌突围的关键

曲靖网站建设dodoco深度解析:为什么本地企业选择专业团队是品牌突围的关键

在如今这个数字化浪潮席卷天下的时代,如果说做生意是一场没有硝烟的战争,那么网站就是咱们企业在互联网上那块最显眼、最核心的“地盘”。对于咱们曲靖的老百姓和企业主来说,以前总觉得“酒香不怕巷子深”,只要东西好,自然有人买。但现在不一样了,大家买菜都要先在网上比…

2026/8/8 8:16:22 阅读更多 →

最新新闻

客户一多就忙不过来?很多人用API做自动化了

客户一多就忙不过来?很多人用API做自动化了

把重复的客户操作交给程序处理,人只关注关键环节 能力介绍 当客户数量上来之后,很多操作都会变成重复劳动,比如:加好友、发消息、打标签、跟进记录等。如果全部依赖人工,不仅效率低,还容易遗漏。 通过API结…

2026/8/8 12:09:22 阅读更多 →
完全免费的开源下载利器,带宽拉满无负担——Free Download Manager (FDM)

完全免费的开源下载利器,带宽拉满无负担——Free Download Manager (FDM)

文章目录 完全免费的开源下载利器,带宽拉满无负担——Free Download Manager (FDM)核心定位 FDM vs. IDM:谁才是你的最佳选择?官方安全下载渠道极简安装与基础配置(核心步骤不能省)核心功能全流程实操高频刚需应用场景…

2026/8/8 12:09:22 阅读更多 →
Windows系统-应用问题全面剖析Ⅶ:德承工控机DA-1100在Windows操作系统下[时间同步]设置教程

Windows系统-应用问题全面剖析Ⅶ:德承工控机DA-1100在Windows操作系统下[时间同步]设置教程

在之前的文章中讲解到Windows操作系统的[卡顿/死机]设置教程,可参考往期文章:《Windows系统-应用问题全面剖析Ⅵ:德承工控机MD-3000在Windows操作系统下[卡顿/死机]的排查与解决方法》,而Windows操作系统还有许多应用上会面临的问…

2026/8/8 12:09:22 阅读更多 →
C语言指针与字符串拷贝核心原理及PTA实战

C语言指针与字符串拷贝核心原理及PTA实战

1. PTA指针与字符串拷贝核心原理 在C语言编程中,指针和字符串操作是基础但容易出错的重点内容。PTA(Programming Teaching Assistant)平台常见的字符串拷贝题目,主要考察对指针操作和内存管理的理解深度。我们先看一个典型错误示例…

2026/8/8 12:09:22 阅读更多 →
8个实战验证的商业分析工具提升决策效率

8个实战验证的商业分析工具提升决策效率

1. 项目概述作为一名在商业分析领域深耕多年的从业者,我经常被MBA学员问到同一个问题:"如何在实际工作中快速提升分析效率?"经过多年实践,我发现工具选型是影响分析质量和工作效率的关键因素。本文将分享8个经过实战检验…

2026/8/8 12:09:21 阅读更多 →
逆向工程入门:从CTF基础题babyre学逆向分析

逆向工程入门:从CTF基础题babyre学逆向分析

1. 逆向工程入门:从攻防世界babyre开始 第一次接触逆向工程的新手往往会被各种专业术语和复杂工具吓退,而攻防世界(CTF比赛平台)的babyre题目正是为逆向新手设计的绝佳入门练习。这道题目的名称"babyre"已经暗示了它的定…

2026/8/8 12:08:21 阅读更多 →

日新闻

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

当下AI应用飞速普及,无数企业下场搭建智能体系统,可落地阶段难题接踵而至:上下文无限堆积频繁爆栈、AI工具调用准确率低下、Token成本居高不下、企业数据权限混乱暗藏安全隐患……很多团队卡在架构搭建环节,空有前沿技术概念&…

2026/8/8 0:00:07 阅读更多 →
PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码 【免费下载链接】php-qrcode A PHP QR Code generator and reader with a user-friendly API. 项目地址: https://gitcode.com/gh_mirrors/ph/php-qrcode 在当今数字时代,二维码已…

2026/8/8 0:00:08 阅读更多 →
UniApp微信小程序隐私保护组件开发:从原理到实战

UniApp微信小程序隐私保护组件开发:从原理到实战

1. 项目缘起:为什么我们需要一个隐私保护通用组件?最近在维护一个基于uniapp开发的微信小程序矩阵时,我遇到了一个非常棘手的问题。随着平台对用户隐私保护的要求越来越严格,几乎每一个新版本发布,或者在某些特定机型&…

2026/8/8 0:00:08 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/8 8:58:26 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/7 23:24:08 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/7 17:02:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/7 23:54:54 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/7 17:02:36 阅读更多 →