LinuxGod

LinuxGod.net
Linux大神网——精选每一篇高品质的技术干货
  1. 首页
  2. 开源快讯
  3. 正文

6种驱动开发时与设备注册、设备树相关的调试方法

2022年12月30日 121点热度

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

1. dtdiff 工具

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

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

linux驱动程序开发_小程序怎么开发自己的小程序_linux qt程序调用外部程序

2. kernel device-tree base

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

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

小程序怎么开发自己的小程序_linux qt程序调用外部程序_linux驱动程序开发

3. U-Boot fdt command

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

小程序怎么开发自己的小程序_linux驱动程序开发_linux qt程序调用外部程序

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 = 是 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 状态支持以下几种格式linux命令chm,若设置了 status 为 disable,那么设备是不可用的。若不设置 status,默认设备可用。

小程序怎么开发自己的小程序_linux驱动程序开发_linux qt程序调用外部程序

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

小程序怎么开发自己的小程序_linux qt程序调用外部程序_linux驱动程序开发

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

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

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

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

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

3. fdt 其他功能

小程序怎么开发自己的小程序_linux qt程序调用外部程序_linux驱动程序开发

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

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

4. dtc 工具

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

小程序怎么开发自己的小程序_linux qt程序调用外部程序_linux驱动程序开发

5. 查看 kernel fdt 文件

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

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

6. of_property_xxx

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

小程序怎么开发自己的小程序_linux驱动程序开发_linux qt程序调用外部程序

例如下面的调用方式

小程序怎么开发自己的小程序_linux qt程序调用外部程序_linux驱动程序开发

- EOF -

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 下图 加载 原因 时钟 设备
最后更新:2022年12月30日

Linux大神网

每日更新,欢迎收藏♥ 不积跬步无以至千里,加油,共勉。

点赞
< 上一篇
下一篇 >

Linux大神网

每日更新,欢迎收藏♥
不积跬步无以至千里,加油,共勉。

最新 热点 随机
最新 热点 随机
ubuntu离线安装软件 鸿蒙OS环境搭建过程中遇到的问题及解决方案 写入数据覆盖的分析与执行 解读Rainbond集群的安装和运维的原理,便于用户搭建Rainbond Linux基础知识:文件描述符、文件指针、索引节点 如何解决Linux下的无线网卡驱动的问题? linux 文件描述符 (师)-unused-fdKernel:2.6.14CPUarchitecture Linux系统下如何搭建SVN服务器,详细说明各配置项的功能 修改软件源文件、UI界面设置换源操作|Ubuntu Ubuntu14.04.2为例进行说明,其它Ubuntu版本与此类似 Linux图形界面用户和Windows用户来说获取系统硬件信息都不算问题 Ubuntu下换内核的过程及详细分析内核操作分析 100篇文章内存管理——内存回收入口 Web站点,utsa,,/usp/为读者提供大量资料 Linux内核源码/内存/文件系统/进程管理/设备 TeXLive和MiKTeX两大主要发行版的镜像配置方法 安全增强式Linux(SELinuxLinux)内核修改和用户空间工具 Ubuntu系统下安装字体和切换默认字体的方法系统 896MB如何转换为物理空间(Linux地址映射的分析) 比较流行的Linux系统图形界面环境-Linux社区创作挑战赛 如何查看Linux硬盘的大小、类型和硬件信息?方法
ubuntu离线安装软件 鸿蒙OS环境搭建过程中遇到的问题及解决方案Android官方网站:OpenHandsetAlliance源码模式:开发源码内核linux中makefile文件 cdeveloper的第21篇原创技术文章建议横屏Makefile简介Fedora17新特色特色说明桌面环境28bata集成了GNOMELinux嵌入式系统智能手机系统的硬件设计Unix或者类Unix文件系统中的每个文件(或者目录)打开U盘什么文件都看不到小编总结了基于嵌入式Linux的智能手机系统软件的设计与实现如何在Linux中使用Firejail运行应用程序访问某个目录基于嵌入式��闹悄苁只�长沙理工大学C语言教程-Qt.12安装教程05-27Linux有7个运行级别(关机,停机模式、DellG3)(Linux基础知识)文件压缩、打包命令解析的Linux操作系统怎样执行?LinuxDNS服务器,如何安装、配置和维护它?AMD2950x+技嘉x399免驱USB网卡,我的无线网卡linux解压gz文件命令 蓝易云香港五网CN2网络压缩比率的测试环境Linux系统中用于管理和控制系统服务的强大工具介绍围绕API创建封装器的开源项目正变得越来越流行主频93.75MHz的MIPS64NECVR4300处理器在N64上运行
打开U盘什么文件都看不到小编总结了 1.Linux磁盘分区和目录Linux发行版本之间的差别很少? Windows远程连接工具、Ubuntu系统的安装软件及系统 一个系统安装使用手册Alternate版Ubuntu系统U盘安装系统下载 科林·沃森:Ubuntu默认是关闭root帐户的,这样做 VR物联网智能家居实训套件你能get的技能精致并不是 去网上疯狂找解决办法,却不能ping网的问题! U盘做系统非常简单的步骤,之后自己去研究! 轻松下载、安装和使用Linux RedHat系统 如何显示英语总是默认支持的是中文? 移植Linux,手机变身“大杀器”!详解8大关键 :2管理大部分命令的组成 mkfsext3devhdbfdisk命令查看当前Linux分区情况可输入这条Linux命令 Part1linux修改文件夹权限:以上方法只能改变单个文件 虚拟机串口连接失败问题小哥的Linux系统解决方法 国产CAD软件厂商助力企业深度强化创新设计能力 手动删除400多万个小文件,rm-删除执行不动 虚拟主机技术极大怎么样?如何选择多个网站.Q. LinuxTCP协议栈的内部机制和优化技术介绍 基于嵌入式Linux的智能手机系统软件的设计与实现
标签聚合
linux脚本 linux系统 电脑 命令 虚拟机 sudo 文件目录 软件 linux服务器 命令模式
书籍
课程
技术群
技术干货大合集↓
  • 2023年6月 / 17篇
  • 2023年5月 / 93篇
  • 2023年4月 / 90篇
  • 2023年3月 / 129篇
  • 2023年2月 / 84篇
  • 2023年1月 / 161篇
  • 2022年12月 / 187篇
  • 2022年11月 / 76篇
友情链接:

Linux书籍 | Linux命令 | Linux系统 | RHCE红帽认证 | Linux软件 | Linux教程 | CentOS系统 | Linux内核 | Linux服务器 | Linux大神 | IT资源

COPYRIGHT © 2023 linuxgod.net ALL RIGHTS RESERVED.