Linux驱动开发中与设备树相关的6种debug方法

整理出了6种驱动开发时与设备注册、设备树相关的调试方法,彼此间没有优先级之分,每种方法不一定是最优解,但可以作为一种debug查找问题的手段,快速定位问题原因。例如在芯片验证时,不同时钟频率下系统启动情况摸底时,U-Boot fdt命令可以方便快捷的帮助我们完成这个实验。

#1. dtdiff工具

这个文件需要在宿主机安装,在对比二进制的dtb文件时比较方便。文本格式的dts文件对比并不需要这个工具。

dca9e229cf661f6da312215520bec6f2.png

对比以下两个dtb文件的结果如下:

2964ec7b5d9c5f18f45740678887e5e5.png

#2. kernel device-tree base

系统启动后进入到/sys/firmware/devicetree/base目录可以看到当前已注册设备的设备树信息,通过相关命令可以查看当前设备的结点信息、状态等。

a8ec47377e040f9787cda7ce71ba7065.png

上面各个子目录里显示的信息和设备树dts文件中定义的条目数是一样的。

38c34e6a69de7a65e721a21164711013.png

#3. U-Boot fdt command

驱动代码在debug期间,若希望更改外设模块的设备树属性时,在不改变存储设备中dtb文件的前提下,进入到U-Boot的命令行界面,通过U-Boot的fdt命令来实现。例如修改外设时钟源、修改外设时钟名、status属性等。为了使U-Boot支持fdt命令需要打开CONFIG_OF_LIBFDT。

35e1dbf3206fbd62d3a27548e8b4dcdc.png

U-Boot提供的fdt命令是针对内存中的FDT而言的,因此,需要将存储设备中的dtb文件加载到内存RAM中。然后再告知FDT设备树在内存中的地址。

将dtb文件从mmc中加载到DDR的0x61000000地址处,并告知U-Boot FDT文件在内存中所在的位置为0x61000000。

da284f87a900860f62c925242f709682.png

通过fdt print查看测试驱动driver-test的设备树信息,当查看某一个设备树结点的信息时,需要使用绝对路径进行设备树结点的索引。

41f50eaec09f1309512feb3bd5ba002f.png

driver-test的设备树定义在源文件中dts如下图,dtb内的信息是完全展开的,实际上和dts中信息完全一致。clocks = <0x00000005>是dtc编译时对结点引用label重新插入的phandle值。

aaf1e3be2f69f25c2bb3f575bf0dd676.png


##3. 修改设备时钟

设备树文件中driver_test的时钟源为oscclk2,时钟名为apb_clk。现在将driver_test时钟源设置为oscclk1,时钟名改为ahb_clk。oscclk1在dtc编译后的label编号时0x00000012。

4ad9e392f2cae80958922405852fa68a.png

修改后如下图:

73adae71eff093ee48ed1c587cb49bec.png

a092d1a7bd1c991df6d16f2a3089622e.png

修改完之后,手动加载kernel镜像来启动系统。系统启动后查看设备树信息是否修改成功。可以看见clock-names已经由原来的apb_clk更改为ahb_clk。

68d4e804fc72406c5118d5ef694672a6.png


##3. 修改设备status状态

设备树里status可以决定设备使能状态,status状态支持以下几种格式,若设置了status为disable,那么设备是不可用的。若不设置status,默认设备可用。

42e90a8fdfe5d71ad67b7cd34dba5564.png

在platform_device创建时会检查设备的可用性,若设备不可用,那么是不会创建platform_device的。of_device_is_available用于检查status属性。

baf4c154a622574553fcc9e6c6b571aa.png

driver-test的设备树里定义了status = “disable”,查看设备结点的status信息也显示为disable。

bdf6ab3fc0abe09a7e4c595e7be6d20c.png

4d13d4dcd4a293c6bf26aba80a46eebd.png

加载driver-test驱动以后设备未创建成功,当然也就无法执行驱动的probe函数。这是除compatible不匹配之外的另一个无法执行驱动probe函数的原因。

6452647a2ae8092dcd0ef1209ca7c91b.png

现在重启系统进入到U-Boot的命令行模式,通过fdt修改status的值为okay。

b86c2d87eeababda318a939f68aff7b7.png

启动系统,再次确认设备树结点信息是否修改成功以及驱动是否执行了probe函数。通过系统启动的log信息可以看到,当修改完status状态值之后,driver_test的probe函数得到了执行。

428be89b5b016ee9e146da6acf279f0a.png

driver_test设备也正常的注册进platform设备中。

07ef7191d051ba30397ce6edc3a0cd2e.png


##3. fdt 其他功能

ef427bffa5bdb8203d33fa0c4abf38de.png

fdt print可以打印整个的dtb FDT信息

ae953ab53d7dfeba3ed7a8846930637d.png

fdt header查看dtb的头部信息,通过size大小也可以间接的判断当前加载的设备树文件是否为所需的设备树。

40df1ad35318b700f3b970f8d73cc5e0.png


#4. dtc工具

dtc可以使用宿主机提供的亦可以使用kernel提供的。这个工具是将已编译的dtb文件反汇编。

5d66c44c1f91b936b1da099d0e0871a6.png


#5. 查看kernel fdt文件

这个fdt是未解压缩的dtb文件,里面的内容和dtb完全一样。在kernel系统中执行hexdump查看:

09c7576eaeb8ae60351e52424e5ecac8.png

通过UE查看原始的dtb文件,与fdt文件内容完全一致。

976129d533bc10937ae5015c0f832d23.png


#6. of_property_xxx

在代码中可以调用of.h中提供的API来检查或这获取device node的信息。

d8e7e2fd89615d9bfec53e3d2f8aa81c.png

例如下面的调用方式

f35919f72a4e4e8801da4bdeda2275b1.png


------END------

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

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

相关文章

DiscoveryService.getRemoteAdvertisements是否会获得本地通告?

从该方法名称上来说&#xff0c;应该是不能获得本地通告&#xff0c;本着探究的精神&#xff0c;首先做个小测试&#xff0c;再从源代码中寻找答案。----------------------------------------------------------------------------- 测试结果&#xff1a;本地通告确实取不到&a…

Linux的bc命令计算π的值预估系统算力

这是今天突然想到的一个事情&#xff0c;几年前我和一个朋友做一个开发板&#xff0c;然后我们需要完成的这个开发板有算力的要求&#xff0c;当时我们测试的时候就用了一个shell脚本来分析系统的算力。今天我突然想不起这个命令&#xff0c;然后就想写篇文章记录下&#xff0c…

面向对象的思想是什么?

我同事的回答&#xff0c;我觉得这句话可以读十遍说下我自己的理解你不是人&#xff0c;你是猪。解释一下我们在编写面向对象的代码时&#xff0c;一定要有抽象的思想&#xff0c;什么是抽象&#xff0c;抽象是一种概念的东西&#xff0c;不是实实在在的&#xff0c;看不见摸不…

python编程格式化输出_Python的三种格式化输出

今天刚学了python的三种格式化输出&#xff0c;以前没接触过这么有趣的输出方式&#xff0c;现在来分享一下。#!/user/bin/env python#coding:utf-8#三种格式化输出#第一种格式化输出nameinput("name:")ageinput("age:")jobinput("job:")salaryi…

多线程的异常捕捉

为什么要单独讲多线程的异常捕捉呢&#xff1f;先看个例子&#xff1a; public class ThreadException implements Runnable{Overridepublic void run() {throw new RuntimeException();}//现象&#xff1a;控制台打印出异常信息&#xff0c;并运行一段时间后才停止public stat…

Linux 安装配置JDK 、 MySQL 、nginx

今天我来讲一下在Linux下各环境的搭建&#xff0c;主要就讲一下jdk、MySQL、和一个代理服务器nginx 1、 jdk的安装配置 1)卸载自带openjdk 当我们拿到一个全新的ECS的时候上面有的会自带一个openjdk&#xff0c;但是我们一般不会用这个&#xff0c;所以在这里我们会先卸载这个自…

wat java_并发工具优于wati、notify(69)

现在几乎没有理由在使用wait 和 notify&#xff0c;使用高级工具代替java.util.concurrent 包并发工具分三类&#xff1a;Executor 框架并发集合(concurrent Collection)同步器(synchronizer)并发集合对标准集合接口(List、Map、Queue)封装了高性能的并发实现为了提高并发性&am…

一道关于 fork 的笔试题

题目阅读下面的代码&#xff0c;显示终端会打印出几个 hello world&#xff1f;#include <sys/types.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h>int main() {fork();fork();fork();printf("hello world\n");exit(0); }…

小球游戏1

引用&#xff1a;http://www.oschina.net/code/snippet_12_4121 [图片] pic3.jpg [图片] pic4.jpg [代码] [Java]代码 01public class Player extends AnimatedSprite {02...03Override04 protected void onManagedUpdate(final float pSecondsElapsed) {05 super.…

java怎么调kettle_通过Java调取Kettle的结果集

Kettle端&#xff1a;Data Grid只是测试数据&#xff0c;目的是把数据传递到记录结果。Java端&#xff1a;package com.womai.util;import org.pentaho.di.core.KettleEnvironment;import org.pentaho.di.core.RowMetaAndData;import org.pentaho.di.trans.Trans;import org.pe…

我也确实很向往深圳这种拼搏的精神

今天跟个同学聊天&#xff0c;是关于他的offer选择&#xff0c;他拿了一个不错的外企岗位offer&#xff0c;这个offer的薪资是他现在薪资两倍还多一些&#xff0c;他现在人在外地&#xff0c;年后准备来深圳工作&#xff0c;他在微信说让我给些建议。首先我肯定的是&#xff0c…

中科院开源 RISC-V 处理器“香山”流片,已成功运行 Linux

去年 6 月份&#xff0c;中科院大学教授、中科院计算所研究员包云岗&#xff0c;发布了开源高性能 RISC-V 处理器核心 —— 香山。近日&#xff0c;包云岗在社交平台晒出图片&#xff0c;香山芯片已流片&#xff0c;回片后进行了串口调通&#xff0c;1 月 24 日成功运行了 Linu…

java io流操作_十个Demo进行讲解Java中IO流的常用操作~

好久不见的IO流对IO流的学习&#xff0c;我记得还是初学Java基础的时候&#xff0c;后来找工作过程中经常看到有些招聘信息中写到熟悉IO流&#xff0c;现在想想IO流&#xff0c;真的是一脸懵逼&#xff0c;不说这么多废话了&#xff0c;IO流这次好好整理一下。说说IO流的类别在…

这些应用仍未兼容安卓新版本,系统升级后将无法使用

8月7日&#xff0c;谷歌正式发布Android 9 Pie&#xff0c;至今已两月有余。近日&#xff0c;华为终端开放实验室对国内主流应用在Android 9 Pie的兼容性进行测试&#xff0c;结果显示&#xff1a;目前TOP3000应用兼容率已经超过95%&#xff0c;但仍有少量应用存在启动失败、闪…

非常郁闷,WinForm中正常显示的自定义控件无法在WebForm中正常显示!

我写了一个自定义控件(Win Control)&#xff0c;此控件在WinForm中运行正常&#xff0c;但在WebForm中无法显示(在WebForm中此控件并不显示为红叉&#xff0c;但是一个对象图标)。由于没有出现权限或安全方面的提示&#xff0c;因此我从头开始一行一行进行比对&#xff0c;最终…

在家过年这两天|多图

这两天收到了很多朋友的新年祝福&#xff0c;在这里回应下&#xff0c;希望看到这篇文章的朋友们新的一年快乐开心&#xff0c;在求学的人学有所成&#xff0c;在工作的朋友们功成名就&#xff0c;家人健康&#xff0c;吃喝不愁……祝你们㏠㏡㏢㏣㏤㏥㏦㏧㏨㏩㏪㏫㏬㏭㏮㏯㏰㏱…

Eclipse下的项目管理插件介绍

前言 最近,一直学习开源项目的代码,难免会碰到各种版本管理器,作为一名在校大学生,学校的课程完全没提及到,靠着自己的摸索,走了不少弯路,写个列表,望对大家有所帮助.顺便提一下,这里只说客户端,至于服务端,自行根据提供的资料学习 CVS 这里eclipse自带就有,也有一段历史,现在的…

算命

今天大年初三&#xff0c;出了太阳变暖很多&#xff0c;我们带着家里的小朋友一起上街吃早餐。因为明天要去阳西&#xff0c;决定去外婆家看看&#xff0c;在超时买了点东西&#xff0c;走回车上刚好看到路边有算命先生&#xff0c;我就想着来计算一下。我先是问了记算一次多少…

poj2631

求一棵树的直径&#xff0c;所谓直径就是树上距离最远的两个点&#xff01; 树形动归&#xff0c;每个点的为根的子树的最长向下链和次长链的和&#xff01; 当然也可以二次深搜&#xff01; ————————————————————————————————————————…

原来做的一个语义搜索软件的界面

今天得知NGW&#xff08;New Generation Web&#xff0c;关于语义网络方面的&#xff09;课程及实验作业成绩已公布&#xff0c;急去查看&#xff0c;但与想象中相去甚远。 罢了&#xff0c;凡事但求尽力而为&#xff0c;末了问心无愧即可&#xff0c;其它种种皆是虚幻。 附&am…