Cihaz ağacı kaynak (DTS) dosyalarını derlemek için cihaz ağacı derleyiciyi (DTC) kullanabilirsiniz. Ancak, hedef ana DT'ye yer paylaşımlı cihaz ağacını (DT) uygulamadan önce, cihaz ağacı yer paylaşımının (DTO) davranışını simüle ederek sonucu da doğrulamanız gerekir.
DTC ile derleme
.dts
'u derlemek için dtc
kullanırken, elde edilen .dtbo
'e __symbols__
düğümü eklemek için -@
seçeneğini eklemeniz gerekir. __symbols__
düğümü, etiketle işaretlenmiş tüm düğümlerin listesini içerir. Bu liste, DTO kitaplığının referans olarak kullanabileceği bir listedir.
Ana DT .dts
derlemesi için örnek komut:
dtc -@ -O dtb -o my_main_dt.dtb my_main_dt.dts
Yer paylaşımı DT'sini .dts
oluşturmaya yönelik örnek komut:
dtc -@ -O dtb -o my_overlay_dt.dtbo my_overlay_dt.dts
DTO sonuçlarını ana makinede doğrula
Doğrulama, yer paylaşımı DT'sini ana DT'ye yerleştirirken oluşabilecek hataları belirlemenize yardımcı olabilir. Hedefi güncellemeden önce, .dts
içinde /include/
kullanarak DTO'nun davranışını simüle ederek ana makineye DT yerleştirmenin sonucunu doğrulayabilirsiniz.
Şekil 1. Ana makinede DTO'yu simüle etmek için /include/ söz dizimini kullanın.
- Yer paylaşımı
.dts
'ün bir kopyasını oluşturun. Kopyada ilk satır başlığını kaldırın. Örnek:/dts-v1/; /plugin/;
Dosyayımy_overlay_dt_wo_header.dts
(veya istediğiniz bir dosya adı) olarak kaydedin. - Ana
.dts
öğesinin bir kopyasını oluşturun. Kopyada, son satırdan sonra 1. adımda oluşturduğunuz dosyanın include söz dizimini ekleyin. Örneğin:/include/ "my_overlay_dt_wo_header.dts"
Dosyayımy_main_dt_with_include.dts
(veya istediğiniz bir dosya adı) olarak kaydedin. - Birleştirilmiş DT'yi almak için
dtc
'yi derlemek üzeremy_main_dt_with_include.dts
'yi kullanın. Bu sonuç, DTO ile aynı olmalıdır. Örneğin:dtc -@ -O dtb -o my_merged_dt.dtb my_main_dt_with_include.dts
my_merged_dt.dto
'u dökmek içindtc
kullanın.dtc -O dts -o my_merged_dt.dts my_merged_dt.dtb
Android 9'da DTO'yu doğrulama
Android 9 için cihaz ağacı blob yer paylaşımı (DTBO) bölümü gerekir. SoC DT'sinde düğüm eklemek veya özelliklerde değişiklik yapmak için önyükleyicinin, SoC DT'sinin üzerine cihaza özgü bir DT'yi dinamik olarak yerleştirmesi gerekir.
Uygulanan yer paylaşımlarını belirtme
Tedarikçi firmaların, yer paylaşımlı uygulamanın doğruluğunu değerlendirmek üzere
Tedarikçi Test Paketi (VTS)'yi etkinleştirmek için DTBO bölümünde seçilen yer paylaşımlarını belirten yeni bir çekirdek komut satırı parametresi androidboot.dtbo_idx
eklemesi gerekir. 5.10 veya daha yeni bir çekirdek sürümü kullanan Android 12'de bu parametre bootconfig üzerinden iletilir.
Örneğin androidboot.dtbo_idx=x,y,z
parametresi x
, y
ve z
değerlerini bootloader tarafından temel DT'ye uygulanan (bu sırayla) DTBO bölümünde yer alan DTO'ların sıfır tabanlı dizinleri olarak bildirir.
Yer paylaşımları, ana DT'deki düğümlere uygulanabilir veya yeni düğümler ekleyebilir ancak önceki bir yer paylaşımına eklenen bir düğümü referans alamaz. Yer paylaşımı uygulaması, yer paylaşımı simge tablosunu ana DT simge tablosuyla birleştirmediğinden bu kısıtlama gereklidir (birleştirmemek, simge adlarında çakışmaları ve yer paylaşımları arasındaki bağımlılıkların karmaşıklaşmasını önler).
Örnek: Geçersiz yer paylaşımları
Bu örnekte overlay_2.dts
, overlay_1.dts
tarafından eklenen e
düğümünü ifade eder. Ana DT'ye overlay_1
uygulandıktan sonra, sonuçta elde edilen DT'ye overlay_2
uygulanmaya çalışılırsa yer paylaşımlı uygulama başarısız olur ve temel DT'nin sembol tablosunda e
simgesinin bulunmadığına dair bir hata gösterilir.
main.dts | overlay_1.dts | overlay_2.dts |
---|---|---|
[main.dts] /dts-v1/; / { a: a {}; b: b {}; c: c {}; }; |
[overlay_1.dts] /dts-v1/; /plugin/; &b { ref1 = <&a>; e: e { prop = <0x0a>; phandle = <0x04>; }; }; |
[overlay_2.dts] /dts-v1/; /plugin/; /* invalid! */ &e { prop = <0x0b>; }; |
Örnek: Geçerli yer paylaşımları
Bu örnekte overlay_2.dts
, yalnızca ana DTS'deki b
düğümünü ifade eder. overlay_1
, temel DT'ye uygulandıktan sonra overlay_2
uygulaması uygulandığında, e
düğümündeki prop
mülkünün değeri (overlay_1.dts
tarafından ayarlanır) overlay_2.dts
tarafından ayarlanan değerle yazılır.
ana.dts | overlay_1.dts | overlay_2.dts |
---|---|---|
[final.dts] /dts-v1/; / { a: a {}; b: b {}; c: c {}; }; |
[overlay_1.dts] /dts-v1/; /plugin/; &b { ref1 = <&a>; e { prop = <0x0c>; }; }; |
[overlay_2.dts] /dts-v1/; /plugin/; /* valid */ &b { ref1 = <&c>; e { prop = <0x0d>; }; }; |
DTBO bölümünü uygulama
Gerekli DTBO bölümünü uygulamak için önyükleyicinin aşağıdakileri yapabileceğinden emin olun:
- Çalıştığı kartı tanımlayın ve uygulanacak ilgili yer paylaşımlarını seçin.
androidboot.dtbo_idx
parametresini çekirdek komut satırına ekleyin.- Parametre, temel DT'ye uyguladığı DTBO bölüm resmindeki DTO'ların sıfır tabanlı dizinlerini (aynı sırada) belirtmelidir.
- Dizinler, yer paylaşımının DTBO bölümündeki konumunu belirtmelidir.
DTBO bölümünün yapısıyla ilgili ayrıntılar için Cihaz ağacı yer paylaşımları başlıklı makaleyi inceleyin.
DTBO bölümünü doğrulama
VTS'yi kullanarak aşağıdakileri doğrulayabilirsiniz:
- Çekirdek komut satırı parametresinin
androidboot.dtbo_idx
varlığı (Init
'ın ilgiliro.boot.dtbo_idx
sistem mülkünü otomatik olarak ayarladığı kontrol edilerek). ro.boot.dtbo_idx
sistem özelliğinin geçerliliği (özelliğin en az bir geçerli DTBO resim dizini belirtip belirtmediğini kontrol ederek).- DTBO bölümünün geçerliliği (DTBO bölümünde temel DT'ye uygulanan yer paylaşımlarını da doğrular).
- Ortaya çıkan DT'deki ek düğüm veya özellik değişiklikleri, Linux çekirdeğine sunulur.
Örneğin, aşağıdaki yer paylaşımlarında ve nihai DT'de, çekirdek komut satırına androidboot.dtbo_idx=5,3
eklemek doğrulama işlemini geçer ancak çekirdek komut satırına androidboot.dtbo_idx=3,5
eklemek doğrulama işlemini geçemez.
3. dizinde yer paylaşımlı DT | 5. dizinde DT yer paylaşımı |
---|---|
[overlay_1.dts] /dts-v1/; /plugin/; &c { prop = <0xfe>; }; |
[overlay_2.dts] /dts-v1/; /plugin/; &c { prop = <0xff>; }; |
Final DT |
---|
/dts-v1/; / { a { phandle = <0x1>; }; b { phandle = <0x2>; }; c { phandle = <0x3>; prop = <0x3>; prop = <0x1>; } |