关闭

高通平台中用devicetree注册设备及驱动匹配

662人阅读 评论(0) 收藏 举报

1、在设备树文件(.dts)中的相应节点下添加要注册设备的节点

        &soc {

                    ......

                    plf_char_dev: mytest,plf_char_dev {

                            compatible = "mytest,plf_char_dev";

                            ......

                     };

                    ......

        };

        定义好的设备树源文件(dts文件)会被编译器DTC编译成二进制的dtb文件。然后在系统上电时,这个二进制文件会被加载到内存中,其地址被保存在R2寄存器中。但是,这个时候还并不存在device tree,需要经过kernel解析(主要工作分是两次扫描dtb,第一次是为了根据设备节点给设备树分配足够的内存,第二次是将节点填入内存,生成设备树)后,才生成真正的设备树,然后将设备树的根节点地址赋值给一个全局变量"allnodes"。

        然后,内核会根据设备树的内容生成相应的设备结构体,这个结构体中包含了设备的资源(I/O地址等),并用of_device_add函数把设备结构体添加到设备模型中。


2、设备和驱动的匹配

        总线(bus)的 match 函数通过调用of_driver_match_device实现驱动和设备的匹配。确认驱动是否匹配的关键因素是检查driver中的of_device_id类型的成员与device中device_node类型的成员是否匹配,device_node类型代表的是设备树中的树节点,内含compatible, type, name等设备节点信息;of_device_id结构体包含compatible, type, name;优先对比compatible,其次是type,最后是name,这三种信息如果出现一个相同的,则认为设备与驱动匹配。一般都是compatible匹配。

        

        

3、驱动程序的编写

        当使用设备树编写驱动时,不需要再在代码中定义device结构中的resource等成员,因为设备的属性资源定义在设备树的节点中,驱动需要是可通过相应的api获取;而相应的driver结构体需要初始化of_device_id类型的of_match_table成员,以便匹配。由于driver中用于匹配device的数据不再是name成员,所以,name成员可以随意定义,而不影响匹配。

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

浅析Linux Device Tree - 基础部分

Device Tree基础DeviceTree(以下简称DT)用于描述设备信息以及设备于总线之间的层级关系,DT可用于描述绝大多数板级设备的细节,包括CPU、内存、中断、总线以及外设等,与DT相关的Object有dts、dtsi、dtc、dtb、dt.img。 dts:DT源文件称为dts文件,As...
  • Lonzoc
  • Lonzoc
  • 2016-03-24 09:37
  • 2945

Linux驱动基础:device tree

Bootloader设置 msm平台为例,在bootloader代码中会根据当前ddr开始的地址,按照一定的offset定义了kernel开始的地址,ramdisk开始地址以及TAG开始的地址。其中kernel代码开始的地址和ramdisk的地址自不必说,这两个不对的话再加载完kernel代码之后...
  • hongzg1982
  • hongzg1982
  • 2017-02-19 16:07
  • 785

linux驱动开发—基于Device tree机制的驱动编写

前言 Device Tree是一种用来描述硬件的数据结构,类似板级描述语言,起源于OpenFirmware(OF)。在目前广泛使用的Linux kernel 2.6.x版本中,对于不同平台、不同硬件,往往存在着大量的不同的、移植性差的板级描述代码,以达到对这些不同平台和不同硬件特殊适配的需求。但是...
  • zengxianyang
  • zengxianyang
  • 2016-02-24 20:15
  • 5052

基于Device tree机制的驱动编写

转自:http://www.69900.com.cn/zengxianyang/article/details/50732929 目录(?)[+] 前言 Device Tree是一种用来描述硬件的数据结构,类似板级描述语言,起源于OpenFirmware(OF)...
  • richu123
  • richu123
  • 2016-05-13 09:08
  • 673

高通平台Android源码分析之Linux内核设备树

刚开始接触Android源码的时候,发现在kernel里面多了一种dts文件,因为当初自学Linux时和在第一家公司做物联网模型时都是用的比较老的内核,内核代码还比较混乱,没有采用dts这种方便简洁的格式。后面才知道这是因为Linus的一句”this whole arm thing is a fuc...
  • yangchangwen
  • yangchangwen
  • 2016-04-22 00:39
  • 2769

高通 SPI驱动笔记

1. 设备树//msm8909.dtsi: spi_1: spi@78b9000 { /* BLSP1 QUP5 */ compatible = "qcom,spi-qup-v2";//厂商设备名 #...
  • WEINILUO
  • WEINILUO
  • 2015-10-27 17:11
  • 3760

高通平台Android源码分析之Linux内核设备树

刚开始接触Android源码的时候,发现在kernel里面多了一种dts文件,因为当初自学Linux时和在第一家公司做物联网模型时都是用的比较老的内核,内核代码还比较混乱,没有采用dts这种方便简洁的格式。后面才知道这是因为Linus的一句”this whole arm thing is a fuc...
  • yangchangwen
  • yangchangwen
  • 2016-04-22 00:39
  • 2769

高通平台USB调试指南和设计

9调试指南和技术 了解USB的结构体能够帮助我们高效的调试一个问题并且发现潜在的需要修复的bug。这章介绍了基本的用于USB相关问题的调试方法和所能获得的调试机制。 9.1 USB LeCroy logs LeCroy USB分析仪是一个很好的工具,它允许我们搜集发生在总线上的详细的传输包。这...
  • u010684585
  • u010684585
  • 2017-03-23 09:53
  • 432

高通SPI指纹模块driver调试

高通平台指纹模块的调试小记。
  • LEAD_SOLO
  • LEAD_SOLO
  • 2016-09-18 15:09
  • 2756

初入qualcomm平台usb驱动(一)

这里主要收集了一些USB关于OTG、device、host相关的知识。 当设备检测到USB_ID信号为低时,表该设备应作为Host(主机,也称A设备)用。 当设备检测到USB_ID信号为高时,表示该设备作为Slave(外设,也称B设备)用。 因此,在主机侧的层次结构中,要实现的 USB 驱动包括...
  • weijory
  • weijory
  • 2017-05-11 15:35
  • 1657
    个人资料
    • 访问:31261次
    • 积分:1118
    • 等级:
    • 排名:千里之外
    • 原创:83篇
    • 转载:0篇
    • 译文:0篇
    • 评论:5条
    最新评论