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

#1. dtdiff工具

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

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

#2. kernel device-tree base

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

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

#3. U-Boot fdt command

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

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

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

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

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

##3. 修改设备时钟

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

修改后如下图:

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

##3. 修改设备status状态

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

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

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

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

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

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

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

##3. fdt 其他功能

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

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

#4. dtc工具

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

#5. 查看kernel fdt文件

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

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

#6. of_property_xxx

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

例如下面的调用方式

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

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

  1. linux驱动开发学习2 设备树

    设备树 dtb板级信息文件,大势所趋,一定要学  如何确定要编译哪个DTS文件:查看linux下的arch/arm/boot/dts/Makefile  DTS语言有属于自己的语法:以树形来描述设备信 ...

  2. Linux驱动开发:字符设备驱动开发实战

    Linux驱动开发:字符设备驱动开发实战 一.工程创建 VSCode 创建工程,设置 C/C++ 配置,导入 linux kernel 源码目录,方便 vscode 写代码自动补全,vscode 配置 ...

  3. 驱动开发基础知识——设备树

    BSP开发工程师[原来BSP就是那些被指臃肿的文件啊 BSP的出生 Linux经过不断的发展,原先嵌入式系统的三层结构逐步演化成为一种四层结构. 这个新增加的中间层次位于操作系统和硬件之间,包含了系统 ...

  4. zynq开发中的设备树

    在zynq开发中经常会修改设备树,每次遇到这种情况都有点发愁,今天把设备树相关的知识点总结一下,希望以后遇到设备树时,能够自如应对. 什么是设备树 设备树时描述硬件的数据结构,Linux系统可以通过设 ...

  5. linux驱动私有数据,linux驱动开发之字符设备--私有数据和container_of

    前言 驱动开发中通常为设备定义一个设备相关的设备结构体,其包含该设备的cdev .私有数据.信号量.irq等这些信息. 驱动开发中通常将文件的私有数据private_data指向设备结构体,在read ...

  6. 一、linux驱动开发-8.2-设备树下platform驱动

    一.简介 之前没用设备树的时候,是分别编写并注册platform_device和platform_driver来表示设备和驱动,如果使用设备树,设备的描述就放在设备树中,因此只需要实现platform ...

  7. Linux驱动开发中的中间件:设备树

    Linux设备树 设备树的产生是为了解决内核源码的arch/arm目录下代码混乱和臃肿的问题(过去每个厂商出个板子就要提供外设硬件和平台硬件信息,这些信息以.c和.h文件的形式呈现).在使用设备树之后 ...

  8. Linux驱动开发 15 块设备驱动框架

    CAN         I.MX6ULL 带有两个 CAN 控制器: FlexCAN1 和 FlexCAN2 , NXP 官方的 EVK 开发板这两个 CAN 接口都用到了,因此 NXP 官方的设备树 ...

  9. 一、linux驱动开发-8.1-platform设备驱动

    一.驱动的分离与分层 1.1.驱动的分隔与分离 通过驱动的分隔,也就是将主机驱动和设备驱动分隔开来,通过总线就行匹配,当我们向系统注册一个驱动的时候,总线就会在右侧的设备中查找,看看有没有与之匹配 的 ...

最新文章

  1. LED是否可以将光能转换成电能?
  2. 三部门发布18个新职业:含碳排放管理员、调饮师等
  3. shell变量,管道符,作业控制,shell变量,以及变量配置文件
  4. 【Java】Java垃圾回收机制
  5. 吴恩达《机器学习》 --- 神经网络
  6. python items和setdefault函数
  7. 哈希表与区块链的简单介绍
  8. 拓端tecdat|R语言蒙特卡洛计算和快速傅立叶变换计算矩生成函数
  9. 不同语言实现两个变量的交换 Python之禅
  10. 学硬件设计,需要看哪些书籍?
  11. 新加坡国立大学计算机系访学,关于选拔本科生2019年春季学期赴新加坡国立大学访学的通知...
  12. C# MVC 过滤器
  13. android appwidget桌面插件,Android:AppWidget、桌面小部件
  14. 记一次笔记本电脑百度云盘无法连接网络问题
  15. wifi共享大师开启失败发射功能失败
  16. 有得必有失,你该把技术做多细?
  17. Unity判断物体相对位置
  18. 虚拟服务器 vmotion,vSphere vMotion能够同时迁移多少台虚拟机?
  19. “ 请找出下面重复的字”
  20. Windows三种文件系统:NTFS、FAT32、FAT16的区别

热门文章

  1. Nginx/Apache发大招
  2. 原 Linux搭建SVN 服务器2
  3. mysql my.cnf 配置建议
  4. Eclipse开发Android程序如何在手机上运行
  5. 好像博问不能回复了,看似是某个脚本错误阻止了提交。可有此事?
  6. 微软TechEd 2006亲历(六):微软新一代系统管理平台面纱待揭
  7. 业务系统里面常见的方法接口设计
  8. pyhon量化数据处理小细节3---日期格式转换
  9. Liunx 系统调优
  10. python 裁判文书网_python - 用selenium模拟登陆裁判文书网,系统报错找不到元素。...