linux驅動之裝置樹

2021-09-27 08:10:11 字數 3330 閱讀 2566

裝置樹語法及內部構成

裝置樹實戰

裝置樹其實是乙個檔案,這個檔案包含很多的節點,這些節點是專用來描述裝置的資訊,包括cpu的資訊,gpio的資訊等。資訊裡面包括很多的屬性。屬性中包括各種值 value,這些 value 是傳遞給核心使用的。核心可以解析出這些檔案資訊,然後給程式設計師使用。

dtb-$(config_arch_exynos) += exynos4210-origen.dtb \ 

exynos4210-sndkv310.dtb \

exynos4412-origen.dtb \

cp arch/arm/boot/dts/exynos4410-origen.dts  arch/arm/boot/dts/exynos4412-fs4412.dts
vim arch/arm/boot/dts/makefile ,在 exynos4410-origen.dtb \ 下新增如下內容

exynos4412-fs4412.dtb

make dtbs
set bootcmd tftp 0x41000000 uimage \; tftp 0x42000000 exynos4410-fs4412.dtb \; bootm 0x41000000 - 0x42000000
dtb使用的過程

裝置樹語法

(1)節點

(2)屬性

(3)根節點

(4)compatible 屬性

(5)reg 屬性

(6)#address-cells 和 #address-siz 屬性

(7)中斷資訊屬性—interrupts 和 interrupts

/ ;

child-node2;

}; node2;

};};

/ ;

intc:interrupt-controller@10140000;

}

對於arm架構,標誌為具體含義 documentation/devicetree/bindings/arm/gic.txt

test_node@123456 ;
#include

#include

#include

#include

#include

#define u32_data_len 4

static

int is_good;

static

int irqno;

irqreturn_t key_irq_handler

(int irqno,

void

*devid)

static

int __init dt_drv_init

(void

);

*///在**中獲取節點的所有資訊

//先把節點獲取到

struct device_node *np =

null

;struct property *prop =

null;

np =

of_find_node_by_path

("/test_node@123456");

if(np)

else

//獲取到節點中的屬性

prop =

of_find_property

(np,

"compatible"

,null);

if(prop)

elseif(

of_device_is_compatible

(np,

"farsight,test"))

else

//獲取到屬性中整數的陣列

u32 regdata[u32_data_len]

;int ret;

ret =

of_property_read_u32_array

(np,

"reg"

,regdata,u32_data_len);if

(!ret)

}else

//讀取屬性中的字串陣列

const

char

*pstr[3]

;int i;

for(i =

0; i <

3; i++

)else

}//屬性值為空,可以用於設定標誌if(

of_find_property

(np,

" testprop,mytest"

,null))

//獲取到中斷的號碼

irqno =

irq_of_parse_and_map

(np,0)

;printk

("irqno = %d\n"

,irqno)

;//驗證中斷號碼是否有效

ret =

request_irq

(irqno,key_irq_handler,irqf_trigger_falling | irqf_trigger_rising,

"key_irq"

,null);

if(ret)

return0;

}static

void __exit dt_drv_exit

(void

)module_init

(dt_drv_init)

;module_exit

(dt_drv_exit)

;module_license

("gpl"

);

linux裝置樹(裝置驅動)

一 裝置樹的簡單概念 裝置樹 由一系列的節點,屬性組成,節點本身包含子節點 屬性 成對出現的名稱和值 裝置樹可描述的資訊 原先大多數被編碼在核心中 它是電路板上cpu,匯流排,裝置組成的樹,bootloader會將這棵樹傳遞給核心,並根據它展開linux核心中的platform device等裝置。...

Linux裝置驅動之《字元裝置驅動》

linux裝置中最大的特點就是裝置操作猶如檔案操作一般,在應用層看來,硬體裝置只是乙個裝置檔案。應用程式可以像操作檔案一樣對硬體裝置進行操作,如open close read write 等。下面是乙個字元裝置驅動程式的簡單實現test.c 模組分析 1.初始化裝置驅動的結構體 struct fil...

Linux裝置驅動之字元裝置驅動

一 linux裝置的分類 linux系統將裝置分成三種基本型別,每個模組通常實現為其中某一類 字元模組 塊模組或網路模組。這三種型別有 字元裝置 字元裝置是個能夠像位元組流 類似檔案 一樣被訪問的裝置,由字元裝置驅動程式來實現這種特性。字元裝置可以通過檔案系統節點來訪問,比如 dev tty1等。這...