Linux-笔记 设备树插件

目录

前言:

设备树插件的书写规范:

设备树插件的编译:

内核配置:

应用背景:

举例:


前言:

        设备树插件(Device Tree Blob Overlay,简称 DTBO)是Linux内核和嵌入式系统中用于动态修改或扩展系统运行时的设备树配置的一种机制。它是对传统设备(Device Tree Source,简称 DTS)的补充,允许在不重新编译整个内核的情况下,对硬件配置进行更改。本质也是个设备树文件。

设备树插件的书写规范:
/dts-v1/;        // dts 版本;
/plugin/;        //表示设备树插件

 / {
    fragment@0 {     //固定的写法
        target-path = "xxx";   //要覆盖替换的节点路径,从根节点开始写
        __overlay__ {    //固定写法
            /*在此添加要插入的节点*/
        };
    };

    fragment@1 {
        target-path = "xxx";   //要覆盖替换的节点路径
        __overlay__ {
            /*在此添加要插入的节点*/
        };
    };
 };
设备树插件的编译:
<sdk>/out/t113/kernel/build/scripts/dtc/dtc -I dts -O dtb -o xxx.dtb xxx.dts
<sdk>/.../dtc :使用sdk下的dtc
-I dts:指定输入文件格式为dts
-O dtb:指定输出文件类型为dtb
-o xxx:指定输出文件名
xxx.dts:输入文件名称
内核配置:
Device Drivers 
    -> Device Tree and Open Firmware support 
        -> [*]Device Tree overlays
应用背景:

        比如一个开发平台能适配许多的屏幕,如果按以前的做法,每次更换一个屏幕都得重新编译一次,如果我们可以采用dtbo来实现的话,就会很方便,我们可以将每种屏幕都做一个对应的dtbo插件文件,我们用到哪个屏幕就用对应的设备树插件去覆盖相应的节点。

举例:

        这里参考了同事提供的举例思路,思路是新建一个设备树插件去覆盖掉现有的设备树节点。由于例证的平台用到了身边现有的全志T113平台,看了一圈发现can比较容易验证,所以就采用can来验证。

1、查看设备树节点,可以看到在根节点下有两个can,这与平台上有两个can接口一致。

2、创建设备树插件,用于后面覆盖,这里我们将status设置为“disabled”,如果后面能覆盖成功,那么这两个can节点是肯定不能使用了。

/dts-v1/;
/plugin/;

 / {
    fragment@0 {
        target-path = "/can@0x0";
        __overlay__ {
            /*在此添加要插入的节点*/
		        #address-cells = <1>;
		        #size-cells = <0>;
		        compatible = "allwinner,sun8i-can";
		        device_type = "can0";
		        id = <0>;
		        status = "disabled";  //改为disabled
        };
    };

    fragment@1 {
        target-path = "/can@0x1";
        __overlay__ {
            /*在此添加要插入的节点*/
		        #address-cells = <1>;
		        #size-cells = <0>;
		        compatible = "allwinner,sun8i-can";
		        device_type = "can1";
		        id = <1>;
		        status = "disabled";  //改为disabled
        };
    };
 };

3、编译设备树插件,使用命令编译后就会生成设备树插件,生成dtb文件。

                             

4、编译得到dtb文件后,我们需要想办法去覆盖掉原来的节点,也就是让使用这个dtb文件,这里借助同事提供的方法采用手动操作内存里的文件去实现。先将这个编译出来的文件放到boot-resource分区去,以便我们操作。

操作之前先查看正常状态:

5、先设置工作设备树地址:
通过uboot启动信息,可以获取到内核设备树地址,0x44831e58就是内核设备树地址,0x44851e58是uboot设备树地址,我们需要内核设备树地址。

image.png

fdt addr 0x44831e58  //设置工作设备树

fdt命令参考文章:uboot 命令行使用 fdt 命令查看设备树信息,并得到完整的设备树的 dts 和 dtb 文件_uboot fdt命令-CSDN博客

6、加载设备树插件到内存中(每个平台不一样,根据实际操作)

fatload mmc 2:1 0x43000000 kernel-overlay-can.dtb  
//从emmc的boot-resource分区的 0x43000000地址加载kernel-overlay-can.dtb到内存
fdt resize 8192  //调整设备树的大小

7、设备树覆盖:将内存0x43000000处的设备树插件覆盖到工作设备树

fdt apply 0x43000000

8、进入系统

9、验证:可以看到已经找不到节点了

  • 20
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《linuxcnc源程序概略笔记.pdf》是一份关于LinuxCNC源程序的简要笔记LinuxCNC是一款开源的数控软件,可用于控制数控机床。这份笔记介绍了LinuxCNC的源程序的重要概念和特点。 该笔记首先简要介绍了LinuxCNC的发展历史和背景,然后介绍了LinuxCNC的基本架构和模块化设计。LinuxCNC的源程序是由许多不同的模块组成的,这些模块包括驱动模块、运动控制模块、插件模块等等。每个模块都有自己的功能和任务,通过模块化的设计,使得LinuxCNC可以根据用户的需求进行定制和扩展。 接下来的内容主要介绍了LinuxCNC的源代码结构和编程规范。源代码结构包括主要目录和文件的组织方式,编程规范则规定了源代码的格式、命名规则、注释要求等等。编程规范的遵守有助于提高代码的可读性和可维护性。 此外,该笔记还对源程序中的关键算法和数据结构进行了简要介绍。这些算法和数据结构包括插补算法、反馈控制算法、运动规划算法等等,它们是实现数控机床运动控制的核心。 最后,该笔记总结了一些学习LinuxCNC源程序的建议和资源,例如官方网站、论坛、开发文档等等。提供了一些参考资料和实践项目,帮助读者更好地理解和应用LinuxCNC源程序。 总的来说,这份《linuxcnc源程序概略笔记.pdf》对于想要了解和学习LinuxCNC源程序的人来说是一份简明扼要的参考资料,有助于他们快速入门和理解LinuxCNC的源程序。 ### 回答2: 《LinuxCNC源程序概略笔记》是一本关于LinuxCNC开源控制软件的概述与笔记的电子书。LinuxCNC是一款用于数控机床控制的开源软件,它基于Linux操作系统,提供了丰富的功能和灵活的配置选项。 在这本电子书中,作者从软件的概述开始,介绍了LinuxCNC的基本原理和架构。他详细解释了LinuxCNC的核心组件,包括模块化的架构、运动控制和插件系统等。同时,作者还介绍了LinuxCNC的配置文件和参数设置,帮助读者理解如何根据自己的需求对软件进行定制。 另外,这本电子书还包括了一些实例和案例,以更直观的方式展示LinuxCNC的应用。作者介绍了一些常见的数控机床操作,并提供了相关的示例代码和配置文件,读者可以通过实践来学习和理解。 总的来说,《LinuxCNC源程序概略笔记》是一本介绍LinuxCNC的优秀资料。它不仅提供了对软件的系统性概述,还通过实例帮助读者深入理解。对于对数控机床控制感兴趣的人来说,这本电子书是一份宝贵的学习资料。 ### 回答3: 《linuxcnc源程序概略笔记.pdf》是一份关于LinuxCNC(Computerized Numerical Control)源程序概述的文档。LinuxCNC是一个开源的、基于Linux操作系统的数控系统。该文档提供了关于LinuxCNC源代码的概述和笔记。 首先,该文档介绍了LinuxCNC的基本架构和组成部分。LinuxCNC是由内核模块、驱动程序和用户界面组成的。内核模块是与硬件交互的核心组件,它提供了实时控制和运动插补功能。驱动程序则是与各种不同类型的机械设备进行通信的模块。用户界面则是用户与系统进行交互的图形界面或命令行接口。 接着,文档详细介绍了LinuxCNC的源代码结构。LinuxCNC的源代码主要分为内核模块、驱动程序和用户界面三个部分。每个部分都有自己的子目录和文件,通过这些源代码文件,可以深入了解LinuxCNC的实现细节和各个功能的实现方法。 此外,文档还提供了一些关于LinuxCNC源代码的使用和开发的注意事项。例如,建议使用版本控制系统来管理和跟踪代码的变化,方便日后的维护和协作开发。还介绍了一些常见的开发工具和技术,如CMake构建系统和ROS(Robot Operating System),可以帮助开发人员更好地理解和修改源代码。 总之,《linuxcnc源程序概略笔记.pdf》是一份对LinuxCNC源代码进行概述和总结的文档。通过学习这份文档,读者可以深入了解LinuxCNC的架构、源代码结构以及开发注意事项,为相关的软件开发和维护工作提供参考和指导。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值