国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

嵌入式linux驅動開發(fā)篇之設備樹

這篇具有很好參考價值的文章主要介紹了嵌入式linux驅動開發(fā)篇之設備樹。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

什么是設備樹?

嵌入式linux驅動開發(fā)篇之設備樹,嵌入式linux,linux,驅動開發(fā),java

設備樹(Device Tree)是一種用于描述嵌入式系統(tǒng)硬件組件及其連接關系的數據結構。它被廣泛用于嵌入式 Linux 系統(tǒng),尤其是針對使用多種不同架構和平臺的嵌入式系統(tǒng)。它是一種與硬件描述相關的中間表示形式,將硬件信息抽象成一種可移植的格式,使得操作系統(tǒng)和引導加載程序能夠在不同的硬件平臺上運行,而無需硬編碼特定的硬件配置信息。

樹狀結構:設備樹是一個層次結構,由節(jié)點和屬性組成。節(jié)點可以有子節(jié)點,形成樹狀結構。
節(jié)點類型:設備節(jié)點(device node)描述硬件組件,屬性(property)提供有關硬件配置的詳細信息。

設備樹的主要作用包括:

描述硬件設備信息:將硬件設備的屬性和配置信息以標準格式描述出來,包括設備類型、地址、中斷等。
實現硬件平臺的可移植性:將硬件描述與操作系統(tǒng)和引導加載程序分離,使得相同的軟件可以在不同的硬件平臺上運行。
簡化內核配置和維護:通過設備樹,內核可以動態(tài)地識別和管理硬件設備,而不需要硬編碼在內核中,簡化了內核的配置和維護工作。

設備樹的一些知識點

DTS、DTB 和 DTC區(qū)別

DTS 是設備樹源碼文件,DTB 是將DTS 編譯以后得到的二進制文件。將.dts 編譯為.dtb需要用到 DTC 工具,DTC 工具源碼在 Linux 內核的 scripts/dtc 目錄下。

在arch/arm/boot/dts/Makefile

dtb-$(CONFIG_SOC_IMX6SLL) += \
imx6sll-lpddr2-arm2.dtb \
imx6sll-lpddr3-arm2.dtb \

在此處添加自己的設備樹文件
要編譯 DTS 文件的話只需要進入到 Linux 源碼根目錄下,然后執(zhí)行如下命令:

make all
#或者
make dtbs

和 C 語言一樣,設備樹也支持頭文件,設備樹的頭文件擴展名為.dtsi,.dtsi 文件用于描述 SOC 的內部外設信息,比如 CPU 架構、主頻、外設寄存器地址范圍。比如串口,SPI等等。imx6ull.dtsi文件部分內容如下

#include <dt-bindings/clock/imx6ul-clock.h>
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/interrupt-controller/arm-gic.h>
#include "imx6ull-pinfunc.h"
#include "imx6ull-pinfunc-snvs.h"
#include "skeleton.dtsi"

/ {
	aliases {
		can0 = &flexcan1;
		can1 = &flexcan2;
		ethernet0 = &fec1;
		ethernet1 = &fec2;
		gpio0 = &gpio1;
		gpio1 = &gpio2;
		gpio2 = &gpio3;
		gpio3 = &gpio4;
		gpio4 = &gpio5;
		i2c0 = &i2c1;
		i2c1 = &i2c2;
		i2c2 = &i2c3;
		i2c3 = &i2c4;
		mmc0 = &usdhc1;
		mmc1 = &usdhc2;
		serial0 = &uart1;
		serial1 = &uart2;
		serial2 = &uart3;
		serial3 = &uart4;
		serial4 = &uart5;
		serial5 = &uart6;
		serial6 = &uart7;
		serial7 = &uart8;
		spi0 = &ecspi1;
		spi1 = &ecspi2;
		spi2 = &ecspi3;
		spi3 = &ecspi4;
		usbphy0 = &usbphy1;
		usbphy1 = &usbphy2;
	};

	cpus {
		#address-cells = <1>;
		#size-cells = <0>;

		cpu0: cpu@0 {
			compatible = "arm,cortex-a7";
			device_type = "cpu";
			reg = <0>;
			clock-latency = <61036>; /* two CLK32 periods */
			operating-points = <
				/* kHz	uV */
				996000	1275000
				792000	1225000
				528000	1175000
				396000	1025000
				198000	950000
			>;
			fsl,soc-operating-points = <
				/* KHz	uV */
				996000	1175000
				792000	1175000
				528000	1175000
				396000	1175000
				198000	1175000
			>;
			fsl,low-power-run;
			clocks = <&clks IMX6UL_CLK_ARM>,
				 <&clks IMX6UL_CLK_PLL2_BUS>,
				 <&clks IMX6UL_CLK_PLL2_PFD2>,
				 <&clks IMX6UL_CA7_SECONDARY_SEL>,
				 <&clks IMX6UL_CLK_STEP>,
				 <&clks IMX6UL_CLK_PLL1_SW>,
				 <&clks IMX6UL_CLK_PLL1_SYS>,
				 <&clks IMX6UL_PLL1_BYPASS>,
				 <&clks IMX6UL_CLK_PLL1>,
				 <&clks IMX6UL_PLL1_BYPASS_SRC>,
				 <&clks IMX6UL_CLK_OSC>;
			clock-names = "arm", "pll2_bus",  "pll2_pfd2_396m", "secondary_sel", "step",
				      "pll1_sw", "pll1_sys", "pll1_bypass", "pll1", "pll1_bypass_src", "osc";
		};
	};
....

設備節(jié)點

設備節(jié)點是Linux系統(tǒng)中一個重要的概念,它是用戶程序和內核驅動之間的紐帶。設備節(jié)點通常位于/dev目錄下,并以文件的形式存在,每個設備節(jié)點都對應著一個特定的設備。通過打開設備節(jié)點,用戶程序可以獲取設備的句柄,從而與設備進行通信和控制。

標準屬性

節(jié)點是由一堆的屬性組成,節(jié)點都是具體的設備,不同的設備需要的屬性不同,用戶可以自定義屬性。除了用戶自定義屬性,有很多屬性是標準屬性。
compatible 屬性
compatible 屬性也叫做“兼容性”屬性,這是重要的屬性。compatible 屬性的值是一個字符串列表,compatible 屬性用于將設備和驅動綁定起來。格式如下

"manufacturer,model"

I.MX6U-ALPHA 開發(fā)板上的音頻芯片采用的歐勝(WOLFSON)出品的 WM8960,sound 節(jié)點的 compatible 屬性值如下:

compatible = "fsl,imx6ul-evk-wm8960","fsl,imx-audio-wm8960";

model 屬性
model 屬性值也是一個字符串,一般 model 屬性描述設備模塊信息。

model = "wm8960-audio";

status 屬性
status 屬性是和設備狀態(tài)有關的,status 屬性值也是字符串。

描述
disabled 表明設備是可操作的
okay 表明設備當前是不可操作的,但是在未來可以變?yōu)榭刹僮鞯模热鐭岵灏卧O備插入以后。至于 disabled 的具體含義還要看設備的綁定文檔
fail 表明設備不可操作,設備檢測到了一系列的錯誤,而且設備也不大可能變得可操作。
fail-sss 含義和“fail”相同,后面的 sss 部分是檢測到的錯誤內容
reg 屬性
reg 屬性的值一般是(address,length)對。reg 屬性一般用于描述設備地址空間資源信息,一般都是某個外設的寄存器地址范圍信息。

ranges 屬性
ranges屬性值可以為空或者按照(child-bus-address,parent-bus-address,length)格式編寫的數字矩陣。
ranges 屬性每個項目由子地址、父地址和地址空間長度
這三部分組成:child-bus-address:子總線地址空間的物理地址,由父節(jié)點的#address-cells 確定此物理地址所占用的字長。parent-bus-address:父總線地址空間的物理地址,同樣由父節(jié)點的#address-cells 確定此物理地址所占用的字長。length:子地址空間的長度,由父節(jié)點的#size-cells 確定此地址長度所占用的字長。

在Linux設備樹中增加設備節(jié)點的步驟通常包括以下幾個步驟:

確定設備信息:包括設備的名稱、兼容性、模型等。這些信息通常在設備規(guī)格書或數據手冊中可以找到。
編輯設備樹源文件:設備樹的信息通常存儲在一個設備樹源文件(.dts)中。你需要打開這個文件,并在適當的位置添加你的設備節(jié)點。設備節(jié)點通常包含設備的名稱、兼容性、模型以及任何特定于設備的屬性或子節(jié)點。
編譯設備樹:一旦你添加了設備節(jié)點并保存了設備樹源文件,你需要使用設備樹編譯器(dtc)將其編譯為設備樹二進制文件(.dtb)。這個文件可以在引導時被內核使用。
更新引導加載程序:需要將新的設備樹二進制文件添加到引導加載程序(如U-Boot)的配置中,以便在引導時加載它。具體的步驟取決于你使用的引導加載程序。
更新內核配置:可能還需要更新內核的配置,以啟用對新設備的支持。這通常涉及編輯內核配置文件(.config),然后重新編譯內核。
測試:最后,需要在目標硬件上測試更改,以確保新設備能夠正確識別并工作。文章來源地址http://www.zghlxwxcb.cn/news/detail-835001.html

到了這里,關于嵌入式linux驅動開發(fā)篇之設備樹的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【嵌入式Linux內核驅動】04_Jetson nano GPIO應用 | 驅動開發(fā) | 官方gpiolib、設備樹與chip_driver

    【嵌入式Linux內核驅動】04_Jetson nano GPIO應用 | 驅動開發(fā) | 官方gpiolib、設備樹與chip_driver

    0.暴露給應用層 應用 解決調試目錄為空的問題 調試信息 1.最簡讀寫文件(在/SYS下) 設備樹 驗證測試 編譯文件 驅動 of_get_named_gpio_flags //獲取設備樹節(jié)點的屬性 gpio_is_valid //判斷是否合法 devm_gpio_request //申請使用gpio,并調用設置pinctrl device_create_file //根據設備樹節(jié)點屬性,創(chuàng)建

    2024年02月07日
    瀏覽(53)
  • 嵌入式Linux(8):字符設備驅動--注冊字符類設備

    雜項設備 注冊雜項設備: 注銷雜項設備: 字符類設備 文件:include/linux/cdev.h 步驟流程: 定義一個cdev結構體。 使用cdev_init函數初始化cdev結構體成員變量。 參數: 第一個:要初始化的cdev結構體 第二個:文件操作集: cdev-ops = fops;//實際就是把文件操作集寫ops 使用cdev_add函數

    2023年04月22日
    瀏覽(24)
  • 【嵌入式Linux學習筆記】platform設備驅動和input子系統(tǒng)

    【嵌入式Linux學習筆記】platform設備驅動和input子系統(tǒng)

    對于Linux這種龐大的操作系統(tǒng),代碼重用性非常重要,所以需要有相關的機制來提升效率,去除重復無意義的代碼,尤其是對于驅動程序,所以就有了platform和INPUT子系統(tǒng)這兩種工作機制。 學習視頻地址:【正點原子】STM32MP157開發(fā)板 platform 驅動框架分為總線、設備和驅動???/p>

    2024年02月07日
    瀏覽(25)
  • 韋東山嵌入式Liunx入門驅動開發(fā)一(Hello 驅動編程、GPIO基礎知識、LED驅動、總線設備驅動模型)

    韋東山嵌入式Liunx入門驅動開發(fā)一(Hello 驅動編程、GPIO基礎知識、LED驅動、總線設備驅動模型)

    本人學習完韋老師的視頻,因此來復習鞏固,寫以筆記記之。 韋老師的課比較難,第一遍不知道在說什么,但是堅持看完一遍,再來復習,基本上就水到渠成了。 看完視頻復習的同學觀看最佳! 基于 IMX6ULL-PRO 參考視頻 Linux快速入門到精通視頻 參考資料 :01_嵌入式Linux應用

    2024年04月25日
    瀏覽(96)
  • 嵌入式Linux驅動開發(fā)之點燈

    嵌入式Linux驅動開發(fā)之點燈

    ? 使用驅動開發(fā)的方式點亮一個LED燈??纯磧烧哂猩秴^(qū)別不? 首先查看原理圖,看看我們的板子上的LED等接在哪一個IO口上面。 好了,看原理圖我們知道LED燈接在芯片的GPIO1的第三個引腳上面,也就是GPIO1_IO03。 先掌握三個名詞 CCM: Clock Controller Module (時鐘控制模塊) IOMUXC : I

    2024年02月01日
    瀏覽(28)
  • 嵌入式Linux開發(fā)-USB驅動

    嵌入式Linux開發(fā)-USB驅動

    哥們馬上就要被裁了,總得整理一下技術方面的積累,準備開始下一輪的面試和找工作之旅了。。。。 通用串行總線(USB)是主機和外圍設備之間的一種連接。 從拓撲上來看,是一顆由幾個點對點的連接構建而成的樹。這些連接是連接設備和集線器(hub)的四線電纜(底線、電源線

    2024年02月20日
    瀏覽(26)
  • 正點原子嵌入式linux驅動開發(fā)——Linux CAN驅動

    正點原子嵌入式linux驅動開發(fā)——Linux CAN驅動

    CAN是目前應用非常廣泛的現場總線之一,主要應用于汽車電子和工業(yè)領域 ,尤其是汽車領域,汽車上大量的傳感器與模塊都是通過CAN總線連接起來的。CAN總線目前是自動化領域發(fā)展的熱點技術之一,由于其高可靠性,CAN總線目前廣泛的應用于工業(yè)自動化、船舶、汽車、醫(yī)療和

    2024年02月06日
    瀏覽(39)
  • 正點原子嵌入式linux驅動開發(fā)——Linux WIFI驅動

    正點原子嵌入式linux驅動開發(fā)——Linux WIFI驅動

    WIFI的使用已經很常見了,手機、平板、汽車等等,雖然可以使用有線網絡,但是有時候很多設備存在布線困難的情況,此時WIFI就是一個不錯的選擇。 正點原子STM32MP1開發(fā)板支持USB和SDIO這兩種接口的WIFI ,本章就來學習一下如何在STM32MP1開發(fā)板上使用USB和SDIO這兩種WIFI。 正點原

    2024年02月05日
    瀏覽(29)
  • 嵌入式Linux驅動開發(fā)——常見框架梳理

    嵌入式Linux驅動開發(fā)——常見框架梳理

    本文主要介紹了Linux驅動開發(fā)中一些常用的驅動框架,platform、input、iic、spi等,硬件平臺使用的是正點原子的imx6ull開發(fā)板。 不管什么框架最后都是要追溯到配置IO的電氣屬性和復用功能 如果要使用外部中斷,設備樹節(jié)點中還需添加相關信息,什么邊沿觸發(fā) 1:module_init和mod

    2024年02月15日
    瀏覽(32)
  • 【IoT】嵌入式Linux開發(fā):網絡設備開發(fā)(測試題)

    目錄 網絡開發(fā) 選擇題 1、路由器工作在哪一層(B)

    2024年02月06日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包