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、验证:可以看到已经找不到节点了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/27372.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Ardiuno】使用ESP32单片机网络功能调用API接口(图文)

接着上文连通wifi后&#xff0c;我们通过使用HTTPClient库进行网络相关操作&#xff0c;这里我们通过http协议进行接口调用。 为了简化操作&#xff0c;小飞鱼这里使用了本地服务器上的文件作为接口&#xff0c;正常操作时会调用接口后&#xff0c;将服务器返回的数据进行解析…

门控循环单元GRU与长短期记忆网络LSTM

门控循环单元与长短期记忆网络 门控隐状态 问题提出&#xff1a;对于一个序列来说不是每个观察值都是同等重要想只记住相关的观察需要&#xff1a; 能关注的机制&#xff08;更新门&#xff09;能遗忘的机制&#xff08;重置门&#xff09; 第一个词元的影响至关重要。 我们…

【第10章】Vue之Element Plus常用组件

文章目录 前言一、表格1. 带斑马纹表格2. 展示 二、分页1.国际化(中文)2.分页代码3. 展示 三、表单1. 表单代码2. 展示 四、卡片1. 卡片代码2. 展示 总结 前言 通过上一章的快速入门&#xff0c;我们已经学习了按钮使用&#xff0c;接下来学习Element Plus的常用组件&#xff…

SQL 快速参考

SQL 快速参考 SQL&#xff08;Structured Query Language&#xff09;是一种用于管理关系数据库管理系统&#xff08;RDBMS&#xff09;的标准编程语言。它用于执行各种操作&#xff0c;如查询、更新、插入和删除数据库中的数据。本快速参考将提供SQL的基本语法和常用命令&…

意向锁通俗解释

意向锁概念 意向锁&#xff08;Intention Lock&#xff09;是一种数据库并发控制机制&#xff0c;用于协调和管理多个事务对数据库对象&#xff08;如表、行等&#xff09;的并发访问。它通过在数据库对象上加锁来避免事务间的冲突&#xff0c;确保数据的一致性和完整性。 意…

JavaScript之对象

对象 什么是对象 一种数据类型&#xff0c;可以理解为一种无序的数据集合&#xff0c;数组是有序的数据集合 用来描述一个事物&#xff1a;静态特征、动态特征 对象使用 声明语法&#xff1a; //第一种 let 对象名 {属性名&#xff1a;属性值, //多个属性由逗号隔开方法…

826. 安排工作以达到最大收益

826. 安排工作以达到最大收益 题目链接&#xff1a;826. 安排工作以达到最大收益 代码如下&#xff1a; class Solution { public:int maxProfitAssignment(vector<int>& difficulty, vector<int>& profit, vector<int>& worker) {vector<…

统计信号处理基础 习题解答10-12

题目&#xff1a; 如果&#xff0c;其中&#xff1a; 对某个&#xff0c;令。证明当时使最大。另外&#xff0c;证明。它们为什么是相同的&#xff1f;如果&#xff0c;基于的的MMSE估计量是什么&#xff1f; 解答&#xff1a; 根据多维高斯分布的定义&#xff0c;可以得到&am…

2024年最新版-Kubeadm快速部署Kubernetes集群(K8S)

Kubernetes集群部署 文章目录 Kubernetes集群部署资源列表基础环境一、环境准备&#xff08;三台主机都要执行&#xff09;1.1、绑定hosts1.2、安装常用软件1.3、关闭交换分区1.4、时间同步 二、Docker环境部署&#xff08;三台主机都要执行&#xff09;2.1、安装依赖包2.2、添…

全志d1 licheerv编译

opensbi sudo apt install gcc-riscv64-linux-gnugit clone https://github.com/riscv-software-src/opensbi.git cd opensbi make CROSS_COMPILEriscv64-linux-gnu- PLATFORMgeneric FW_PICy -j$(nproc)uboot 主线未支持 sudo apt install bison swig flex libpython3.11-d…

有监督学习——线性回归

1. 线性模型 有监督学习是通过已知的样本产生预测模型的学习方法&#xff0c;任何有监督学习模型都可被想象成一个函数&#xff1a; 其中&#xff0c;\(x_1,x_2,x_3…x_n\)是模型的n维的特征值&#xff0c;\(y\)是要预测的目标值/分类&#xff0c;当\(y\)是可枚举的类型时&…

11.docker镜像分层dockerfile优化

docker镜像的分层&#xff08;kvm 链接克隆&#xff0c;写时复制的特性&#xff09; 镜像分层的好处&#xff1a;复用,节省磁盘空间&#xff0c;相同的内容只需加载一份到内存。 修改dockerfile之后&#xff0c;再次构建速度快 分层&#xff1a;就是在原有的基础镜像上新增了服…

探索机器学习:深入理解Sklearn基础

目录 1. 安装与导入Sklearn 2. 数据集的加载与探索 3. 数据预处理 3.1 标准化与归一化 3.2 缺失值处理 4. 数据集划分 5. 选择与训练模型 6. 模型评估 7. 模型优化 7.1 网格搜索 7.2 随机搜索 8. 模型保存与加载 9. 示例项目:鸢尾花分类 10. 更多高级功能 10.1…

2024 年最新 Python 基于百度智能云实现短语音识别、语音合成详细教程

百度智能云语音识别 采用国际领先的流式端到端语音语言一体化建模算法&#xff0c;将语音快速准确识别为文字&#xff0c;支持手机应用语音交互、语音内容分析、机器人对话等场景。百度短语音识别可以将 60 秒以下的音频识别为文字。适用于语音对话、语音控制、语音输入等场景…

CSS实现经典打字小游戏《生死时速》

&#x1f33b; 前言 CSS 中有这样一个模块&#xff1a;Motion Path 运动模块&#xff0c;它可以使元素按照自定义的路径进行移动。本文将为你讲解这个模块属性的使用&#xff0c;并且利用它实现我小时候电脑课经常玩的一个打字游戏&#xff1a;金山打字的《生死时速》。 &…

C++中的拷贝构造函数和赋值运算符重载的定义

在C中&#xff0c;拷贝构造函数&#xff08;Copy Constructor&#xff09;和赋值运算符重载&#xff08;Assignment Operator Overloading&#xff09;是两种特殊的成员函数&#xff0c;它们都与对象的复制操作有关&#xff0c;但在上下文和用途上有所不同。 拷贝构造函数&…

ERP、CRM、MRP、PLM、APS、MES、WMS、SRM系统介绍

一、ERP系统 ERP系统&#xff0c;即企业资源计划&#xff08;Enterprise Resource Planning&#xff09;系统&#xff0c;是一种集成管理软件系统&#xff0c;旨在帮助企业实现资源的有效管理和优化。以下是对ERP系统的详细介绍&#xff1a; 1、定义与功能 ERP是企业资源计划…

小白跟做江科大32单片机之定时器

原理部分 1. 计数器每遇到一个上升沿就会计数值1,。 72MHZ72000000 72000000/65536/655360.0167638063430786132812559.652323555555554 (s) 2. 3. 计数时钟每来一个上升沿&#xff0c;计数值1&#xff0c;自动运行。如果计数值与存储在自动重装载寄存器中的值相等&#…

2024年心理学研究、现代化教育与社会发展国际学术会议(PRMESD 2024)

2024年心理学研究、现代化教育与社会发展国际学术会议(PRMESD 2024) 2024 International Conference on Psychological Research, Modern Education and Social Development 会议地点&#xff1a;南京&#xff0c;中国 网址&#xff1a;www.prmesd.com 邮箱: prmesdsub-con…

Python 学习 第二册 第10章 标准库的模块

-----用教授的方法学习 目录 10.1 模块 10.1.1模块就是程序 10.1.2 模块是用来下定义的 10.1.3 让模块可用 10.1.4 包 10.2 探索模块 10.2.1 模块包含什么 10.2.2 使用 help 获取帮助 10.2.3 使用源代码 10.3 标准库&#xff1a;一些深受欢迎的模块 10.3.1 sys 10…