新聞中心
Linux操作系統(tǒng)中的設(shè)備樹(Device Tree)是描述硬件細(xì)節(jié)的一種數(shù)據(jù)結(jié)構(gòu),它用于描述操作系統(tǒng)每個子系統(tǒng)中的設(shè)備。設(shè)備樹源文件(.dts或.dtb文件)是一種文本或二進(jìn)制文件,其中包含設(shè)備樹的詳細(xì)描述。Linux內(nèi)核的設(shè)備樹是使用DTSI文件定義的,本文將深入了解DTSI文件對硬件描述和設(shè)備樹的關(guān)系。

成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比南岔網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式南岔網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋南岔地區(qū)。費用合理售后完善,10年實體公司更值得信賴。
DTSI文件是Device Tree Source Include的縮寫,它是用于定義設(shè)備樹中設(shè)備的通用硬件描述文件。通常情況下,軟件開發(fā)人員使用DTSI文件來描述芯片或模塊中所包含的所有設(shè)備。這使得DTSI文件成為設(shè)備樹源文件中非常重要的元素。由于芯片和模塊通常會使用相同的設(shè)備,因此DTSI文件還可以被重復(fù)使用,以避免編寫重復(fù)代碼。
DTSI文件中的語法與常規(guī)的Device Tree Source Files(DTS文件)非常相似,但DTSI文件作為可重用的硬件描述文件,它通常包含較少的具體設(shè)備信息和較多的基礎(chǔ)設(shè)施信息。與DTS文件一樣,DTSI文件的語法由Device Tree Compiler(DTC)工具統(tǒng)一識別。
DTSI文件中的設(shè)備描述通常不是直接的硬件描述,而是包含了指向其他DTSI文件的路徑。這些路徑用來描述硬件層次結(jié)構(gòu),設(shè)備樹編譯器使用這些路徑來自動為每個設(shè)備構(gòu)建設(shè)備樹。
DTSI文件與設(shè)備樹的關(guān)系可以通過一個例子來理解。假設(shè)我們需要為嵌入式設(shè)備設(shè)計一個新的板子,這個板子有多個設(shè)備,比如GPIO、網(wǎng)絡(luò)接口、顯示器等。為了讓操作系統(tǒng)識別這些設(shè)備,我們需要使用設(shè)備樹描述它們。此時,我們可以使用一個DTSI文件來描述通用設(shè)備(比如GPIO),使用另一個DTSI文件來描述特定設(shè)備(比如網(wǎng)絡(luò)接口),并將這些DTSI文件添加到板子的DTS文件中。這樣做可以讓我們重用代碼,而不是每次都從頭編寫硬件描述。
DTSI文件中還可以定義設(shè)備樹的屬性與標(biāo)簽。這些屬性和標(biāo)簽可以使操作系統(tǒng)了解設(shè)備的詳細(xì)情況并進(jìn)行適當(dāng)?shù)尿?qū)動程序匹配。例如,在我們的板子上,我們可以定義GPIO設(shè)備的引腳數(shù)、電壓等級和信號類型等屬性,以便操作系統(tǒng)可以選擇適當(dāng)?shù)腉PIO驅(qū)動程序。
DTSI文件對Linux設(shè)備樹描述非常重要。它提供了硬件描述的通用管理方式,使得設(shè)備樹可以非常靈活地管理硬件信息。DTSI文件的健壯性和可重用性使得它成為嵌入式設(shè)備開發(fā)中不可或缺的組成部分。理解DTSI文件的語法和作用,將有助于更好地利用Linux設(shè)備樹,并能更好地管理硬件資源。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁設(shè)計及定制高端網(wǎng)站建設(shè)服務(wù)!
linux下dts文件中斷號怎么設(shè)置
使用chmod 這個命令來對文件夾修改權(quán)限例如對tmp目錄下面的aaa文件夾修改權(quán)限r(nóng) 是讀權(quán)限 用數(shù)字表示是 4 w 是寫權(quán)叢檔限 用數(shù)字表示是 2x 是執(zhí)行權(quán)限 用睜顫數(shù)字表示是 1chmod 644 /tmp/aaa6代表是所有者權(quán)限滲早亂4 代表是用戶組權(quán)限4代表是其他用戶權(quán)限
編譯linux內(nèi)核設(shè)備樹文件使用什么命令
Linux源碼的arch/powerpc/boot/dts/目錄下存放了很多大弊dts文件,可以作為參考文件。另外dtc編譯器在內(nèi)核源碼2.6.25版畝仔本之后已經(jīng)被包含進(jìn)去。在2.6.26版本之后,生成blob的簡單規(guī)則已經(jīng)加入makefile,如下命令:迅仿汪
$ make ARCH=powerpc canyonlands.dtb
也可以根據(jù)自己的硬件修改好dts文件后,用下面類似命令生成dtb文件。
$ dtc -f -I dts -O dtb -R 8 -S 0x3000 test.dts > mpc836x_mds.dtb
$ mkimage -A ppc -O Linux -T flat_dt -C none -a 0xe 0 -d mpc836x_mds.dtb mpc836x_mds.dtu
如何在ARM Linux上使用FDT和initrd
這文章算是最近工作的備忘。
FDT是ARM
Linux最新的設(shè)備驅(qū)動程序信息表,使用FDT的內(nèi)核,就不用像過去的內(nèi)核那樣,一個板子加一個mach的C文件,所有的設(shè)備信息可以記錄在一個樹狀信息文件里面。
目前這方面資料比較少,我以AM335x處理器為例激嘩洞概括一下FDT的使用:
FDT僅僅是一個信息的目錄和參數(shù)表,要使用某個功能內(nèi)核中還必須有相應(yīng)的驅(qū)動程序代碼
FDT的源文件位置在:arch/arm/boot/dts,例如,TI的Beagle bone black,源文件是arch/arm/boot/dts/am335x_boneblack.dts
FDT在make ARCH=arm的時候就會自動生成,也可用make ARCH=arm
dtbs來生成,例如TI的Beagle bone black生成的文件是arch/arm/boot/dts/am335x_boneblack.dtb,這是一個二進(jìn)制文件
要想新增你自定義的FDT,請修改arch/arm/boot/dts/Makefile,并在相應(yīng)的Kconfig中增加config選項,例如,TI的Beagle
bone black,Kconfig的位置在arch/arm/mach-omap2/Kconfig
FDT的dtb文件由u-boot傳遞給內(nèi)核,u-boot必須把這個文件拷貝到內(nèi)核解壓地址之后的某個位置,確保內(nèi)核解壓的時候不會覆蓋,然后使用“bootm
– ”來啟動內(nèi)核
如果dtb文件不正確,對于3.10以上的內(nèi)核,可能什么顯示都沒有,3.8內(nèi)核,可能就顯示到Uncompressing kernel……done
FDT的編寫規(guī)則說明在Documentation/devicetree/bindings,不同的設(shè)備有相應(yīng)的txt文件說明,其中的“compatible”可以作為關(guān)鍵字搜索驅(qū)動程序的源文件,例如,AM335x的GPIO,用“ti,omap4-gpio”為關(guān)鍵字,可以找到其代碼位于drivers/gpio/gpio-omap.c
FDT可以包明枯含子文件,比如am335x_boneblack.dts就包含了am33xx.dtsi,am335x-bone-common.dtsi
以一個例子來說明編寫規(guī)則,我的板子上,I2C0上掛了一個音頻CODEC,其地址是0x18,型號是TLV320AIC3104IRH。
先找到i2c0節(jié)點的位置,這在arch/arm/boot/dts/am33xx.dtsi中:
i2c0: i2c@44e0b000
{
compatible =
“ti,omap4-i2c”;
#address-cells =
;
#size-cells =
;
ti,hwmods =
“i2c1”;
reg = ;
interrupts =
;
status =
“disabled”;
};
要在這個節(jié)點上掛東西,可以直接在am33xx.dtsi中掛,可以寫成這樣:
i2c0: i2c@44e0b000
{
compatible =
“ti,omap4-i2c”;
#address-cells =
;
#size-cells =
;
ti,hwmods =
“i2c1”;
reg = ;
interrupts =
;
status =
“okay”;
tlv320aic3x: tlv320aic3x@18 {
compatible = “ti,tlv320aic3x”;
reg = ;
status = “okay”;
AVDD-supply = ;
IOVDD-supply = ;
DRVDD-supply = ;
DVDD-supply = ;
};
};
其中compatible字串“ti,tlv320aic3x”是在Documentation/devicetree/bindings里面全文搜索“tlv320aic”獲得的,“tlv320aic3x:
tlv320aic3x@18”遵循的是“標(biāo)識符:名稱@地址”的格式,前面的“i2c0:
i2c@44e0b000”也是這個格式。這里的標(biāo)識符可以在蘆絕包含這個文件的文件或這個文件的其他位置引用,因此,可以使用arch/arm/boot/dts/am335x-boneblack.dts包含arch/arm/boot/dts/am33xx.dtsi,然后在am335x-boneblack.dts里寫:
&i2c0 {
status = “okay”;
tlv320aic3x: tlv320aic3x@18 {
compatible = “ti,tlv320aic3x”;
reg = ;
status = “okay”;
AVDD-supply = ;
IOVDD-supply = ;
DRVDD-supply = ;
DVDD-supply = ;
};
};
&i2c0表示引用了i2c0這個標(biāo)識符,然后把括號里的內(nèi)容掛載到標(biāo)識符下,如果屬性的名字相同,例如status出現(xiàn)兩次,前面是“disabled”后面是“okay”,以后面的為準(zhǔn),引用標(biāo)識符的次數(shù)不受限制。
也許一開始會覺得FDT的工作過程很神秘,但你只要用compatible的字串去全文搜索一下C文件,然后仔細(xì)閱讀一下,就會發(fā)現(xiàn)很簡單,沒過幾分鐘你就可以自定義FDT節(jié)點的屬性了。反倒是這些操作過程我沒找到什么文檔說,比較頭痛,所以我把這些寫出來,希望能給大家?guī)椭?/p>
下面說說initrd,initrd的用處是給內(nèi)核一個初始的基本文件系統(tǒng),用來加載內(nèi)核模塊之類的東西。很多人覺得嵌入式系統(tǒng)不需要initrd,也可以把initrd作為最終的根文件系統(tǒng)。我用initrd是用來校驗真正的根文件系統(tǒng),因為在嵌入式設(shè)備上,無法預(yù)測用戶到底什么時候關(guān)機,可能會造成文件系統(tǒng)問題。
initrd可以用buildroot,像制作正常文件系統(tǒng)一樣做,最后把根下的linuxrc換成一個例如下面這樣的文件:
#!/bin/sh
/bin/echo Now Check SD Card
/in/fsck.ext4 /dev/mmcblk0p5
雖然Documentation/initrd.txt里面說,內(nèi)核會執(zhí)行initrd里面的/in/init,但在我用的linux-3.8.13上,init/do_mounts_initrd.c里面,執(zhí)行的是/linuxrc,不知道是不是文檔沒有更新過來。具體的調(diào)用順序是,kernel_init(init/main.c)
> kernel_init_freeable(init/main.c)
> prepare_namespace(init/do_mounts.c)
> initrd_load(init/do_mounts_initrd.c) > handle_initrd
(init/do_mounts_initrd.c)。
在使用initrd的時候有幾點需要注意的:
不建議在initrd上掛載別的東西,會引起未知的問題,貌似看到個文章說這個,找不到了
因為上面的這條,而且在initrd的時候,內(nèi)核還沒有掛載devtmpfs,因此建議使用靜態(tài)設(shè)備節(jié)點,以AM335x為例(內(nèi)核參數(shù)console=/dev/ttyO0,115200n8),必須的節(jié)點有:
/dev/null
/dev/console
/dev/ttyO0
這些節(jié)點可以用fakeroot之后mknod在buildroot的output/target/dev里創(chuàng)建,除了/dev/console,buildroot會自己創(chuàng)建,其他也可以寫到buildroot的system/device_table.txt里面讓buildroot自動創(chuàng)建:
#
/dev/null
c
–
–
/dev/ttyO0 c
–
–
如果你用的是Atmel的處理器,上面的ttyO0可能是ttyS0,如果是三星的,可能是ttySAC0,而且major和minor也會不一樣,請自行解決。如果你像我一樣要檢驗SD卡,那就還必須加上SD卡的分區(qū)對應(yīng)的節(jié)點。
/linuxrc可以是個程序也可以是個腳本,腳本的話,命令寫絕對路徑,而且記得把/linuxrc的mode改為755
使用initrd只需要用u-boot把buildroot制作的文件系統(tǒng)映像拷貝到內(nèi)存里,然后傳遞initrd=,這樣的參數(shù)給內(nèi)核,例如initrd=0x,8M,最終的root參數(shù)可以不變,例如root=/dev/mmcblk0p5,這表示最終的root是SD卡上擴展分區(qū)中的之一個邏輯分區(qū)。給兩個內(nèi)核參數(shù)的例子:
console=ttyO0,115200n8 root=/dev/mmcblk0p5 initrd=0x,8M vram=16M
consoleblank=0
console=ttyO0,115200n8 initrd=0x,8M root=/dev/nfs rw
nfsroot=192.168.5.226:/home/cdu/nfsroot
ip=192.168.5.222:192.168.5.226:192.168.5.1:255.255.255.0:core335x:eth0:off
vram=16M consoleblank=0
之一個不解釋了,第二個表示使用initrd,同時使用nfsroot。
關(guān)于linux dtsi文件的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
四川成都云服務(wù)器租用托管【創(chuàng)新互聯(lián)】提供各地服務(wù)器租用,電信服務(wù)器托管、移動服務(wù)器托管、聯(lián)通服務(wù)器托管,云服務(wù)器虛擬主機租用。成都機房托管咨詢:13518219792
創(chuàng)新互聯(lián)(www.cdcxhl.com)擁有10多年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗、開啟建站+互聯(lián)網(wǎng)銷售服務(wù),與企業(yè)客戶共同成長,共創(chuàng)價值。
當(dāng)前題目:深入了解LinuxDTSI文件:硬件描述與設(shè)備樹的關(guān)系(linuxdtsi文件)
鏈接分享:http://fisionsoft.com.cn/article/dhciooc.html


咨詢
建站咨詢
