Cihaz ağacı kaynak (DTS) dosyalarını derlemek için cihaz ağacı derleyicisini (DTC) kullanabilirsiniz. Ancak, hedef ana DT'ye yer paylaşımı cihaz ağacını (DT) uygulamadan önce cihaz ağacı yer paylaşımı (DTO) davranışını simüle ederek sonucu da doğrulamanız gerekir.
DTC ile derleme
dtc kullanarak .dts derlerken sonuçtaki .dtbo öğesine __symbols__ düğümü eklemek için -@ seçeneğini eklemeniz gerekir. __symbols__ düğümü, DTO kitaplığının referanslar için kullanabileceği, etiketle işaretlenmiş tüm düğümlerin listesini içerir.
Ana DT'yi oluşturmak için örnek komut .dts:
dtc -@ -O dtb -o my_main_dt.dtb my_main_dt.dts
Yer paylaşımı DT'yi oluşturmak için örnek komut .dts:
dtc -@ -O dtb -o my_overlay_dt.dtbo my_overlay_dt.dts
Ana makinedeki DTO sonuçlarını doğrulama
Doğrulama, yer paylaşımı DT'yi ana DT'ye yerleştirirken oluşabilecek hataları belirlemenize yardımcı olabilir. Hedefi güncellemeden önce, .dts içindeki /include/ kullanarak DTO'nun davranışını simüle ederek ana makineye DT yerleştirme sonucunu doğrulayabilirsiniz.

1. şekil. Ana makinede DTO'yu simüle etmek için /include/ söz dizimini kullanın.
- Yer paylaşımının kopyasını oluşturun
.dts. Kopyada ilk satır başlığını kaldırın. Örnek: Dosyayı/dts-v1/; /plugin/;
my_overlay_dt_wo_header.dts(veya istediğiniz herhangi 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: Dosyayı/include/ "my_overlay_dt_wo_header.dts"
my_main_dt_with_include.dts(veya istediğiniz herhangi bir dosya adı) olarak kaydedin. dtckullanarak derleyin. Birleştirilmiş DT'yi almak içinmy_main_dt_with_include.dtskullanın. Bu, DTO ile aynı sonuç olmalıdır. Örneğin:dtc -@ -O dtb -o my_merged_dt.dtb my_main_dt_with_include.dts
my_merged_dt.dtodökümü içindtckullanın.dtc -O dts -o my_merged_dt.dts my_merged_dt.dtb
Android 9'da DTO'yu doğrulama
Android 9, cihaz ağacı blob yerleşimi (DTBO) bölümü gerektirir. SoC DT'ye düğüm eklemek veya özelliklerde değişiklik yapmak için önyükleyicinin, SoC DT'nin üzerine cihaza özel bir DT'yi dinamik olarak yerleştirmesi gerekir.
Uygulanan yer paylaşımlarını belirtme
Yer paylaşımı uygulamasının doğruluğunu değerlendirmek için
Tedarikçi Test Paketi (VTS)'ni etkinleştirmek isteyen tedarikçiler, DTBO bölümünden seçilen yer paylaşımlarını belirten yeni bir çekirdek komut satırı parametresi androidboot.dtbo_idx eklemelidir. Çekirdek sürümü 5.10 veya daha yeni olan Android 12'de bu parametre, bootconfig üzerinden iletilir.
Örneğin, androidboot.dtbo_idx=x,y,z parametresi, önyükleyici tarafından temel DT'ye uygulanan DTBO bölümündeki DTO'ların sıfır tabanlı dizinleri olarak x, y ve z değerlerini (bu sırayla) bildirir.
Yer paylaşımları, ana DT'deki düğümler için geçerli olabilir veya yeni düğümler ekleyebilir ancak önceki bir yer paylaşımında eklenen bir düğüme başvuramaz. Bu kısıtlama, yer paylaşımı uygulaması yer paylaşımı sembol tablosunu ana DT sembol tablosuyla birleştirmediği için gereklidir (birleştirme yapılmaması, sembol adlarında çakışmaları önler ve yer paylaşımları arasındaki bağımlılıkların karmaşıklaşmasını engeller).
Ö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, sonuçtaki DT'ye overlay_2 uygulamaya çalışılırsa yer paylaşımı uygulaması, sembol tablosunda temel DT için e sembolünün bulunmadığı hatasıyla 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 düğüm b'ü ifade eder. overlay_1 temel DT'ye uygulandıktan sonra overlay_2 uygulaması kullanıldığında, e düğümündeki prop özelliğinin değeri (overlay_1.dts tarafından ayarlanır) overlay_2.dts tarafından ayarlanan değerle üzerine 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 yapabildiğinden emin olun:
- Üzerinde çalıştığı kartı belirleyin ve uygulanacak ilgili katmanları seçin.
androidboot.dtbo_idxparametresini çekirdek komut satırına ekleyin.- Parametre, DTBO bölümü görüntüsündeki DTO'ların, temel DT'ye uygulandığı sıfır tabanlı dizinlerini (aynı sırada) belirtmelidir.
- Dizinler, DTBO bölümündeki yer paylaşımının konumunu belirtmelidir.
DTBO bölümünün yapısıyla ilgili ayrıntılar için Cihaz ağacı katmanları başlıklı makaleyi inceleyin.
DTBO bölümünü doğrulama
Aşağıdakileri doğrulamak için VTS'yi kullanabilirsiniz:
- Çekirdek komut satırı parametresinin varlığı
androidboot.dtbo_idx(Init'nin ilgiliro.boot.dtbo_idxsistem özelliğini otomatik olarak ayarladığını kontrol ederek). ro.boot.dtbo_idxsistem özelliğinin geçerliliği (özelliğin en az bir geçerli DTBO resmi dizini belirtip belirtmediği kontrol edilerek).- DTBO bölümünün geçerliliği (DTBO bölümündeki, temel DT'ye uygulanan katmanlar da doğrulanır).
- Sonuçta elde edilen DT'deki ek düğümler veya özellik değişiklikleri Linux çekirdeğine sunulur.
Örneğin, aşağıdaki kaplamalarda ve nihai DT'de, çekirdek komut satırına androidboot.dtbo_idx=5,3 eklenmesi doğrulamayı geçer ancak çekirdek komut satırına androidboot.dtbo_idx=3,5 eklenmesi doğrulamayı geçmez.
| 3. dizinde yer paylaşımlı DT | 5. indekste yer paylaşımlı DT |
|---|---|
[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";
};
};
|