1. 程式人生 > >裝置樹(一)linux核心主線瞭解dts

裝置樹(一)linux核心主線瞭解dts

由這張圖可見,如果included file中的某項,被including file檔案定義了,則會使用後者的定義,也就是使用更上層更新的定義;如果沒有被定義,則新增進入。

1)bindings是device tree裡面可已包含的specific types and classes of devices。
2)compatible特徵描述了節點編譯的specific binding;
3)當為一個裝置建立新的device tree時,應該建立a binding來描述裝置的全部細節。

=============================================
問題四:在哪裡可以找到Device Tree的文件呢?

1)所有可被核心識別的Device Tree bindings在文件Documentation/devicetree/bindings裡面;
2)每個binding文件描述了哪些properties可以被接受,可以使用哪些值,哪些特徵是必須的,哪些是可選的;
3)所有新的Device Tree bindings必須讓程式碼維護者稽核,提交到devicetree
[email protected]
上。這用來保證它們的正確性和一致性。

=============================================
問題五:Device Tree中的常見關鍵字含義是什麼?

Device Tree organization: top-level nodes
在裝置的最頂層節點上,一般可以發現如下這些:
cpus:描述了系統的CPU
memory:定義了RAM的地址和大小
chosen:定義了boot時被系統韌體選擇或定義的引數;可用來傳遞kernel command line;
aliases:定義了certain nodes的shotcuts;
一個或多個匯流排定義;
一個或多個板上裝置定義;

下面是am33xx.dtsi中的定義:

/ {
        compatible = "ti,am33xx";
        interrupt-parent = <&intc>;

        aliases {
                i2c0 = &i2c0;
                i2c1 = &i2c1;
                i2c2 = &i2c2;
                serial0 = &uart0;
                serial1 = &uart1;
                serial2 = &uart2;
                serial3 = &uart3;
                serial4 = &uart4;
                serial5 = &uart5;
                d_can0 = &dcan0;
                d_can1 = &dcan1;
                usb0 = &usb0;
                usb1 = &usb1;
                phy0 = &usb0_phy;
                phy1 = &usb1_phy;
                ethernet0 = &cpsw_emac0;
                ethernet1 = &cpsw_emac1;
        };

        cpus {
                #address-cells = <1>;
                #size-cells = <0>;
               
[email protected]
{
                        compatible = "arm,cortex-a8";
                        device_type = "cpu";
                        reg = <0>;
                        
                        /*
                         * To consider voltage drop between PMIC and SoC,
                         * tolerance value is reduced to 2% from 4% and
                         * voltage value is increased as a precaution.
                         */
                        operating-points = <
                                /* kHz    uV */
                                720000  1285000
                                600000  1225000
                                500000  1125000
                                275000  1125000
                        >;
                        voltage-tolerance = <2>; /* 2 percentage */

                        clocks = <&dpll_mpu_ck>;
                        clock-names = "cpu";
                        
                        clock-latency = <300000>; /* From omap-cpufreq driver */
                };
        };

        pmu {
                compatible = "arm,cortex-a8-pmu";
                interrupts = <3>;
        };

        /*
         * The soc node represents the soc top level view. It is used for IPs
         * that are not memory mapped in the MPU view or for the MPU itself.
         */
        soc {
                compatible = "ti,omap-infra";
                mpu {
                        compatible = "ti,omap3-mpu";
                        ti,hwmods = "mpu";
                };
        };


    /* ...... */

};

從上面的程式碼裡面可以找出四個compatible,分別是:
top: compatible = "ti,am33xx";
cpu0: compatible = "arm,cortex-a8";
pmu: compatible = "arm,cortex-a8-pmu";
soc: compatible = "ti,omap-infra";

怎樣使用compatible呢?
方法一是用來匹配DT_MACHINE結構體中的dt_compat域,方法二是使用of_machine_is_compatible函式。

在匯流排中,一般要定義compatile、#address-cells、#size-cells、ranges,比如:

       i2c0:
[email protected]
{
                compatible = "ti,omap4-i2c";
                #address-cells = <1>;
                #size-cells = <0>;
                ti,hwmods = "i2c1";
                reg = <0x44e0b000 0x1000>;
                interrupts = <70>;
                status = "disabled";
        };

=============================================
問題六:有關DT的策略,你應該瞭解的~

DT是一種硬體描述,而不是一種配置。
它應該描述硬體的構成,和硬體工作的方式;
它不應該描述那種硬體配置你更加喜歡;
例如:
    你可以在DT中描述是否硬體配置支援DMA;
    但是你不要在DT中描述你是否想要DMA。

1)DT獨立於OS,它也需要非常穩定;
2)最初的設想是,DTBs由生產廠家燒寫進晶片中,使用者直接安裝系統就好了;
3)當Device Tree binding被定義,並且在DTBs使用之後,它就不能再改變,但可以擴充套件;
4)這意味著Device Tree binding是核心的二進位制程式介面(ABI),它需要same care;
5)但是核心開發者意識到了這個很難達到,並且會減慢驅動程式的整合:
    ARM Kernel Mini-submit discussions放鬆了這些限制;
    未來在Kernel Summit時會有additional discussion;

Basic guidelines for binding design:
1) A precise compatible string is better than a vague one.
2) Do not encode too much hardware details in the DT.

相關推薦

裝置linux核心主線瞭解dts

由這張圖可見,如果included file中的某項,被including file檔案定義了,則會使用後者的定義,也就是使用更上層更新的定義;如果沒有被定義,則新增進入。 1)bindings是device tree裡面可已包含的specific types and classes of devices。

裝置linux核心頂層am335x-evm.dts

瞭解基本的dts知識之後,就可以為編寫自己的dts檔案了。Forlinx的OK335xD核心板和底板包含的資源有NANDFLASH、SDRAM、MMC、LCD、UART、USB、ETHERNET等等,因此dts檔案必須要提供對它們正確的描述。第一步,複製相近硬體的dts檔案

【原創】IP攝像頭技術縱覽---linux 核心編譯,USB攝像頭裝置識別

IP攝像頭技術縱覽(一)— linux 核心編譯,USB攝像頭裝置識別 開始正文之前先來認識一下我的開發環境: 系統:ubuntu 10.04 開發板:AT91SAM9260 + Linux-2.6.30 USB攝像頭:UVC無驅攝像頭(著手開發時只

Linux核心學習筆記——Linux核心簡介

  Unix系統業已演化成一個具有相似應用程式程式設計介面(API),並且基於相似設計理念的作業系統家族。 1、Unix的歷史   Unix是從貝爾實驗室的一個失敗的多使用者作業系統Multics中涅槃而生的。 時間 事件 19

ROS CAN匯流排裝置接入Linux動態庫的顯式呼叫

前提: (1),如果在libpcan安裝正常的話,那麼可以用以下命令查詢到libpcan.so ls /usr/lib/libpcan* 查詢到方可進行api載入。 (2),確保CMakeList.txt 當前目標檔案已加入add_executable...;target_

Linux裝置驅動————塊裝置的結構及磁碟的結構

塊裝置的結構及磁碟的結構 1、扇區 磁碟上的每個磁軌被等分成若干個弧段,這些弧段便是磁碟的扇區。磁碟驅動器在向磁碟讀寫資料時,都是以扇區為單位。一般為512個位元組,但也有1024或者

tiny4412學習(四)之移植linux-裝置1裝置基礎知識及GPIO中斷

#include <linux/init.h> #include <linux/module.h> #include <linux/platform_device.h> #include <linux/gpio.h> #include <linux/of.

linux下的塊裝置驅動

塊裝置的驅動比字符裝置的難,這是因為塊裝置的驅動和核心的聯絡進一步增大,但是同時塊裝置的訪問的幾個基本結構和字元還是有相似之處的。 有一句話必須記住:對於儲存裝置(硬碟~~帶有機械的操作)而言,調整讀寫的順序作用巨大,因為讀寫連續的扇區比分離的扇區快。 但是同時:SD卡和

原創Linux核心升級全過程 手把手教你次成功(2.4.20-8到2.6.18)

Linux核心升級全過程 手把手教你一次成功(2.4.20-8到2.6.18)  ============================= 時間:2007-01-08作者:飄揚首發:http://www.piaoyang.org/blog Q Q: 47720194郵箱:p

監督式學習 -- 分類決策

cte 求解 分支 基本概念 tracking 它的 解決 mat 這就是 決策樹(decision tree)是一種基本的分類與回歸方法。其表示的樹型結構,能夠覺得是if-else規則的集合。基本的長處是分類可讀性好,速度快。一般會有三個步驟:特征選擇、決策樹的生成

數據結構之二叉

reorder system style 序列 urn creat 編寫程序 space ont 設計和編寫程序,按照輸入的遍歷要求(即先序、中序和後序)完成對二叉樹的遍歷,並輸出相應遍歷條件下的樹結點序列。 1 //遞歸實現 2 #include

Linux系統管理Linux系統安裝與修復

linux系統安裝與修復一. Linux多種安裝方式與應用軟件安裝1. Linux的硬盤安裝方式(1) 復制Linux的ISO文件到硬盤某個分區(2) 用Linux安裝啟動盤啟動/DOS啟動盤啟動計算機註: DOS啟動盤中必須要存放加載Linux系統的工具及Linux內核和initrd映像文件,主要文件包括:

Linux用戶管理Linux系統概述

linuxLinux系統概述一. 認識Linux1.Linux的性質Linux為一種源碼公開的自由軟件,是一種真正多任務和多用戶的網絡操作系統。Linux的多用戶和多任務、同時開設多個用戶終端、可以由用戶同時運行多個程序 2. Linux的發展歷史(1) UNIX和Linux的發展:-1968年 美國的k

Linux系統管理Linux設備和內核管理

linux設備和內核管理一. 設備管理概述1.Linux設備的分類字符設備(c):以字符為單位,傳輸速率較低,無需緩沖區。塊設備(b):以數據塊為單位組織和傳輸數據,需要建立緩沖區網絡設備(s):一種通過SOCKET接口進行主機通信的設備2.設備文件(1)功能用於用戶訪問設備進行輸入和輸出操作(2)常見的設

Skynet服務器框架 Linux下的安裝和啟動

進行 harbor 的人 新源 中心 -a 編譯 加載模塊 問題 根據雲風博客的描述,Skynet 的核心功能就是解決一個問題: 把一個符合規範的 C 模塊,從 動態庫(so文件)中啟動起來,綁定一個永不重復(即使模塊退出)的數字id做為其 handle。模塊 被稱為

大數據學習linux基礎

info spa 包含 目的 創建 http -- 刪除 family 知識體系: 一、Linux基礎 二、Hadoop的背景知識與起源 三、搭建Hadoop環境 四、Apache Hadoop的體系結構 五、HDFS 六、MapReduce 七、MapReduce編

linux常用命令linux開關機、重啟以及文本界面與圖形界面互換

調用 虛擬 界面切換 use entos span 常用 run 現在 1.開關機 reboot 重啟: shutdown [-efFhknr][-t 秒數][時間][警告信息] 關機: shutdown [-efFhknr][-t 秒數][時間][警告信息] 關機:

軟件性能測試技術----Linux服務器性能

bsp 分析 處理方法 性能測試 linux ron j2e 跳轉 實時 全圖: 測試目的: 測試範圍&性能指標: 測試與生產環境服務器配置不同的處理方法: 實時CPU監控: 實時內存監控: 實時網絡監控: 實時磁盤監控: 萬能命令: Linux

Admin——Linux簡介與簡單命令

linux centOS linux簡單命令 一、RHEL 與CentOS的區別 RHEL是紅帽公司提供的商業版Linux系統,若要獲取DVD鏡像、安全更新等技術服務支持,一般需要付費訂閱;不過構成RHEL系統的各種軟件包都是基於GPL開源協議免費發布的。 CentOS

Linux實操之——權限、任務調度、磁盤分區

完成 sql數據庫 時間 特定 myshell 任務定義 磁盤 屬於 rwx權限 1. 權限 1.1 查看權限 通過ls -l命令可以看到文件的詳細信息 下面以一條信息解釋各個位置字符的作用 -rwxr--r--. 1 root root 32 6月