2021-09-26

2021.9.26 linux驱动开发

#有关dts

全称device tree source设备树源码,device tree是一种描述硬件的数据结构。Device tree使用BootLoader传递参数。

对于高通msm8992平台,sbl将烧卸载emmc的cdt.bin进行读取和处理,获得nPlatform和nsubtype。Dts在编译时编译为dtb文件,启动kernel时将dtb地址传递给kernel,kernel通过传入的dtb地址进行设备创建。

Dt由一系列被命名的结点(node)和属性(property)组成,而结点本身可以包含子结点。属性是指成对出现的name和value。Dt画一棵电路板上CPU、总线、设备组成的树,BootLoader将这棵树传递给内核,内核识别这棵树并根据他展开出linux内核中的各种设备,设备使用的资源也会传递给内核,内核会将这些资源绑定给展开的相应设备。Dts是一种ascII文本格式的device tree描述。

*多数设备注册到platform bus上,在系统目录/sys/bus/platform/devices中列出系统已经注册的设备

如何在一个树状结构的device tree中引用一个node?要想唯一指定一个node,必须使用full path。

#dts组成

/{             “/”表示root结点,该结点下有两个子结点node1和node2

Node1 {   结点node1下又含有子结点,各结点都有一系列属性

        a-string-property = “Astring”;        属性为字符串

        a-string-preperty = “firststring”,”second string”;   字符串数组

child-node1  {

first-child-property;

second-child-property = <1>;Cells          (由u32整数组成)

a-string-property = “hello world!”;

}

}

Node2{

An-empty-property;        属性为空

}

}

#dts语法

        Dts文件中root结点的compatible属性用于定义系统的名称。

        Compatible是字符串属性,用于匹配设备和设备驱动,一般形式为:

                <芯片供应商>,<模块名>

        Pwms:pwms为设备属性,其引用了一个pwm设备结点,结点信息解析成设备,在pum_bl.c驱动中可以直接get pwn资源以及对pwm资源进行操作。

        Status:若为okay则在解析设备树文件时会将此设备注册到对应的总线上,否则需要手动注册。

#dts与驱动

        对比:使用dts之前的bsp和driver

        #ifdefCONFIG_LEDS_CTL

        Structplatform_device s3c_device_leds_ctl = {

                .name = “leds”,

                .ud = -1,

                };

        #endif

        Driver:

        Static strucplatform_driver leds_driver = {

                .probe = leds_probe,

                .remove = leds_remove

                .suspend = leds_suspend,

                .resume = leds_resume,

        .driver={

                .name = DRIVER_NAME,

                .owner = THIS_MODULE,

                },

        };

        使用了dts之后,似乎可以用compatible中的参数代替leds,在驱动的结构定义中使用.<参数> = “设备名_调用函数”

        Dts文件

        &soc{

                I2c@f9928000{ /* BLS1 QUP6 */

                Status = “OK”;

                Nfc-nci@76{

                        Compatible = “brcm,bcm2079x”

                …

        }

        Driver:

        Static structof_device_id bcm_match_table[]={

                {.compatible = “brcm,bcm2079x”},

{}

}

Static structi2c_driver bcm2079x_driver = {

        .Id_table = bcm2079x_id,

        .probe = bcm2079x_probe,

        .remove = bcm2079x_remove,

        .driver = {

                .owner=THIS_MODULE,

                .name=”bcm2079x-i2c”,

                .of_match_table = bcm_match_table,

                },

};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值