当前位置: 首页 > article >正文

linux驱动:6ull(5)自定义根节点

目录

步骤

构建树的结构

完整文件 

解释

 测试

特殊节点

aliases 节点

chosen 子节点


步骤

  • 新建一个xxx.dts文件,写入根节点框架
  • 添加cpus节点
  • 添加 soc 节点
  • 添加 ocram 节点
  • 添加 aips1、aips2 和 aips3 这三个子节点
  • 添加 ecspi1、usbotg1 和 rngb 这三个外设控制器节点

构建树的结构

  • /
    • cpus
      • cpu0
    • soc
      • ocram
      • aips1
        • ecspi1
      • aips2
        • usbotg1
      • aips3
        • rngb

完整文件 

/ {
    compatible = "fsl,imx6ull-alientek-evk", "fsl,imx6ull";
    cpus {
        #address-cells = <1>;
        #size-cells = <0>;
        //CPU0 节点
        cpu0: cpu@0 {
            compatible = "arm,cortex-a7";
            device_type = "cpu";
            reg = <0>;
        };
    };
    //soc 节点
    soc{
        #address-cells = <1>;
        #size-cells = <1>;
        compatible = "simple-bus";
        ranges;
        //ocram 节点
        ocram: sram@00900000 {
            compatible = "fsl,lpm-sram";
            reg = <0x00900000 0x20000>;
        };
        //aips1 节点
        aips1: aips-bus@02000000 {
            compatible = "fsl,aips-bus", "simple-bus";
            #address-cells = <1>;
            #size-cells = <1>;
            reg = <0x02000000 0x100000>;
            ranges;
            //ecspi1 节点
            ecspi1: ecspi@02008000 {
                #address-cells = <1>;
                #size-cells = <0>;
                compatible = "fsl,imx6ul-ecspi", "fsl,imx51-ecspi";
                reg = <0x02008000 0x4000>;
                status = "disabled";
            };
        };
        //aips2 节点
        aips2: aips-bus@02100000 {
            compatible = "fsl,aips-bus", "simple-bus";
            #address-cells = <1>;
            #size-cells = <1>;
            reg = <0x02100000 0x100000>;
            ranges;
            //usbotg1 节点
            usbotg1: usb@02184000 {
                compatible = "fsl,imx6ul-usb", "fsl,imx27-usb";
                reg = <0x02184000 0x4000>;
                status = "disabled";
            };
        };
        //aips3 节点
        aips3: aips-bus@02200000 {
            compatible = "fsl,aips-bus", "simple-bus";
            #address-cells = <1>;
            #size-cells = <1>;
            reg = <0x02200000 0x100000>;
            ranges;
            //rngb 节点
            rngb: rngb@02284000 {
                compatible = "fsl,imx6sl-rng", "fsl,imx-rng", "imxrng";
                reg = <0x02284000 0x4000>;
            };
        };
    };
};

解释

  • 设备树框架
    • 一个根节点,加一个compatible 属性
  • CPU 节点
    • I.MX6ULL是A7,只有一个cpu,cpus描述所有cpu,cpu0为第一个cpu
  • SOC 内部外设节点
    •  存放uart,iic 控制器子节点
    • #address-cells = <1>,#size-cells = <1>,起始地占用一个字长,地址空间长度也占用一个字长
    • ranges 属性为空,说明子空间和父空间地址范围相同
  • ocram 节点
    • I.MX6ULL 内部 RAM
    • 节点名字@后面的 0x00900000 就是 ocram 的起始地址
    • reg 属性也指明了 ocram 内存的起始地址为 0x00900000,大小为 0x20000
  • aips1、aips2 和 aips3 节点
    • 外设控制器
    • aips1,起始地址0X02000000,大小0X100000
    • aips2,起始地址0X02100000,大小0X100000
    • aips3,起始地址0X02200000,大小0X100000
  • ecspi1、usbotg1 和 rngb 节点
    • 外设控制器
    • 基本和上面三个外设控制器节点一样

 测试

把这个设备树烧录到板子中重启,打开/proc/device-tree目录,进去就可以看到各个子节点,进去子节点就可以看到各个的属性

特殊节点

aliases 节点

主要功能就是定义别名,定义别名的目的就是为了方便访问节点。不过我们一般会在节点命名的时候会加上 label,然后通过&label 来访问节点

chosen 子节点

为了 uboot 向 Linux 内核传递数据,重 点是 bootargs 参数


http://www.kler.cn/a/456729.html

相关文章:

  • python版本的Selenium的下载及chrome环境搭建和简单使用
  • 委外加工业务如何调整原材料的消耗-MIGO A11-后续调整
  • 工作中常用Vim的命令
  • 利用JavaScript实现猜数字
  • Linux和ROS(Robot Operating System)在底层实现上的差异
  • 工厂+策略模式之最佳实践(疾病报卡维护模块API设计)
  • flink cdc使用flink sql方式运行一直报Make sure a planner module is on the classpath
  • Linux下基本指令
  • 咖啡即将“从天而降”,无人机外卖时代来袭
  • 【C#设计模式(21)——状态模式(State Pattern)】
  • DVWA安装
  • CSS学习记录20
  • 数据分析的分类和EDIT思维框架
  • AIGC时代的网络安全威胁与应急响应机制构建
  • Windows 10工控主板支持HDMI + LVDS双屏显示
  • FPGA三模冗余TMR工具(二)
  • 017__联合体和枚举
  • stm32迁移
  • 【Android】GreenDao版本和Gradle版本的对应关系
  • “校园健康数据管理”:疫情管控系统的信息收集与分析
  • ID读卡器UDP协议QT小程序开发
  • Bitmap(BMP)图像信息分析主要说明带压缩的形式
  • 浏览器http缓存问题
  • 5个实用的设计相关的AI网站
  • NLP 中文拼写检测纠正论文-02-2019-SOTA FASPell Chinese Spell Checke github 源码介绍
  • 2024.12.27 周五