設備樹引入

一、設備樹的基本知識

1、什么是設備樹?為什么會有設備樹?

????????2011年,Linux之父Linus Torvalds發現這個問題后,就通過郵件向ARM-Linux開發社區發了一封郵件,不禁的發出了一句“This whole ARM thing is a f*cking pain in the ass”。之后ARM Linux社區引入了設備樹。為什么LinusTorvalds會爆粗口呢?
????????平臺總線模型是把驅動分成了倆個部分,一部分是device,一部分是driver,設備信息和驅動分離這個設計非常的好。device部分是描述硬件的。一般device部分的代碼會放在內核源碼中arch/arm/plat-xxx和arch/arm/mach-xxx下面。但是隨著Linux支持的硬件越來越多,在內核源碼下關于硬件描述的代碼也越來越多。并且每修改一下就要編譯一次內核。長此以往Linux內核里面就存在了大量“垃圾代碼”,而且非常多,這里說的“垃圾代碼”是關于對硬件描述的代碼。從長遠看,這些代碼對Linux內核本身并沒有幫助,所以相當于Linux內核是“垃圾代碼”。但是并不是說平臺總線這種方法不好。

????????為了解決這個問題,設備樹就被引入到了Linux上。使用設備樹來剔除相對內核來說的“垃圾代碼”,既用設備樹來描述硬件信息,用來替代原來的device部分的代碼。雖然用設備樹替換了原來的device部分,但是平臺總線模型的匹配和使用基本不變。并且對硬件修改以后不必重新編譯內核。直接需要將設備樹文件編譯成二進制文件,在通過bootloader傳遞給內核即可。

????????所以設備樹就是用來描述硬件資源的文件

2、設備樹的基本概念

①為什么叫設備樹?

設備樹是描述硬件的文本文件,因為語法結構像樹一樣。所以叫設備樹.

如下圖:

②基本名詞解釋

<1>DT:DeviceTree //設備樹
<2>FDT:Flattened Device Tree //開放設備樹,起源于OpenFirmware(OF)
<3>DTS:DeviceTree source的縮寫 //設備樹源碼
<4>DTSI:DeviceTree sourcein Clude的縮寫 //通用的設備樹源碼
<5>DTB:DeviceTree Blob的縮寫 //編譯設備樹源碼得到的文件
<6>DTC:DeviceTree Compiler的縮寫 //設備樹編譯器

DTS、DTSI、DTC、DTB之間的關系:

Linux內核通過讀取設備樹的描述文件(通常是.dtb或.dts文件),來構建一個內存中的表示,內核和驅動程序則使用這個表示來識別和配置硬件設備。設備樹文件在編譯時從設備樹源文件(.dts)轉換成二進制形式(.dtb),然后通常被包含在內核映像或者作為獨立文件提供給引導加載程序

補充:

dts????

dts文件是一種ASCII文本格式的設備樹描述文件,此文件適合人類閱讀,主要是給用戶看的。?硬件的相應信息都會寫在.dts為后綴的文件中,每一款硬件可以單獨寫一份xxxx.dts,一般在Linux源碼中存在大量的dts文件,對于?arm 架構可以在arch/arm/boot/dts找到相應的dts。對于rk3399開發板arch/arm/boot/dts/rk3399-nanopi4-common.dtsi中一般會包含一個公共部分的dtsi文件,如下:#include "rk3399-nanopi4-rkisp1.dtsi"

dtsi????

對于一些相同的dts配置可以抽象到dtsi文件中,然后類似于?C 語言的方式可以include到dts文件中

二、編譯設備樹?(DTC編譯器的使用)

DTC編譯器命令格式

編譯設備樹:dtc -I?dts -O dtb -o?xxx.dtb xxx.dts
反編譯設備樹:dtc -I dtb -O?dts -o?xxx.dts xxx.dtb

三、設備樹的基本語法

1、設備樹根節點

根節點是設備樹必須要包含的節點。根節點的名字是/。

/dts-v1/;? ? ? //第一行表示dts文件的版本
/{????????????????//根節點
};

2、設備樹子節點格式

格式:

label:?node-name?@unit-address{
????????properties definitions
????????child nodes

};

舉例:

nodel{????????????????????????//子節點,節點名稱為nodel
????????nodel_child{????????????????//子子節點,節點名稱為nodel_child

????????}
};

注意:同級節點下節點名稱不能相同。不通級節點名稱可以相同??

3、節點名稱

在對節點進行命名的時候,一般要體現設備的類型,比如網口一般命名成ethernet,串口一般命名成uart,對于名稱一般要遵循下面的命令格式。
格式:標簽:名稱@<設備地址>
其中,[標簽]和[@<設備地址>]是可選項,<名稱>是必選項。另外,這里的設備地址沒有實際意義,只是讓節點名稱更人性化,更方便閱讀。
舉例:
uart: serial@02288000
其中,uart就是這個節點標簽,也叫別名,serial@02288000就是節點名稱。?

4、reg屬性

reg屬性可以來描述地址信息。比如寄存器的地址。
reg屬性的格式如下:
reg =<address1?length1?address2 length2 address3 length3...>
舉例:
reg= <0x02200000 0x4000>;

reg= <x022000000x4000
? ? ? ? ? 0x02205000 0x4000>;

5、#address-cell和#size-cells屬性

#address-cell和#size-cells用來描述子節點中的reg信息中的地址和長度信息
舉例:

nodel{
????????#address-cells = <1>;
????????#size-cells = <0>;
???nodel-child {
? ? ? ? ? ?reg = <0>;

????????};

};

6、model屬性

model屬性的值是一個字符串,一般用model描述一些信息。比如設備的名稱,名字等。
舉例1:
model ="wm8960-audio”;
舉例2:
model = "This is Linux board";

7、status屬性

status屬性是和設備的狀態有關系的,status的屬性值是字符串。屬性值有下面幾個狀態可選:

8、compatible屬性

compatible屬性是非常重要的一個屬性。compatible是用來和驅動進行匹配的,匹配成功以后
會執行驅動中的probe函數。

舉例:
compatible ="xunwei”, "xunwei-board";
在匹配的時候會先使用第一個值xunwei進行匹配,如果沒有就會使用第二個值xunwei-board進行匹配。

示例:

9、設備樹特殊節點

aliases

????????特殊節點aliases用來定義別名。定義別名的目的就是為了方便引用節點。當然,除了使用aliases來命名別用,也可以在對節點命名的適合添加標簽來命名別名。
舉例:

aliases{
????????mmc0?= &sdmmc0;
????????mmcl = &sdmmcl;
????????mmc2 = &sdhci;
????????serial0 ="/simple@fe000000/serial@llc500”;

};

chosen

chosen節點用來uboot給內核傳遞參數。重點是bootargs參數。chosen節點必須是根節點的子節點
舉例:

chosen{
????????bootargs = "root=/dev/nfs rw nfsroot=192.168.1.1 console=ttyS0,115200”;?

}

device_type屬性

在某些設備樹文件中,可以看到device_type屬性,device_type屬性的值是字符串,只用于cpu節點或者memory節點進行描述。
舉例1:

memory@30000000{
????????device_type =“memory”;
????????reg =<0x30000000????0x4000000>;

?舉例2:

cpu1: cpu@1{
????????device_type = "cpu”;
????????compatible = "arm,cortex-a35″, "arm, armv8”;
????????reg = <0x0? 0x1>;

};

自定義屬性

設備樹中規定的屬性有時候并不能滿足我們的需求,這時候我們可以自定義屬性。
舉例:

自定義一個管腳標號的屬性pinnum。
pinnum = <0 1 2 3 4>;?

示例:

?

四、DTS基本框架

設備樹由一系列被命名的節點(Node)和屬性(Property)組成,而節點本身可包含子節點。在設備樹中,可描述的信息包括:

·??CPU的數量和類別。

·??內存基地址和大小。

·??總線和橋。

·??外設連接。

·??中斷控制器和中斷使用情況。

·??GPIO控制器和GPIO使用情況。

·??時鐘控制器和時鐘使用情況。

基本上就是畫一棵電路板上CPU、總線、設備組成的樹,Bootloader會將這棵樹傳遞給內核,然后內核可以識別這棵樹,并根據它展開出Linux內核中的platform_device、i2c_client、spi_device等設備,而這些設備用到的內存、IRQ等資源,也被傳遞給了內核,內核會將這些資源綁定給展開的相應的設備。

//一級節點:會展開成platfor_device

//內核會把這個節點展開成平臺設備,設備名是ff720000.xyd-leds

補充:增加設備樹屬性信息,可以自動生成設備端代碼。

對平臺設備驅動模型來說,平臺設備代碼(platform_device.c)不需要實現,被設備樹中設備文件所替代了。

如何添加設備樹?

以rk3399作為例子

kernel-rockchip-nanopi4-linux-v4.4.y/arch/arm64/boot/dts/rockchip/rk3399-nanopi4-common.dtsi

需要添加的硬件資源:

xyd-leds@FF720000{

???? compatible="xyd-rk3399-leds";

???? reg=<0x0 0xFF720000 0x0 0x10000>;

???? reg-names="gpio0-reg-for-leds";

???? led-total=<1>;

????};

?

編譯:在內核源碼的頂層目錄執行以下命令:

make nanopi4-images -j8????

把生成的resource.img 和 kernel.img?燒寫到開發板上。

編寫平臺驅動模型里面的驅動代碼,修改設備樹,編譯內核kernel.img and resource.img文件燒寫到板子上.

最終結果:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/88986.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/88986.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/88986.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【數據標注師】3D標注

目錄 一、 **3D標注知識體系框架**二、 **五階能力培養體系**? **階段1&#xff1a;空間認知筑基&#xff08;2-3周&#xff09;**? **階段2&#xff1a;核心標注技能深化**? **階段3&#xff1a;復雜場景解決方案**? **階段4&#xff1a;領域深度專精? **階段5&#xff1…

華為HN8145V光貓改華為藍色公版界面,三網通用,xgpon公版光貓

咸魚只賣20多元一個&#xff0c;還是xgpon的萬兆貓&#xff0c;性價比不錯哦 除了沒有2.5G網口&#xff0c;其他還行。 改成公版光貓后&#xff0c;運營商是無法納管光貓&#xff0c;無法后臺修改光貓數據及超密。 華為 HN8145V 光貓具有以下特點&#xff1a; 性能方面 高速接…

【LeetCode 熱題 100】438. 找到字符串中所有字母異位詞——(解法二)定長滑動窗口+數組

Problem: 438. 找到字符串中所有字母異位詞 題目&#xff1a;給定兩個字符串 s 和 p&#xff0c;找到 s 中所有 p 的 異位詞 的子串&#xff0c;返回這些子串的起始索引。不考慮答案輸出的順序。 【LeetCode 熱題 100】438. 找到字符串中所有字母異位詞——&#xff08;解法一&…

PAC 學習框架:機器學習的可靠性工程

PAC&#xff08;Probably Approximately Correct&#xff09; 是機器學習理論的核心框架&#xff0c;用于量化學習算法的可靠性。它回答了一個關鍵問題&#xff1a; “需要多少訓練樣本&#xff0c;才能以較高概率學到一個近似正確的模型&#xff1f;” 一、PAC 名稱拆解 術語…

嵌入式C語言數組:數組/字符數組

1. 數組 1.1 一維數組 數組是一串連續的地址&#xff1b; 數組名是地址常量&#xff0c;代表數組的起始地址&#xff1b; sizeof&#xff08;數組名&#xff09; 可得出數組的總內存空間&#xff1b; C 語言對數組不做越界檢查&#xff0c;使用時應注意&#xff1b; 數組不…

變長字節的數字表示法vb224

開始 數字有大有小&#xff0c;用多少字節表示呢&#xff1f; 本文描述的方案&#xff0c;采用變化的長度。vb是varying bytes的意思&#xff0c;224是表示它特征的一個數。 第一版&#xff1a; 每個字節8比特&#xff0c;最高的1比特用來表示“是否連續”&#xff0c;0表示…

ByteMD+CozeAPI+Coze平臺Agent+Next搭建AI輔助博客撰寫平臺(邏輯清楚,推薦!)

背景&#xff1a; 現在主流的博客平臺AI接入不夠完善&#xff0c;如CSDN接入的AI助手不支持多模態數據的交互、稀土掘金的編輯器AI功能似乎還沒能很好接入&#xff08;哈哈哈&#xff0c;似乎在考慮布局什么&#xff1f;&#xff09; 痛點分析&#xff1a; 用戶常常以截圖的形式…

【數據標注師】關鍵詞標注

目錄 一、 **理解關鍵詞標注的核心邏輯**1. **三大標注原則**2. **關鍵詞類型體系** 二、 **四階訓練體系**? **階段1&#xff1a;基礎規則內化**? **階段2&#xff1a;語義濃縮訓練**? **階段3&#xff1a;場景化標注策略**? **階段4&#xff1a;工具效率提升** 三、 **五…

for each循環語句

for each循環語句 for each.....nextFor Each 的案例 for each…next 1、循環對象合集 worksheets workbooks range range("區域")selection (選中的區域)usedrange或者currentregion 返回的單元格區域格式&#xff1a; for each 變量名 in 對象集合(范圍)循環內容…

基于LQR控制器的六自由度四旋翼無人機模型simulink建模與仿真

目錄 1.課題概述 2.系統仿真結果 3.核心程序 4.系統原理簡介 5.參考文獻 6.完整工程文件 1.課題概述 四旋翼無人機因其結構簡單、機動性強和成本低廉等特點&#xff0c;在航拍測繪、物流運輸、災害救援等領域得到廣泛應用。六自由度&#xff08;3維平移3維旋轉&#xff0…

vftp centos 離線部署

install_ftp_offline.sh vsftpd-3.0.2-28.el7.x86_64.rpm #!/bin/bash# 一鍵安裝配置vsftpd腳本&#xff08;開放根目錄&#xff0c;禁用chroot&#xff09;# 安裝vsftpd RPM包 echo "正在安裝vsftpd..." rpm -ivh vsftpd-3.0.2-28.el7.x86_64.rpm if [ $? -ne 0 …

【數據標注】事件標注1

目錄 **一、 深入理解事件標注的核心概念****二、 系統學習&#xff1a;從理論到實踐****1. 吃透標注指南****2. 語言學基礎補充****3. 事件結構解析訓練** **三、 分階段實踐&#xff1a;從簡單到復雜****階段1&#xff1a;基礎標注訓練****階段2&#xff1a;進階挑戰****階段…

在 Ansys Electronics Desktop 中啟用額外的 CPU 內核和 GPU

Ansys Electronics Desktop (AEDT) 可以通過利用多個 CPU 內核和 GPU 加速來顯著縮短仿真時間。但是,啟用其他計算資源除了基本求解器許可證外,還需要適當的高性能計算 (HPC) 許可證。 默認情況下,基本許可證最多允許使用 4 個內核,而無需任何其他 HPC 許可。借助 Ans…

R語言機器學習算法實戰系列(二十六)基于tidymodels的XGBoost二分類器全流程實戰

禁止商業或二改轉載,僅供自學使用,侵權必究,如需截取部分內容請后臺聯系作者! 文章目錄 介紹加載R包數據準備數據探索轉換因子查看屬性相關性配對圖PCA 可視化缺失值、異常值處理 & 特征標準數據分割構建模型與調參模型評估模型可解釋性(變量重要性、SHAP、DALEX)變量…

零基礎langchain實戰一:模型、提示詞和解析器

一&#xff0c;使用python調取大模型api 1&#xff0c;獲取api_key 獲取api_key 在各個大模型的官網中獲取。 2&#xff0c;設置api_key 方式一&#xff1a; 在系統環境中可直接執行python代碼&#xff1a;這里以deepseek為例 import os os.environ["DEEPSEEK_API_…

Pytorch分布式通訊為什么要求Tensor連續(Contiguous)

參考資料&#xff1a; https://github.com/pytorch/pytorch/issues/73515 https://www.cnblogs.com/X1OO/articles/18171700 由于業務原因&#xff0c;需要在Pytorch代碼中使用分布式通訊來把計算負載平均到多張顯卡上。在無數次確認我的業務代碼沒問題之后&#xff0c;我開始把…

關于前端頁面上傳圖片檢測

依賴于前文&#xff0c;linux系統上部署yolo識別圖片,遠程宿主機訪問docker全流程(https://blog.csdn.net/yanzhuang521967/article/details/148777650?spm1001.2014.3001.5501) fastapi把端口暴露出來 后端代碼 from fastapi import FastAPI, UploadFile, File, HTTPExcep…

第十三章---軟件工程過程管理

僅供參考 文章目錄 一、Gantt圖是做什么的。二、軟件配置的概念 一、Gantt圖是做什么的。 Gantt 圖&#xff08;甘特圖&#xff09;是軟件項目管理中用于進度安排和可視化管理的重要工具&#xff0c;主要用于展示任務的時間安排、進度狀態及任務之間的依賴關系 Gantt 圖是一種…

多模態大語言模型arxiv論文略讀(140)

SemiHVision: Enhancing Medical Multimodal Models with a Semi-Human Annotated Dataset and Fine-Tuned Instruction Generation ?? 論文標題&#xff1a;SemiHVision: Enhancing Medical Multimodal Models with a Semi-Human Annotated Dataset and Fine-Tuned Instruc…

模型預測控制專題:無差拍預測電流控制

前言&#xff1a; 為了進一步深入探索電機控制這個領域&#xff0c;找到了一些志同道合的同學一起來進行知識的分享。最近群里投票后續更新內容&#xff0c;票數最多的方向就是模型預測控制&#xff1b;無論這個方向目前是否還是很火&#xff0c;至少應大家需求&#xff0c;工…