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

836人阅读 评论(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成员可以随意定义,而不影响匹配。

查看评论

i2c驱动从注册到probe被调用

涉及到的结构体: struct i2c_driver { unsigned int class; /* Notifies the driver that a new bus has appea...
  • qq_33160790
  • qq_33160790
  • 2017-04-06 22:36:37
  • 1056

在Linux DeviceTree添加dtsi文件并在驱动中读取节点信息写入sys文件系统

一、前提新版基于ARM的Linux都会基于Device Tree去代替之前的device驱动。更加多的了解Device Tree可以访问宝哥的Bolg:ARM Linux 3.x的设备树(Device...
  • lugandong
  • lugandong
  • 2015-08-19 20:23:44
  • 3086

教大家如何在qualcomm平台移植MTP驱动程序

前言: 本文章主要介绍了mtp的基本知识,mtp在android中的实现框架,具体的工作流程需要读者阅读具体的代码实现。然后介绍了mtp驱动的移植方法,首先需要把PID、VID标识加入到USB中,然后...
  • weijory
  • weijory
  • 2016-10-20 10:50:34
  • 1817

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

前言 Device Tree是一种用来描述硬件的数据结构,类似板级描述语言,起源于OpenFirmware(OF)。在目前广泛使用的Linux kernel 2.6.x版本中,对于不同平台、不同硬件...
  • zengxianyang
  • zengxianyang
  • 2016-02-24 20:15:07
  • 5838

设备树的用法(Device Tree Usage)

设备树的用法(Device Tree Usage)原文地址:http://www.devicetree.org/Device_Tree_Usage 本文概述了如何为一个全新的计算机编写设备树。意在提...
  • helloanthea
  • helloanthea
  • 2014-05-23 10:25:37
  • 4619

linux 根据设备树注册设备

/platform.c  (1) int of_platform_populate(struct device_node *root, const struct of_device_id *ma...
  • dzw19911024
  • dzw19911024
  • 2017-05-26 15:22:54
  • 445

linux platform 设备驱动之 match 自动匹配

struct platform_device { // linux/platform_device.h const char * name; int id; struct device d...
  • xy010902100449
  • xy010902100449
  • 2015-05-13 21:54:59
  • 2754

设备树学习之(七)I2C设备的注册过程分析

开发板:tiny4412SDK + S702 + 4GB Flash 要移植的内核版本:Linux-4.4.0 (支持device tree) u-boot版本:友善之臂自带的 U-Boo...
  • lizuobin2
  • lizuobin2
  • 2017-01-15 21:50:18
  • 2329

devicetree(设备树)的用法

本文通过为一个新machine写一个设备树来介绍设备树相关的概念,以及如何来描述一个machine。 关于设备树的技术细节描述,需要参考ePAPR文档,ePAPR文档中包含了大量的基础语法之外的...
  • hpu11
  • hpu11
  • 2017-02-10 11:04:00
  • 3471

设备树详解

在Linux3.x版本后,arch/arm/plat-xxx和arch/arm/mach-xxx中,描述板级细节的代码(比如platform_device、i2c_board_info等)被大量取消,...
  • qq_28992301
  • qq_28992301
  • 2016-11-24 16:53:11
  • 7780
    个人资料
    持之以恒
    等级:
    访问量: 4万+
    积分: 1215
    排名: 4万+
    文章分类
    最新评论