導航:首頁 > 器材知識 > 如何在設備樹加節點

如何在設備樹加節點

發布時間:2024-05-01 23:46:11

1. linux驅動開發設備樹和匯流排之間的關系

在 Linux 系統中,設備樹(Device Tree)是一種數據結構,它用於描述硬體結構,幫助內核在啟動時確定硬體設備的位置和如何使用它們。在設備樹中,節點表示硬體設備,而邊表示設備之間的關系。
匯流排(Bus)是用於在計算機系統中傳輸數據的通道。它通常是一組連接設備的線路,並允許設備之間交換數據。在 Linux 中,匯流排也在設備樹中表示為節點,並且設備節點與匯流排節點之間存在邊。
因此,在 Linux 系統中,設備樹用於描述硬體結構,其中包含設備和匯流排,以及它們之間的關系。在驅動程序開發中,開發人員通常使用設備樹來確定特定設備的位置和如何與其通信。

2. 如何修改設備樹中的電源信息

首先,按照yocto 查詢方法中的dts查詢的方法找到對應的dts文件,或者在BSP版本、設備樹、config文件對照表 / BSP version, device tree, config file cross reference table中查找。如果在 imx6qdl-phytec-peb-wlbt-01.dtsi 文件中,修改了 imx6dl.dtsi 中的一個配置,則該配置由 imx6qdl-phytec-peb-wlbt-01.dtsi 中的配置為准。同樣的道理,該文件的後面也是對其他文件中的一些配置進行一些修改。

3. 璁懼囨爲鍩烘湰璇娉曞強灞炴у垎鏋

鍦ㄧ‖浠朵笘鐣屼腑錛岃懼囨爲錛圖evice Tree錛夊氨鍍忎竴搴х粨鏋勫寲鐨勬ˉ姊侊紝榪炴帴鐫鎿嶄綔緋葷粺涓庣‖浠躲傚畠鏄涓縐嶅己澶х殑鏁版嵁妯″瀷錛屼互C璇璦緇撴瀯浣撶殑褰㈠紡錛屼負Linux鍐呮牳鍒濆嬪寲璁懼囨彁渚涗簡鍏抽敭淇℃伅銆傝╂垜浠涓璧鋒帰緔㈠畠鐨勮搗婧愩侀噸瑕佹т互鍙婂唴鏍鎬腑涓嶅彲鎴栫己鐨勬枃浠躲


鑷2011騫磋搗錛岃懼囨爲鍦ˋRM Linux鍐呮牳涓宕闇插ご瑙掞紝瀹冪殑寮曞叆鏄涓轟簡綆鍖栦唬鐮佺$悊錛岃В鍐沖唴鏍3.x涔嬪墠騫沖彴鏂囦歡鎻忚堪紜浠剁殑鍐椾綑闂棰樸傜幇鍦錛岃懼囨爲鎴愪負浜嗛┍鍔ㄧ▼搴忎笌紜浠朵氦浜掔殑鏍稿績緇勪歡錛屾棤璁烘槸dts錛圖evice Tree Source錛屾簮鏂囨湰錛夌殑ASCII鏂囨湰鎻忚堪錛岃繕鏄緙栬瘧鍚庣殑dtb錛圖evice Tree Blob錛屼簩榪涘埗鏂囦歡錛夛紝閮藉湪鏋勫緩鍜岀淮鎶ょ‖浠惰懼囩殑鐢熸佺郴緇熶腑鍙戞尌鐫鍏抽敭浣滅敤銆


璁懼囨爲鍩虹璇娉


璁懼囨爲鐢變竴緋誨垪鑺傜偣鏋勬垚錛屾瘡涓鑺傜偣閮芥湁鍏剁嫭鐗圭殑鍚嶇О瑙勫垯銆傝妭鐐瑰悕鐢卞瓧絎︺佹暟瀛楀拰鈥-鈥濈粍鎴愶紝闀垮害闄愬埗鍦31涓瀛楃︿互鍐咃紝閫氬父鍙嶆槧鍑鴻懼囩被鍨嬶紝鑰寀nit-address鍒欐爣璁拌懼囩殑鐗╃悊浣嶇疆銆備緥濡傦細


鑺傜偣鎿嶄綔

鑺傜偣鏌ユ壘鑹烘湳

閫氳繃鑺傜偣鐨刢ompatible灞炴э紙濡傗渄avicom,dm9000鈥濓級錛岄┍鍔ㄧ▼搴忓彲浠ョ簿紜鍖歸厤璁懼囧拰椹卞姩銆俛ddress灞炴х敤浜庢弿榪板湴鍧錛屽#address-cells鍜#size-cells瀹氫箟浜嗗瓙鑺傜偣reg灞炴х殑鍦板潃鍗曞厓鍜岄暱搴︺俰nterrupt灞炴у垯綆$悊涓鏂淇″彿錛岄氳繃interrupt-parent鍜宨nterrupts鏉ラ厤緗涓鏂鎺у埗鍣ㄣ


涓句釜渚嬪瓙錛屽綋鎻忚堪鐗囬夊拰鍦板潃鏄犲皠鏃訛紝濡傜墖閫0鍋忕Щ0鏄犲皠鍒癈PU鍦板潃絀洪棿0x10100000~0x10110000錛屼腑鏂鎺у埗鍣ㄧ殑璁劇疆閫氳繃#interrupt-cells鏉ュ畾涔変腑鏂鎻忚堪絎︾殑緇撴瀯銆


GPIO鎺у埗鍣ㄧ殑鐗瑰埆涔嬪


GPIO鎺у埗鍣ㄧ殑綆$悊閫氳繃gpio-controller灞炴у0鏄庯紝#gpio-cells鍒欏畾涔変簡GPIO鑺傜偣灞炴х殑鍗曞厓鍐呭癸紝鍖呮嫭寮曠敤GPIO鑺傜偣鍒鍚嶃佹爣鍙峰拰宸ヤ綔妯″紡銆傚湪鐗╄仈緗戠殑澶嶆潅涓栫晫閲岋紝姝g『鐞嗚В鍜屼嬌鐢ㄨ繖浜涘睘鎬ф槸鍏抽敭錛屼互紜淇濊懼囩殑楂樻晥榪愪綔鍜屽伐璧勫為暱銆

4. linux鍔犺澆dts鐨勬椂鍊欎細鍒涘緩璁懼囪妭鐐瑰悧

From:http://m.blog.csdn.net/blog/liliyaya/9188193

1. 鍦\kernel\of\fdt.c 涓鏈夊備笅鍒濆嬪寲鍑芥暟 娉ㄩ噴涓婏細灞曞紑璁懼囨爲錛屽壋寤篸evice_nodes鍒板叏灞鍙橀噺allnodes涓

void __init unflatten_device_tree(void)
{
__unflatten_device_tree(initial_boot_params, &allnodes,
early_init_dt_alloc_memory_arch);

/* Get pointer to "/chosen" and "/aliasas" nodes for use everywhere */
of_alias_scan(early_init_dt_alloc_memory_arch);
}
unflatten_device_tree鍑芥暟琚玸etup_arch鍑芥暟璋冪敤錛
鍥犱負鎴戜滑浣跨敤寰楁槸arm騫沖彴鎵浠ュ瓨鍦\kernel\arch\arm\kernel\setup.c涓
void __init setup_arch(char **cmdline_p)
{
unflatten_device_tree()
}

setup_arch鍑芥暟鍦╧ernel鍚鍔ㄦ槸琚璋冪敤錛屽備笅鍚鍔╧ernel瀛樺湪\kernel\init\main.c涓
asmlinkage void __init start_kernel(void)
{
setup_arch(&command_line);
}

榪欎簺宸ヤ綔瀹屾垚瑙f瀽DTS鏂囦歡銆備繚瀛樺埌鍏ㄥ矓閾捐〃allnodes涓銆

2銆佸湪makefile涓鏈夎繖孌佃瘽鏉ョ紪璇慸ts鏂囦歡錛

$(obj)/A20%.dtb: $(src)/dts/A20%.dts FORCE
$(call if_changed_dep,dtc)

$(obj)/A68M%.dtb: $(src)/dts/A68M%.dts FORCE
$(call if_changed_dep,dtc)

鍜.c鏂囦歡鐢熸垚.o鏂囦歡涓鏍 鍥炵敓鎴.dtb鏂囦歡銆傚湪
/home/liyang/workspace/SZ_JB-mr1-8628-bsp-1012/out/target/proct/msm8226/obj/KERNEL_OBJ/arch/arm/boot
鐩褰曚笅錛屼笌zimage涓涓鐩褰曘

3銆
鍦 board-8226.c涓鏈夊垵濮嬪寲鍑芥暟-->鍚鍔ㄨ嚜鍔ㄦ帀鐢
void __init msm8226_init(void)
{
of_platform_populate(NULL, of_default_bus_match_table, adata, NULL);
}

of_platform_populate鍦╧ernel\driver\of\platform.c涓瀹氫箟錛屽洖鏌ヨ

root = root ? of_node_get(root) : of_find_node_by_path("/");
for_each_child_of_node(root, child)
{
rc = of_platform_bus_create(child, matches, lookup, parent, true);
if (rc)
break;
}
of_node_put(root);

鍦ㄨ繖閲岀敤鍒板緱鍑芥暟of_find_node_by_path浼氭渶緇堣皟鐢ㄥ埌kernel\driver\of\base.c涓寰楀嚱鏁
struct device_node *of_find_node_by_path(const char *path)
{
閬嶅巻絎1姝ヤ腑寰梐llnodes鎵懼埌鏍硅妭鐐
}

of_platform_bus_create()鍑芥暟涓鍒涘緩寰楀唴瀹瑰瓨鍦ㄤ簡 adata涓銆

浠ヤ笅鍐呭逛負杞杞斤細

錛2錛変嬌鐢―TS娉ㄥ唽鎬葷嚎璁懼囩殑榪囩▼

浠ラ珮閫8974騫沖彴涓轟緥錛屽湪娉ㄥ唽i2c鎬葷嚎鏃訛紝浼氳皟鐢ㄥ埌qup_i2c_probe()鎺ュ彛錛岃ユ帴鍙g敤浜庣敵璇鋒葷嚎璧勬簮鍜屾坊鍔爄2c閫傞厤鍣ㄣ傚湪鎴愬姛娣誨姞i2c閫傞厤鍣ㄥ悗錛屼細璋冪敤of_i2c_register_devices()鎺ュ彛銆傛ゆ帴鍙d細瑙f瀽i2c鎬葷嚎鑺傜偣鐨勫瓙鑺傜偣錛堟寕杞藉湪璇ユ葷嚎涓婄殑i2c璁懼囪妭鐐癸級錛岃幏鍙杋2c璁懼囩殑鍦板潃銆佷腑鏂鍙風瓑紜浠朵俊鎮銆傜劧鍚庤皟鐢╮equest_mole()鍔犺澆璁懼囧瑰簲鐨勯┍鍔ㄦ枃浠訛紝璋冪敤i2c_new_device()錛岀敓鎴恑2c璁懼囥傛ゆ椂璁懼囧拰椹卞姩閮藉凡鍔犺澆錛屼簬鏄痙rvier閲岄潰鐨刾robe鏂規硶灝嗚璋冪敤銆傚悗闈㈡祦紼嬪氨鍜屼箣鍓嶄竴鏍蜂簡銆
綆鑰岃█涔嬶紝Linux閲囩敤DTS鎻忚堪璁懼囩‖浠朵俊鎮鍚庯紝鐪佸幓浜嗗ぇ閲忔澘鏂囦歡鍨冨溇淇℃伅銆侺inux鍦ㄥ紑鏈哄惎鍔ㄩ樁孌碉紝浼氳В鏋怐TS鏂囦歡錛屼繚瀛樺埌鍏ㄥ矓閾捐〃allnodes涓錛屽湪鎺夌敤.init_machine鏃訛紝浼氳窡鎹產llnodes涓鐨勪俊鎮娉ㄥ唽騫沖彴鎬葷嚎鍜岃懼囥傚煎緱娉ㄦ剰鐨勬槸錛屽姞杞芥祦紼嬪苟涓嶆槸鎸夋壘浠庢爲鏍瑰埌鏍戝彾鐨勬柟寮忛掑綊娉ㄥ唽錛岃屾槸鍙娉ㄥ唽鏍硅妭鐐逛笅鐨勭涓綰у瓙鑺傜偣錛岀浜岀駭鍙婁箣鍚庣殑瀛愯妭鐐規殏涓嶆敞鍐屻侺inux緋葷粺涓嬬殑璁懼囧ぇ澶氶兘鏄鎸傝澆鍦ㄥ鉤鍙版葷嚎涓嬬殑錛屽洜姝ゅ湪騫沖彴鎬葷嚎琚娉ㄥ唽鍚庯紝浼氭牴鎹產llnodes鑺傜偣鐨勬爲緇撴瀯錛屽幓瀵繪壘璇ユ葷嚎鐨勫瓙鑺傜偣錛屾墍鏈夌殑瀛愯妭鐐瑰皢琚浣滀負璁懼囨敞鍐屽埌璇ユ葷嚎涓娿

5. 如何在Yocto中使用自己的設備樹dts和內核配置

LinuxandtheDeviceTreeLinux內核設備樹數據使用模型。OpenFirmwareDeviceTree(DT)是一個數據結構,也是一種描述硬體的語言。准確地說,它是一種能被操作系統解析的描述硬體的語言,這樣操作系統就不需要把硬體平台的細節在代碼中寫死。從結構上來說,DT是一個樹形結構,或者有名結點組成的非循環圖,結點可能包含任意數量的有名屬性,有名屬性又可以包含任意數量的數據。同樣存在一種機制,可以創建從一個結點到正常樹形結構之外的鏈接。從概念上講,一套通用的使用方法,即bindings。Bindings定義了數據如何呈現在設備樹中,怎樣描述典型的硬體特性,包括數據匯流排,中斷線,GPIO連接以及外設等。盡可能多的硬體被描述從而使得已經存在的bindings最大化地使用源代碼,但是由於屬性名和結點名是簡單字元串,可以通過定義新結點和屬性的方式很方便地擴展已經存在的bindings或者創建一個新的binding。在沒有認真了解過已經存在的bindings的情況下,創建一個新的binding要慎之又慎。對於I2C匯流排,通常有兩種不同的,互不相容的bindings出現,就是因為新的binding創建時沒有研究I2C設備是如何在當前系統中被枚舉的。1.歷史略2.數據模型請參考DeviceTreeUsage章節2.1HighLevelView必須要認識到的是,DT是一個描述硬體的數據結構。它並沒有什麼神奇的地方,也不能把所有硬體配置的問題都解決掉。它只是提供了一種語言,將硬體配置從LinuxKernel支持的boardanddevicedriver中提取出來。DT使得board和device變成數據驅動的,它們必須基於傳遞給內核的數據進行初始化,而不是像以前一樣採用hardcoded的方式。觀念上說,數據驅動平台初始化可以帶來較少的代碼重復率,使得單個內核映像能夠支持很多硬體平台。Linux使用DT的三個主要原因:1)平台識別(PlatformIdentification)2)實時配置(RuntimeConfiguration)3)設備植入(DevicePopulation)2.2平台識別第一且最重要的是,內核使用DT中的數據去識別特定機器。最完美的情況是,內核應該與特定硬體平台無關,因為所有硬體平台的細節都由設備樹來描述。然而,硬體平台並不是完美的,所以內核必須在早期初始化階段識別機器,這樣內核才有機會運行特定機器相關的初始化序列。大多數情況下,機器識別是與設備樹無關的,內核通過機器的核心CPU或者SOC來選擇初始化代碼。以ARM平台為例,setup_arch()會調用setup_machine_fdt(),後者遍歷machine_desc鏈表,選擇最匹配設備樹數據的machine_desc結構體。它是通過查找設備樹根結點的compatible屬性並與machine_desc->dt_compat進行比較來決定哪一個machine_desc結構體是最適合的。Compatible屬性包含一個有序的字元串列表,它以確切的機器名開始,緊跟著一個可選的board列表,從最匹配到其他匹配類型。以TIBeagleBoard的compatible屬性為例,BeagleBoardxMBoard可能描述如下:compatible="ti,omap3-beagleboard","ti,omap3450","ti,omap3";compatible="ti,omap3-beagleboard-xm","ti,omap3450","ti,omap3";在這里,」ti,omap3-beagleboard-xm」是最匹配的模型,"ti,omap3450"次之,"ti,omap3"再次之。機敏的讀者可能指出,BeaglexM也可以聲明匹配"ti,omap3-beagleboard",但是要注意的是,板級層次上,兩個機器之間的變化比較大,很難確定是否兼容。從頂層上來看,寧可小心也不要去聲明一個board兼容另外一個。值得注意的情況是,當一個board承載另外一個,例如一個CPU附加在一個board上。(兩種CPU支持同一個board的情況)

閱讀全文

與如何在設備樹加節點相關的資料

熱點內容
防雷裝置檢測間距是多少 瀏覽:559
機械攪拌發酵罐的攪拌器有哪些作用 瀏覽:135
皮膚的管理儀器有哪些 瀏覽:615
數控機床無力怎麼回事 瀏覽:721
什麼症狀需要心臟超聲波 瀏覽:371
軸承外徑為什麼有劃線 瀏覽:338
機械加工型企業如何管理團隊 瀏覽:115
在離心水泵的實驗裝置 瀏覽:376
儀表車工是干什麼用的 瀏覽:279
常用的傳動裝置圖片 瀏覽:147
健身器材軟體有哪些 瀏覽:991
雙重軸承如何安裝 瀏覽:985
超聲波測厚儀的耦合油干什麼用 瀏覽:563
機械水表識別裝置 瀏覽:697
超聲波檢測有什麼危害 瀏覽:193
製冷能力不合格一般什麼原因 瀏覽:657
水表旁邊的閥門是干什麼的 瀏覽:417
開封閥門廠的地址 瀏覽:110
暖氣供回水閥門在哪 瀏覽:962
鍋爐輔助設備是哪些 瀏覽:214