栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Linux驱动编程【设备树详解】

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linux驱动编程【设备树详解】

目录

一、什么是设备树

二、DTS、DTB、DTC的关系

三、DTS基本语法

四、设备树在系统中的体现

五、设备树特殊节点

一、什么是设备树

        1、uboot启动内核用到zImage、imx6ull-alientek-emmc.dtb

                bootz 80800000 - 83000000

        2、描述设备树的文件叫做DTS,这个DTS文件采用树形结构描述板级设备,也就是开发板上的设备信息,例如CPU数量、内存基地址、I2C接口上接了哪些设备

        3、在单片机驱动里面比如W25QXX,SPI,速度都是在.c文件里面写死的。板级信息都写在.c里,导致Linux内核冗余、臃肿。因此,将板子信息做成独立的格式。文件扩展名为.dts。一个机器对应一个.dts

二、DTS、DTB、DTC的关系

        .dts相当于.c ==> DTS源码文件

        DTC工具相当于gcc编译器,将.dts编译成.dtb

        .dtb相当于bin文件,可执行文件

        使用方法: ①、make all

                           ②、make dtbs

        如果要编译指定的.dts :make xxxxxx.dtb

三、DTS基本语法

        1、设备树也有头文件,扩展名为.dtsi,可以将一款SOC他的其他所有设备/平台的共有信息提出来,作为一个通用的.dtsi文件

        .dtsl描述CPU内部的一些共有的外设的信息

#include  
#include "imx6ull.dtsi"

设备树抽象例子

        DPU:教务处

                ==>信息与科学学院

                        ==>通信工程

                                ==> 二班

        ALPHA:soc * 描述6ull芯片内部内存映射,内部外设信息 *

                ==>I2C

                ==>bus

                ==>aips1

                        ==>gpt2

                ==>aips2

                        ==>i2c1

        cpu

        clocks

        2、DTS也是 / 开始

        3、从根节点开始描述设备信息

        4、在根节点外有一些&cpu0这样的语句是追加信息,追加到.dtsi文件

/dts-v1/;
#include 
#include "xxxx.dtsi"
/ {            
    model = "";
    compatible = "";     
    chosn {    
                
    };
    memory {   
            
    };
    reserved-memory {
            
    };
    backlight {
            
    };
    pxp_v412 {
            
    };
    regulatros {
            
    };
    sound {
            
    };
    spi4 {

    };
};

5、节点名字:完整名字的要求

“node-name@unit-address”

一般都是外设寄存器的起始地址,或者其他含义,具体节点具体分析

        intc:interrupt-controllen@00a01000

        冒号前面是标签(label):后面才是名字

        intc是标签,interrupt-controllen@00a01000是完整名字

四、设备树在系统中的体现

        系统启动以后可以在根文件系统中看到设备树的节点信息。

        cd /proc/device-tree/ 在这个目录下存放着设备树信息。

        目录中的文件都是.dts文件的一级子节点

        内核启动的时候,会解析设备树,然后在/proc/device-tree/目录下呈现出来

五、设备树特殊节点

        chosn { };

        aliases{ };

        aliases子节点:在Linux内核启动的时候会扫描这个节点。例如soc上有很多个i2c控制器,alias的相当于给每个i2c控制器分配一个唯一的编号

        chosen子节点:主要是为了uboot向Linux内核传递数据,重点是bootargs参数。作为命令行参数

linux内核cmdline的值为

        uboot是如何向内核传递bootargs。

        经过查看发现chosen节点中包含bootargs属性,属性值和uboot的bootargs一致。

        uboot接触过dtb,最终通过bootz 80800000 - 83000000来启动内核。经过分析判断uboot拥有bootargs环境变量和dtb,因此最有可能“作案”。

        在uboot的fdt_chosen函数中会查找chosen节点,并且添加bootargs环境变量

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/845508.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号