Linux内核 -- Linux驱动从设备树dts文件中读取字符串信息的方法
从Linux设备树读取字符串信息
在Linux内核中,从设备树(DTS)中读取字符串信息,通常使用内核提供的设备树解析API。这些API主要位于<linux/of.h>头文件中。
常用函数解析
1. of_get_property
- 获取设备树中的属性。
- 原型:
const void *of_get_property(const struct device_node *np, const char *name, int *lenp); - 参数:
np: 设备树节点指针。name: 属性名。lenp: 输出该属性的长度指针。
- 返回值:
- 成功时,返回指向属性值的指针;失败时返回NULL。
示例:
const char *string_val;
int len;string_val = of_get_property(np, "my-string-property", &len);
if (!string_val)pr_err("Failed to read property 'my-string-property'\n");
elsepr_info("Property value: %s\n", string_val);
2. of_property_read_string
- 直接读取设备树中的字符串属性。
- 原型:
int of_property_read_string(const struct device_node *np, const char *propname, const char **out_string); - 参数:
np: 设备树节点指针。propname: 属性名。out_string: 输出的字符串指针。
- 返回值:
- 成功返回0;失败返回负值(如
-EINVAL)。
- 成功返回0;失败返回负值(如
示例:
const char *string_val;if (of_property_read_string(np, "my-string-property", &string_val)) {pr_err("Failed to read string property\n");
} else {pr_info("String property value: %s\n", string_val);
}
3. of_property_read_string_array
- 用于读取多个字符串属性(以空格分隔的字符串数组)。
- 原型:
int of_property_read_string_array(const struct device_node *np, const char *propname, const char **out_strings, size_t sz); - 参数:
np: 设备树节点指针。propname: 属性名。out_strings: 字符串数组指针。sz: 最大字符串数量。
- 返回值:
- 成功返回实际读取的字符串数量;失败返回负值。
示例:
const char *strings[3];
int count;count = of_property_read_string_array(np, "my-strings-property", strings, 3);
if (count < 0) {pr_err("Failed to read string array\n");
} else {for (int i = 0; i < count; i++) {pr_info("String[%d]: %s\n", i, strings[i]);}
}
流程示例
假设DTS文件如下:
example-node {compatible = "example,device";my-string-property = "example-string";my-strings-property = "string1", "string2", "string3";
};
在驱动代码中:
static int example_probe(struct platform_device *pdev)
{struct device_node *np = pdev->dev.of_node;const char *string_val;if (!np) {dev_err(&pdev->dev, "No device tree node found\n");return -EINVAL;}// 读取单个字符串if (of_property_read_string(np, "my-string-property", &string_val)) {dev_err(&pdev->dev, "Failed to read 'my-string-property'\n");} else {dev_info(&pdev->dev, "Property value: %s\n", string_val);}// 读取字符串数组const char *strings[3];int count = of_property_read_string_array(np, "my-strings-property", strings, ARRAY_SIZE(strings));if (count < 0) {dev_err(&pdev->dev, "Failed to read 'my-strings-property'\n");} else {for (int i = 0; i < count; i++) {dev_info(&pdev->dev, "String[%d]: %s\n", i, strings[i]);}}return 0;
}
常见问题
- 设备树节点不存在:
- 确保设备树节点被正确绑定到驱动中,可以通过
compatible属性匹配。
- 确保设备树节点被正确绑定到驱动中,可以通过
- 属性不存在:
- 确保DTS中定义了对应的属性名称,并符合读取代码中的匹配。
通过上述方法,可以方便地从设备树中读取字符串信息,并用于设备驱动的配置和初始化。
相关文章:
Linux内核 -- Linux驱动从设备树dts文件中读取字符串信息的方法
从Linux设备树读取字符串信息 在Linux内核中,从设备树(DTS)中读取字符串信息,通常使用内核提供的设备树解析API。这些API主要位于<linux/of.h>头文件中。 常用函数解析 1. of_get_property 获取设备树中的属性。原型:con…...
图片懒加载+IntersectionObserver
通过IntersectionObserver实现图片懒加载 在JavaScript中,图片懒加载可以通过监听滚动事件和计算图片距离视口顶部的距离来实现 在HTML中,将src属性设置为一个透明的1x1像素图片作为占位符,并将实际的图片URL设置为data-src属性。 <img c…...
MySQL的获取、安装、配置及使用教程
一、获取MySQL 官网地址:https://www.mysql.com MySQL产品:企业版(Enterprise)和社区版(Community)社区版是通过GPL协议授权的开源软件,可以免费使用。企业版是需要收费的商业软件 MySQL版本历史:5.0、5.5、5.6、5.7和8.0(最新版本)两种打包版本:MSI(安装版)和ZI…...
Odoo在线python代码开发
《Odoo在线python代码开发从入门到精通》 从简入手,由浅入深,Odoo开发不求人 以实例促理解,举一反三 从Python到Odoo,低代码开发的正解之路 代码视频讲解与代码注释配合,帮助用户真正理解每一句代码的作用 《Odoo在…...
在.NET 6中使用Serilog收集日志
此示例的完整详细信息:https://download.csdn.net/download/hefeng_aspnet/89998498 Serilog 是一个日志库,它提供对文件、控制台和其他几个地方的记录。它易于配置,并且具有干净且易于使用的界面。 Serilog具有无与伦比的输出目的地选择&…...
【D3.js in Action 3 精译_043】5.1 饼图和环形图的创建(中):D3 饼图布局生成器的配置方法
当前内容所在位置: 第五章 饼图布局与堆叠布局 ✔️ 5.1 饼图和环形图的创建 ✔️ 5.1.1 准备阶段(上篇)5.1.2 饼图布局生成器(中篇) ✔️5.1.3 圆弧的绘制5.1.4 数据标签的添加 文章目录 5.1.2 饼图布局生成器 The …...
离线安装ollama到服务器
搜了很多教程不满意,弄了半天才弄好,这里记录下,方便以后的人用,那个在线下载太慢,怕不是得下载到明年。 一.从官网下在liunx版的tgz安装包 Releases ollama/ollama (github.com) 查看自己的服务器信息(参考 https:/…...
自动化点亮LED灯之程序编写
程序编写: #!/bin/shecho none > /sys/class/leds/led1/triggerecho none > /sys/class/leds/led2/triggerecho none > /sys/class/leds/led3/triggerecho 0 > /sys/class/leds/led1/brightnessecho 0 > /sys/class/leds/led2/brightnessecho 0 >…...
linux 系列服务器 高并发下ulimit优化文档
系统输入 ulimit -a 结果如下 解除或提高 Linux 系统的最大进程数 在高并发场景中,合理设置 Linux 系统的最大进程数对于提升服务器性能至关重要。以下是具体步骤: 临时修改 ulimit 设置 可以通过 ulimit 命令临时调整当前会话的最大进程数。 查看当前…...
人工智能入门数学基础:统计推断详解
人工智能入门数学基础:统计推断详解 目录 前言 1. 统计推断的基本概念 1.1 参数估计 1.2 假设检验 2. 统计推断的应用示例 2.1 参数估计示例:样本均值和置信区间 2.2 假设检验示例:t检验 3. 统计推断在人工智能中的应用场景 总结 前言…...
Spark区分应用程序 Application、作业Job、阶段Stage、任务Task
目录 一、Spark核心概念 1、应用程序Application 2、作业Job 3、阶段Stage 4、任务Task 二、示例 一、Spark核心概念 在Apache Spark中,有几个核心概念用于描述应用程序的执行流程和组件,包括应用程序 Application、作业Job、阶段Stage、任务Task…...
【Liunx篇】基础开发工具 - yum
文章目录 🌵一.Liunx下安装软件的方案🐾1.源代码安装🐾2.rpm包安装🐾3.包管理器进行安装 🌵二.软件包管理器-yum🌵三.yum的具体操作🐾1.查看软件包🐾2.安装软件包🐾3.卸载…...
docker学习笔记(五)--docker-compose
文章目录 常用命令docker-compose是什么yml配置指令详解versionservicesimagebuildcommandportsvolumesdepends_on docker-compose.yml文件编写 常用命令 命令说明docker-compose up启动所有docker-compose服务,通常加上-d选项,让其运行在后台docker-co…...
电子商务人工智能指南 4/6 - 内容理解
介绍 81% 的零售业高管表示, AI 至少在其组织中发挥了中等至完全的作用。然而,78% 的受访零售业高管表示,很难跟上不断发展的 AI 格局。 近年来,电子商务团队加快了适应新客户偏好和创造卓越数字购物体验的需求。采用 AI 不再是一…...
Hadoop3集群实战:从零开始的搭建之旅
目录 一、概念 1.1 Hadoop是什么 1.2 历史 1.3 三大发行版本(了解) 1.4 优势 1.5 组成💗 1.6 HDFS架构 1.7 YARN架构 1.8 MapReduce概述 1.9 HDFS\YARN\MapReduce关系 二、环境准备 2.1 准备模版虚拟机 2.2 安装必要软件 2.3 安…...
Kotlin设计模式之桥接模式
桥接模式用于将抽象部分与实现部分分离,使它们可以独立变化。Kotlin中可以通过接口和抽象类来实现桥接模式。以下是桥接模式的实现方法: 一. 基本桥接模式 在这种模式中,定义一个抽象部分和一个实现部分,通过组合将它们连接起来…...
详解组合模式
引言 有一种情况,当一组对象具有“整体—部分”关系时,如果我们处理其中一个对象或对象组合(区别对待),就可能会出现牵一发而动全身的情况,造成代码复杂。这个时候,组合模式就是一种可以用一致的…...
【系统架构设计师论文】云上自动化运维及其应用
随着云计算技术的迅猛发展,企业对云资源的需求日益增长。为了应对这一挑战,云上自动化运维(CloudOps)应运而生,它结合了DevOps理念和技术,通过自动化工具和流程来提高云环境的管理效率和服务质量。本文将探讨云上自动化运维的主要衡量指标,并详细介绍一个实际项目中如何…...
交换排序----快速排序
快速排序 快速排序是一种高效的排序算法,它采用分治法策略,将数组分为较小和较大的两个子数组,然后递归排序两个子数组。 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序元素序…...
ES 与 MySQL 在较大数据量下查询性能对比
在进行数据查询性能测试的过程中,我的同事幺加明对 ES(Elasticsearch)和 MySQL 进行了相对较大数据量的测试,并整理了相关结果。在得到其授权的情况下,我将此对比案例分享给大家,在此再次向幺加明表示感谢。…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...
