dts是linux下對於裝置資源的一種描述方式,相對於之前platform的描述方式,可以大大節省linux核心**,主要是驅動描述方面。
dts檔案將被編譯成dtb檔案,與編譯生成的kernel檔案打包在一起,一般放在頭部。
kernel在載入時,會將dtb檔案匯入到記憶體,驅動**使用標準的api訪問dtb資源並載入驅動。
以下是openwrt中對於dtb的分析:
0103-owrtdtb.patch
head.s 加入16kb的dtb空間
--- a/arch/mips/kernel/head.s
+++ b/arch/mips/kernel/head.s
@@ -86,6 +86,9 @@ export(__image_cmdline)
.fill 0x400
#endif /* config_image_cmdline_hack */
+ .ascii "owrtdtb:"
+ export(__image_dtb)
+ .fill 0x4000
__ref
tools/patch-image/src/patch-dtb.c,執行命令為: patch-dtb vmlinux-*** ***.dtb
將dtb檔案拷貝到vmlinux前16kb空間
--- a/arch/mips/ralink/of.c
+++ b/arch/mips/ralink/of.c
@@ -66,6 +66,8 @@ static int __init early_init_dt_find_mem
return 0; }
+extern struct boot_param_header __image_dtb;
+ void __init plat_mem_setup(void)
{ set_io_port_base(kseg1);
@@ -74,7 +76,7 @@ void __init plat_mem_setup(void)
* load the builtin devicetree. this causes the chosen node to be
*/- __dt_setup_arch(__dtb_start);
+ __dt_setup_arch(&__image_dtb);
對於equals和 的理解
很多時候equals和 大家都分不太清楚怎麼樣來使用,今天小編就來教大家怎麼使用 equals比較的是兩個變數的值是否相等 而 則比較的是這個變數的記憶體位址是否相同 打個比方來說 string a new string a string b new string a system.out.prin...
對於new和override的理解
在成功的道路上,你沒有耐心去等待成功的到來,那麼,你只好用一生的耐心去面對失敗。override 和new 在同乙個宣告中使用 new和 override 修飾符是錯誤的。隱藏乙個繼承成員並不被認為是錯誤的,但是會造成編譯器給出警告。為了禁止這個警告,派生類成員的宣告可以包括乙個 new修飾符來指出...
對於函式的整理和理解
函式的呼叫方式有三種,第一種叫傳值呼叫,這種只是單獨把實參的值傳給形參,但是形參值改變時實參值並不會發生改變 這種方式是比較簡單的呼叫方式 第二種是引用這種是把實參形參聯絡起來,意思就是實參和形參實際為乙個量 就和每種物體都有好幾個名字一樣,但卻都是指一種東西,這種呼叫方式彌補了傳值呼叫的確定,這時...