[导读]关注、星标嵌入式云IOT技术圈,精彩及时送达来源| Linux与SoC整理出了6种驱动开发时与设备注册、设备树相关的调试方法,彼此间没有优先级之分,每种方法不一定是最优解,但可以作为一种debug查找问题的手段,快速定位问题原因。例如在芯片验证时,不同时钟频率下系统启动情况摸底...
关注、星标嵌入式云IOT技术圈,精彩及时送达
来源 | Linux与SoC
整理出了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------
本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
史胜辉,在MTK工作了11年,一直在基带芯片的USB驱动领域做开发和验证。从最开始做USB2.0/3.0 IP验证和驱动开发到后面带领团队做上层协议驱动开发,以及跟硬件设计部门合作开发全新的USB硬件加速器。
关键字:
基带芯片
驱动领域
驱动开发
点击上方名片关注我们朱老师推荐语:此岗位为AIoT终身成长大会员同学提供的自己公司的岗位内推,总部在深圳,是一家专业从事闭路电视监控设备、会议摄像机的研发、制造、销售的高科技企业,有学过嵌入式课程或者海思项目的同学,想换...
关键字:
开发工程师
linux驱动
驱动开发
最近在学习MIPI接口的LCD驱动开发与调试,这里我主要用的是MIPI-DSI接口,它学习起来真的是太复杂了,特别是对于我这种很久都没写驱动来说更是头疼,但是头疼归头疼,工作咱们还是要完成的,那就只能硬着头皮往下肝吧!首...
关键字:
MIPI
驱动开发
调试
最近在学习MIPI接口的LCD驱动开发与调试,这里我主要用的是MIPI-DSI接口,它学习起来真的是太复杂了,特别是对于我这种很久都没写驱动来说更是头疼,但是头疼归头疼,工作咱们还是要完成的,那就只能硬着头皮往下肝吧!首...
关键字:
MIPI
驱动开发
调试
哈喽,我是老吴,我来继续分享我的学习心得啦。gpio和pinctrl子系统在内核里的使用率非常高,和嵌入式产品的关联非常大。从这两个子系统开始学习驱动开发是个不错的入门选择。本文目录:一、gpio 与 pinctrl二、...
关键字:
gp
pi
驱动开发
前阵子工作上做了一些关于 ADC 的支持,由于现在 ADC 相关的支持都被移动到了 IIO (Industrial I/O) 子系统下,我查阅了一些关于 IIO 资料,包括书籍、文章、内核文档和代码。个人感觉最好的入门文...
关键字:
IO
驱动开发
嵌入式
来源:知乎,作者: 埃尔维斯·刘能 链接:https://www.zhihu.com/question/34686343/answer/308464284 前言:上班划水在知乎看到一个帖子,网友问: 现在要选个方向,嵌入...
关键字:
嵌入式
驱动开发
ADI
IC厂商
作者:程序员最幽默(ID:humor1024) 【0】 网传互联网公司加班表 【1】 互联网工作生存指南 【2】 据说,互联网公司员工上课座位如下 【3】 当代互联网企业真实写照 【4】 互联网公司排位,你同意吗? 【5...
关键字:
互联网
程序员
驱动开发
BSP
来源 :https://github.com/juwikuang/china_job_survey ▍趋势 2020年4月,中国大陆程序员平均工资14249元。 ▍一线城市工资 ▍各主要程序员城市工资变化 ▍异常的城市...
关键字:
程序员
驱动开发
编程语言
人工智能
通常我们电路板上的 IC 而言,IC 周围的电源层可以看成是优良的高频电容器,它可以收集为干净输出提供高频能量的分立电容器所泄漏的那部份能量。此外,优良的电源层的电感
关键字:
emi
PCB
辐射
驱动开发
据悉,全世界的开发者都能基于该平台设计面向细分领域的定制化芯片,IP供应商可以研发原生于该平台的核心IP,高校和科研院所则可开展芯片相关的教学及科研活动。开源的RISC-V MCU会打败ARM 架构MCU吗?
关键字:
open
开源
驱动开发
mcu设计
无剑100
随着人口基数的逐渐稳定,国内人口红利也在逐渐消失,人口老龄化趋势加快,企业用人成本也直线攀升,绝大多数企业尤其是制造型企业,不得不考虑用机器代替人工,由此催生出
关键字:
嵌入式
研华科技
驱动开发
随着生活水平的提高,定时器的用途也越来越广泛。比如对开水机、热水器的定时控制,现在有了大功率定时器,定时开机、定时关机,实现节能、安全、健康的使用。一、硬件设计
关键字:
STM32
通用定时器
驱动开发
写一个LED点灯驱动:
①框架(在Linux字符设备驱动开发基础已经搭建好)
②完善:硬件的操作
a.看原理图-确定引脚
b.看2440数据手册
c.写代码
写代码注意:裸机
关键字:
框架
驱动开发
近期根据研究需要,收集资料整理出这篇文章,本次文章介绍了Windows XP下PCI9054的驱动开发环境的搭建方法,该方法所选择的开发平台为VC6.0+DDK+DriverStudio.总结了调试过程中容易出现的错误,...
关键字:
pci9054
驱动开发
本书非常适合熟悉Windows应用编程的读者转向驱动开发。所有的内容都从最基础的编程方法入手。介绍相关的内核API,然后举出示范的例子。这本书只有不到70页,是一本非常精简的小册子。所以它并不直接指导
关键字:
驱动开发
可编程控制器是计算机家族中的一员,是为工业控制应用而设计制造的。早期的可编程控制器称作可编程逻辑控制器,简称PLC,它主要用来代替继电器实现逻辑控制。随着技术的发展,这种装置的功能已经大大超过了逻辑控制的范围,因此,今天...
关键字:
plc
控制器
编程
驱动开发
本文设计一种内容更新便捷、可扩展、低价格的点阵LED 文字显示屏。降低成本的途径是①用几乎人人都有的手机的蓝牙数据传输功能进行LED 显示内容的更新,免去专业上位机软件
关键字:
LED
点阵
蓝牙技术
设计方案
驱动开发