设备树OF函数操作实验-读取设备节点的整型数组元素的属性

一.  简介

本文学习使用设备树操作 OF函数,读取设备节点的整型的属性值。

读取设备树文件 imx6ull-14x14-evk.dts 中一个设备节点的信息。这里读取 backlight设备节点的 brightness-levels属性值。

二. 读取设备节点的整型数组元素的属性

 1.  backlight设备节点信息

imx6ull-14x14-evk.dts文件中 backlight设备节点信息如下:

backlight {compatible = "pwm-backlight";pwms = <&pwm1 0 5000000>;brightness-levels = <0 4 8 16 32 64 128 255>;default-brightness-level = <6>;status = "okay";};

这里准备读取 imx6ull-14x14-evk.dts 设备树文件中 default-brightness-level属性的值。

主要使用如下的设备树 OF操作函数 :

struct device_node *of_find_node_by_path(const char *path);  //获取设备节点
int of_property_count_u32_elems(const struct device_node *np,
const char *propname);  //读取数组元素的个数
static inline int of_property_read_u32_array(const struct device_node *np, const char *propname, u32 *out_values, size_t sz);  //读取数组元素

这里还动态申请了空间,使用了 kmalloc()函数与释放内存函数 kfree()函数。函数原型如下:

void *kmalloc(size_t size, int flags);
void kfree(void *ptr);

kmallc()函数的参数 flags:常用的标志是GFP_KERNEL,表示内存分配是代表运行在内核空间的进程执行的。

2.  代码实现

下面开始读取数组中所有元素的值,代码实现如下:

#include <linux/module.h>
#include <linux/of.h>
#include <linux/slab.h>/*模块入口*/
static int __init dtsof_init(void)
{int ret = 0;struct device_node * dev_node = NULL;int element_numbers = 0;u32* element_ptr = NULL;int  i = 0;//1. 读取设备节点dev_node = of_find_node_by_path("/backlight");if(NULL == dev_node){ret = -EINVAL;goto find_dev_node_failed;}//2. 读取数组元素的个数element_numbers = of_property_count_u32_elems(dev_node, "brightness-levels");if(element_numbers < 0){ret = -EINVAL;goto get_element_number_failed;}	printk("element_number: %d\r\n", element_numbers);	//3. 动态申请内存element_ptr = kmalloc(element_numbers * sizeof(u32), GFP_KERNEL);if(!element_ptr){ret = -EINVAL;goto kmalloc_failed;}//4. 获取整型数组的元素值ret =  of_property_read_u32_array(dev_node, "brightness-levels", element_ptr, element_numbers);if(ret != 0){ret = -EINVAL;goto get_u32_array_failed;}	for(i = 0; i < element_numbers; i++){printk("brightness-levels[%d]: %d\r\n", i, element_ptr[i]);}	kfree(element_ptr);   kmalloc_failed:
get_u32_array_failed:
get_element_number_failed:
find_dev_node_failed:return ret;
}/*模块出口*/
static void __exit dtsof_exit(void)
{}/*模块入口与出口*/
module_init(dtsof_init); 
module_exit(dtsof_exit);/*模块 Licence*/
MODULE_LICENSE("GPL");
/*模块作者*/
MODULE_AUTHOR("LingXueWu");

三.  编译驱动与加载驱动

   1.  编译程序

ubuntu 终端进入 4_dtsof工程根目录下编译工程:

wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/4_dtsof$ make

编译后,生成驱动文件 dtsof.ko。

将 dtsof.ko拷贝到开发板系统下 /lib/modules/4.1.15/目录下:

wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/4_dtsof$ sudo cp dtsof.ko /home/wangtian/linux/nfs_File/rootfs/lib/modules/4.1.15/ -f

2.  加载驱动

这里不需要先运行 depmod命令。因为前面已经运行过一次。

开发板上电进入系统 /lib/modules/4.1.15/目录下,加载 dtsof.ko 驱动模块:

/ # cd /lib/modules/4.1.15/
/lib/modules/4.1.15 # modprobe dtsof.ko 
element_number: 8
brightness-levels[0]: 0
brightness-levels[1]: 4
brightness-levels[2]: 8
brightness-levels[3]: 16
brightness-levels[4]: 32
brightness-levels[5]: 64
brightness-levels[6]: 128
brightness-levels[7]: 255
/lib/modules/4.1.15 # 

 测试结束后,卸载驱动模块,输入如下命令:

/lib/modules/4.1.15 # rmmod dtsof.ko 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/620268.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JPA查询PostgreSQL行排序问题

文章目录 问题处理PostgreSQL排序相关JPA相关介绍 问题 我们项目使用Spring Boot构建&#xff0c;使用JHipster生成业务代码&#xff0c;包含基础的增删改查代码使用PostgreSQL作为业务数据库&#xff0c;使用自动生成的JPA构建数据更新语查询在查询某个实体类的列表时&#x…

【无标题】关于异常处理容易犯的错

一般项目是方法打上 try…catch…捕获所有异常记录日志&#xff0c;有些会使用 AOP 来进行类似的“统一异常处理”。 其实&#xff0c;这种处理异常的方式非常不可取。那么今天&#xff0c;我就和你分享下不可取的原因、与异常处理相关的坑和最佳实践。 捕获和处理异常容易犯…

【PostgreSQL】数据查询-VALUES

PostgreSQL数据查询-VALUES PostgreSQL中VALUES提供了一种生成“常量表”的方法&#xff0c;该表可在查询中使用&#xff0c;而无需在磁盘上实际创建和填充表。语法是 VALUES ( expression [, ...] ) [, ...]每个带括号的表达式列表都会在表中生成一行。所有列表必须具有相同…

Springboot开发的大学生宿舍共享厨房系统宿舍自习室宿舍洗衣房系统寝室系统技术文档论文功能部分

第三章 本系统采用Java语言开发&#xff0c;后端使用springboot框架开发&#xff0c;使用MySQL数据库存储数据&#xff0c;前端使用jsp页面&#xff0c;前端框架使用响应式框架bootatrap布局。本章将简单介绍所使用的技术及其理论依据。 3.1springboot介绍 SpringBoot 是一个…

C#监听Dictionary、List的写入操作

前言 在开发中&#xff0c;对于内置值类型和string我们可以通过封装属性在Set中监听写入操作&#xff0c;但是对于Dictionary、List等就不能监听到Add、Remove等写入操作。 所以一般采取两种方式监听它们的读写操作&#xff0c;一种是封装操作方法&#xff0c;间接进行监听&am…

【Py/Java/C++三种语言详解】LeetCode每日一题240113【贪心】LeetCode2182、构建限制重复的字符串

文章目录 题目链接题目描述解题思路代码PythonJavaC时空复杂度 华为OD算法/大厂面试高频题算法练习冲刺训练 题目链接 LeetCode2182、构建限制重复的字符串 题目描述 给你一个字符串 s 和一个整数 repeatLimit &#xff0c;用 s 中的字符构造一个新字符串 repeatLimitedStri…

(南京观海微电子)——色温介绍

色温是表示光线中包含颜色成分的一个计量单位。从理论上说&#xff0c;黑体温度指绝对黑体从绝对零度&#xff08;&#xff0d;273℃&#xff09;开始加温后所呈现的颜色。黑体在受热后&#xff0c;逐渐由黑变红&#xff0c;转黄&#xff0c;发白&#xff0c;最后发出蓝色光。当…

im6ull学习总结(三-五)freetype显示正行字

知识补充 笛卡尔坐标系 这里笛卡尔坐标系就是初高中学的直角坐标系的第一象限 lcd坐标系则不同 这两个坐标系如何转换 观察两个坐标系 点&#xff08;x,y&#xff09;的x坐标在两个坐标系中相同&#xff0c;纵坐标&#xff08;y&#xff09;存在着yV-yV V是整个屏幕的行数的像…

MYSQL的操作

1.库的操作 1.1创建数据库 语法&#xff1a; CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] ...] create_specification: [DEFAULT] CHARACTER SET charset_name [DEFAULT] COLLATE collation_name 说明&#xff1a; #…

python flask学生管理系统

预览 前端 jquery css html bootstrap: 4.x 后端 python: 3.6.x flask: 2.0.x 数据库 mysql: 5.7 学生管理模块 登录、退出查看个人信息、修改个人信息成绩查询查看已选课程选课、取消选课搜索课程课程列表分页功能 教师模块 登录、退出查看个人信息、修改个人信息录入…

leetcode 每日一题 2024年01月14日 删除排序链表中的重复元素

题目 83. 删除排序链表中的重复元素 给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返回 已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,1,2] 输出&#xff1a;[1,2]示例 2&#xff1a; 输入&#xff…

解决Unexpected record signature 0X9maven 资源过滤

解决Unexpected record signature: 0X9|maven 资源过滤 记录问题&#xff1a;我们有个需求是根据excel模版导出一个excel表。我们的项目是SpringBoot&#xff0c;所以理所当然的把这个模版文件放到了&#xff0c;resources文件夹中。但是在导出文件的时候却遇到了invalid code …

二极管限幅电路理论分析,工作原理+作用

一、限幅是什么意思&#xff1f; 限幅也就是&#xff0c;将电压限制在某个范围内&#xff0c;去除交流信号的一部分但不会对波形的剩余部分造成影响。通常来说&#xff0c;限幅电路主要是由二极管构成&#xff0c;波形的形状取决于电路的配置和设计。二、限幅电路工作原…

场效应管在电路中如何控制电流大小

场效应管的概念 场效应晶体管&#xff08;FieldEffectTransistor缩写&#xff08;FET&#xff09;&#xff09;简称场效应管。主要有两种类型&#xff08;juncTIonFET—JFET&#xff09;和金属-氧化物半导体场效应管&#xff08;metal-oxidesemiconductorFET&#xff0c;简称M…

9.5.1 函数模板特化

函数模板 有了泛化版本比较函数&#xff0c;我们可以比较两个整数&#xff0c;两个字符&#xff0c;两个指针 6~10行&#xff0c;是一个函数模板 13~16行&#xff0c;都可以得到正常结果 22行&#xff0c;得到的结果是&#xff0c;"A001" < "A000", …

【k8s】Kubernetes 声明式 API、命令式

1. 资源管理方式&#xff1a; 1>. 命令式对象管理∶直接使用命令去操作kubernetes资源 kubectl run nginx-pod --imagenginx:1.17.1 --port802>. 命令式对象配置∶通过命令配置和配置文件去操作kubernetes资源 kubectl create/patch -f nginx-pod.yaml3>. 声明式对…

【OpenGauss源码学习 —— 执行器(execMain)】

执行器&#xff08;execMain&#xff09; 概述文件内容作用执行的操作主要函数概述 部分函数详细分析ExecutorStart 函数standard_ExecutorStart 函数 ExecutorRun 函数standard_ExecutorRun 函数 ExecutorFinish 函数standard_ExecutorFinish 函数 ExecutorEnd 函数standard_E…

京东宣布启动鸿蒙原生应用开发,全力支持鸿蒙生态 | 百能云芯

华为常务董事、终端BG CEO、智能汽车解决方案BU董事长余承东于1月10日在微博上发布了一条令人振奋的消息&#xff1a;京东即将启动鸿蒙原生应用的开发。这一消息在科技圈掀起了不小的波澜&#xff0c;也为鸿蒙系统的发展注入了新的动力。 京东集团首席执行官兼执行董事许冉和余…

SpringBoot读取配置文件中的内容

文章目录 1. 读取配置文件application.yml中内容的方法1.1 Environment1.2 Value注解1.3 ConfigurationProperties 注解1.4 PropertySources 注解&#xff0c;获取自定义配置文件中的内容&#xff0c;yml文件需要自行实现适配器1.5 YamlPropertiesFactoryBean 加载 YAML 文件1.…

集成开发环境(IDE)介绍

集成开发环境&#xff08;IDE&#xff09;介绍 集成开发环境&#xff08;Integrated Development Environment&#xff0c;IDE&#xff09;是一种软件应用程序&#xff0c;用于开发和编写软件。常见的IDE包括Eclipse、Visual Studio、IntelliJ IDEA、Qt Creator等。 集成开发环…