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'yi .dts
oluşturmaya yönelik örnek komut:
dtc -@ -O dtb -o my_main_dt.dtb my_main_dt.dts
Yer paylaşımı DT'sini .dts
oluşturmak için örnek komut:
dtc -@ -O dtb -o my_overlay_dt.dtbo my_overlay_dt.dts
Ana makinede DTO sonuçlarını doğrulama
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 DT'nin ana makineye yerleştirilmesinin sonucunu doğrulayabilirsiniz.
Şekil 1. Ana makinede DTO'yu simüle etmek için /include/ söz dizimini kullanın.
- Yer paylaşımının
.dts
kopyasını oluşturun. Kopyada ilk satırdaki üstbilgeyi kaldırın. Örnek: Dosyayı/dts-v1/; /plugin/;
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. Örnek: Dosyayı/include/ "my_overlay_dt_wo_header.dts"
my_main_dt_with_include.dts
(veya istediğiniz bir dosya adı) olarak kaydedin. - Birleştirilmiş DT'yi almak için
dtc
'yi derlemek amacıylamy_main_dt_with_include.dts
'yi kullanın. Bu sonuç, DTO ile aynı olmalıdır. Örnek: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 Testi Paketi'nin (VTS) yer paylaşımı uygulamasının doğruluğunu değerlendirmesini sağlamak için tedarikçilerin, DTBO bölümünden seçilen yer paylaşımlarını belirten yeni bir çekirdek komut satırı parametresi androidboot.dtbo_idx
eklemesi gerekir. Android 12'de, 5.10 veya daha yeni bir çekirdek sürümü kullanıldığında bu parametre bootconfig üzerinden iletilir.
Örneğin, androidboot.dtbo_idx=x,y,z
parametresi, önyükleyici tarafından temel DT'ye uygulanan (bu sırayla) DTBO bölümündeki DTO'ların sıfır tabanlı dizinleri olarak x
, y
ve z
değerlerini 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. overlay_1
ana DT'ye uygulandıktan sonra, overlay_2
sonucun DT'sine uygulanmaya çalışılırsa yer paylaşımı uygulaması, e
sembolünün temel DT'nin sembol tablosunda bulunmadığıyla ilgili bir hatayla başarısız olur.
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.
main.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 (mülkün en az bir geçerli DTBO resim dizini belirtmesini kontrol ederek).- DTBO bölümünün geçerliliği (DTBO bölümündeki ve temel DT'ye uygulanan yer paylaşımlarını da doğrular).
- Ortaya çıkan DT'deki ek düğümler veya mülk 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>; }; |
Nihai DT |
---|
/dts-v1/; / { a { phandle = <0x1>; }; b { phandle = <0x2>; }; c { phandle = <0x3>; prop = <0xfe>; }; __symbols__ { a = "/a"; b = "/b"; c = "/c"; }; }; |