嵌入式Linux驅動筆記(九)------dts裝置樹在2440使用
你好!這裡是風箏的部落格,
歡迎和我一起多多交流。
ARM社群一貫充斥的大量垃圾程式碼導致Linus盛怒,因此社群在2011年到2012年進行了大量的工作。ARM Linux開始圍繞Device Tree展開,Device Tree有自己的獨立的語法,它的原始檔為.dts,編譯後得到.dtb,Bootloader在引導Linux核心的時候會將.dtb地址告知核心。之後核心會展開Device Tree並建立和註冊相關的裝置。因此arch/arm/mach-xxx和arch/arm/plat-xxx中大量的用於註冊platform、I2C、SPI板級資訊的程式碼被刪除,而驅動也以新的方式和.dts中定義的裝置結點進行匹配。
Device Tree是一種描述硬體的資料結構,它起源於 OpenFirmware (OF)。所以看到帶有OF 字樣的API函式就要小心了。
這裡 ,我們先看kernel部分:
在arch/arm/boot/dts裡面,發現並沒有關於2440的裝置樹檔案,但是發現2416採用了裝置樹。其中,有dts檔案和dtsi檔案,先說下這兩者關係:
.dts檔案是一種ASCII文字格式的DeviceTree描述。基本上,在ARMLinux內,一個.dts檔案對應一個ARM的machine,一般放置在核心的arch/arm/boot/dts/目錄。由於一個SoC可能對應多個machine(一個SoC可以對應多個產品和電路板),勢必這些.dts檔案需包含許多共同的部分。Linux核心為了簡化,把SoC公用的部分或者多個machine共同的部分一般提煉為.dtsi,類似於C語言的標頭檔案。其他的machine對應的.dts就include這個.dtsi。
所以,我們編寫2440的dts檔案時可以參考s3c2416-smdk2416.dts這個檔案:
cp s3c2416-smdk2416.dts s3c2440.dts
vi Makefile
找到如下:
dtb-$(CONFIG_ARCH_S3C24XX) += \
s3c2416-smdk2416.dtb
修改為:
dtb-$(CONFIG_ARCH_S3C24XX) += \
s3c2440.dtb
接著在核心頂層目錄裡:
make menuconfig
選上 Boot options —> Flattened Device Tree support
最後 make dtbs即可編譯裝置樹(因為arch/arm/configs/s3c2410_defconfig檔案裡CONFIG_ARCH_S3C24XX=y,所以會編譯出s3c2440.dtb檔案)。
接著,是uboot部分:
在uboot裡,如果使用裝置樹進行傳遞引數,為了使能Device Tree,則需要在相應的標頭檔案中巨集定義,
即u-boot-2016.11/include/configs/smdk2440.h檔案新增:
#define CONFIG_OF_LIBFDT
為什麼定義這個呢?
因為在fdt_support.h裡,有一句:
#ifdef CONFIG_OF_LIBFDT
/*各種外部函式宣告*/
#endif
說的是隻有定義了CONFIG_OF_LIBFDT,才能使用關於裝置樹這些的函式。
現在遇到了點問題:http://www.100ask.org/bbs/forum.php?mod=viewthread&tid=18925&extra=
先碼住,還沒成功,,,,,,
待續
相關文章
- 嵌入式Linux驅動筆記(十六)------裝置驅動模型(kobject、kset、ktype)Linux筆記模型Object
- 嵌入式Linux驅動學習筆記(十六)------裝置驅動模型(kobject、kset、ktype)Linux筆記模型Object
- 嵌入式Linux中的LED驅動控制(裝置樹方式)Linux
- 嵌入式Linux中的LED驅動控制(裝置樹方式)(續)Linux
- Linux裝置驅動之字元裝置驅動Linux字元
- Linux驅動開發筆記(四):裝置驅動介紹、熟悉雜項裝置驅動和ubuntu開發雜項裝置DemoLinux筆記Ubuntu
- 【linux】驅動-9-裝置樹外掛Linux
- linux驅動之獲取裝置樹資訊Linux
- 嵌入式Linux驅動筆記(十一)------i2c裝置之mpu6050驅動Linux筆記
- 嵌入式Linux驅動筆記(十三)------spi裝置之RFID-rc522驅動Linux筆記
- 嵌入式Linux中的LED驅動控制(使用多個次裝置號)Linux
- 深入淺出:Linux裝置驅動之字元裝置驅動Linux字元
- 乾坤合一:Linux裝置驅動之塊裝置驅動Linux
- Linux驅動之裝置樹的基礎知識Linux
- 向嵌入式Linux移植實時裝置驅動程式(轉)Linux
- 在Linux中,什麼是裝置驅動程式?如何安裝和解除安裝裝置驅動程式?Linux
- Linux塊裝置驅動Linux
- 蛻變成蝶:Linux裝置驅動之字元裝置驅動Linux字元
- 蛻變成蝶~Linux裝置驅動之字元裝置驅動Linux字元
- ArmSoM系列板卡 嵌入式Linux驅動開發實戰指南 之 字元裝置驅動Linux字元
- 【linux】驅動-8-一文解決裝置樹Linux
- 裝置樹下的 LED 驅動實驗
- 字元裝置驅動 —— 字元裝置驅動框架字元框架
- 【linux】驅動-7-平臺裝置驅動Linux
- Linux裝置驅動程式 (轉)Linux
- Linux裝置驅動程式學習----1.裝置驅動程式簡介Linux
- 乾坤合一:Linux裝置驅動之USB主機和裝置驅動Linux
- 嵌入式Linux驅動筆記(十七)------詳解V4L2框架(UVC驅動)Linux筆記框架
- 【linux】驅動-6-匯流排-裝置-驅動Linux
- linux 裝置驅動基本概念Linux
- Linux裝置驅動探究第1天----spi驅動(1)Linux
- Linux裝置驅動程式學習之分配記憶體Linux記憶體
- 嵌入式Linux中platform平臺裝置模型的框架(實現LED驅動)LinuxPlatform模型框架
- linux裝置驅動編寫入門Linux
- linux裝置驅動編寫基礎Linux
- LINUX下的裝置驅動程式 (轉)Linux
- 《Linux裝置驅動開發詳解(第2版)》——第1章Linux裝置驅動概述及開發環境構建1.1裝置驅動的作用Linux開發環境
- 嵌入式Linux驅動筆記(十五)------編譯使用tslib支援LCD觸控式螢幕Linux筆記編譯