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. dtc
kullanarak derleyin. Birleştirilmiş DT'yi almak içinmy_main_dt_with_include.dts
kullanı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.dto
dökümü 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, 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_idx
parametresini ç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_idx
sistem özelliğini otomatik olarak ayarladığını kontrol ederek). ro.boot.dtbo_idx
sistem ö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"; }; }; |