Derleyin ve doğrulayın

Cihaz ağacı kaynağını (DTS) derlemek için cihaz ağacı derleyiciyi (DTC) kullanabilirsiniz dosyası olarak da kaydedebilir. Ancak, bindirme cihaz ağacını (DT) hedef ana DT'ye uygulamadan önce, cihaz ağacı yer paylaşımının (DTO) davranışını simüle ederek sonucu doğrulamalıdır.

DTC ile derle

.dts derlemek için dtc kullanırken -@ adlı isteğe bir __symbols__ düğüm eklemek için sonuçta .dtbo. __symbols__ düğümü, DTO kitaplığının kullanabileceği bir etiketle işaretlenmiş tüm düğümlerin listesi gözden geçirin.

Ana DT .dts derlemesi için örnek komut:

dtc -@ -O dtb -o my_main_dt.dtb my_main_dt.dts

Bindirme DT'sini oluşturmak için örnek komut .dts:

dtc -@ -O dtb -o my_overlay_dt.dtbo my_overlay_dt.dts
.

DTO sonuçlarını ana makinede doğrula

Doğrulama, kodu yerleştirirken oluşabilecek hataları belirlemenize yardımcı olabilir ana DT'deki bindirme DT'sini gösterir. Hedefi güncellemeden önce Bu işlem, uyuşturucu ticareti örgütlerinin davranışını simüle ederek ana makineye DT'nin yerleştirilmesi sonucunda .dts içinde /include/.

Şekil 1. Ana makinede DTO'yu simüle etmek için /include/ söz dizimini kullanın.

  1. .dts yer paylaşımının bir kopyasını oluşturun. Kopyada ilk satır üstbilgisi. Örnek:
    /dts-v1/;
    /plugin/;
    
    Dosyayı my_overlay_dt_wo_header.dts (veya herhangi bir istediğiniz bir dosya adı) tıklayın.
  2. Ana .dts öğesinin bir kopyasını oluşturun. Kopyada, son satırda, 1. adımda oluşturduğunuz dosyaya dahil et söz dizimini ekleyin. Örnek:
    /include/ "my_overlay_dt_wo_header.dts"
    
    Dosyayı my_main_dt_with_include.dts (veya herhangi bir istediğiniz bir dosya adı) tıklayın.
  3. Derlemek için dtc komutunu kullanın Birleştirilmiş DT'yi almak için my_main_dt_with_include.dts ile aynı sonucu verir. Örnek:
    dtc -@ -O dtb -o my_merged_dt.dtb my_main_dt_with_include.dts
    
    .
  4. my_merged_dt.dto verilerini dökümü için dtc işlevini kullanın.
    dtc -O dts -o my_merged_dt.dts my_merged_dt.dtb
    

Android 9'da uyuşturucu ticareti örgütlerini doğrulama

Android 9 için cihaz ağacı blob'u yer paylaşımı gerekir (DTBO) bölümü SoC'de düğüm eklemek veya özelliklerde değişiklik yapmak için DT, bootloader'ın cihaza özel bir DT'yi dinamik olarak SoC DT.

Uygulanan yer paylaşımlarını belirtme

Yer paylaşımının doğruluğunu değerlendirmek için Tedarikçi Test Paketi (VTS) uygulamasına ait yeni bir çekirdek komut satırı parametresi eklemelidir. Şu konumlardan seçilen yer paylaşımlarını gösteren androidboot.dtbo_idx: büyük bir kısmıdır. Android 12'de çekirdek sürümü kullanan 5.10 veya sonraki sürümlerde bu parametre bootconfig'den geçer. Örneğin, androidboot.dtbo_idx=x,y,z parametresi, x, y ve z, uygulanan DTBO bölümündeki DTO'lar (bu sırayla) bunu temel DT'ye bağlayabilirsiniz.

Bindirmeler ana DT'deki düğümlere uygulanabilir veya yeni düğümler ekleyebilir. ancak önceki bir yer paylaşımına eklenen bir düğüme başvuruda bulunamaz. Bu kısıtlaması gerekir, çünkü bindirme uygulaması ana DT simge tablosuyla bindirme simge tablosu (birleştirme değil, Sembol adlarındaki çatışmalar ve bağımlılıkların yer paylaşımları).

Örnek: Geçersiz yer paylaşımları

Bu örnekte, overlay_2.dts, Şu kullanıcı tarafından eklenen e: overlay_1.dts. overlay_1, overlay_2 ürününün DT'yi gösterir. Bindirme uygulaması, simgenin Şu öğenin simge tablosunda e yok: temel DT.

ana.dts yer paylaşımlı_1.dts yer paylaşımlı_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 bir Ana DTS'den b. Zaman overlay_1, temel DT'ye uygulanır, ardından da overlay_2 uygulaması, özelliğin değeri e düğümünde prop (overlay_1.dts tarafından ayarlandı) değeri, overlay_2.dts.

ana.dts yer paylaşımlı_1.dts yer paylaşımlı_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 bootloader'ın şu işlemleri yapabildiğinden emin olun: takip etmek için:

  1. Üzerinde çalıştığı panoyu belirleyin ve buna ilişkin yer paylaşımlı olarak ekleyebilirsiniz.
  2. androidboot.dtbo_idx parametresini çekirdeğe ekleyin komut satırından erişebilirsiniz.
    • Parametre, uyuşturucu ticareti örgütlerinin sıfır tabanlı indekslerini belirtmelidir temel DT'ye uyguladığı DTBO bölümü resminden (aynı sipariş).
    • Dizinler, yer paylaşımının DTBO'daki konumunu belirtmelidir. bölüm.

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 varlığı androidboot.dtbo_idx (Init ilgili ro.boot.dtbo_idx sistemini otomatik olarak kur mülkündeki her bir satış için geçerlidir.
  • ro.boot.dtbo_idx sistem özelliğinin geçerliliği ( mülkün en az bir geçerli DTBO resmi belirttiğinden emin olunması dizin).
  • DTBO bölümünün geçerliliği (DTBO'daki yer paylaşımlarını da doğrular) bölümlendirmesi (ör. bölümlendirme) içerir.
  • Sonuçta ortaya çıkan DT'deki ek düğüm veya özellik değişiklikleri sunulur nasıl aktaracağımızı göreceğiz.

Örneğin, aşağıdaki yer paylaşımları ve son DT'de, Çekirdek komut satırından androidboot.dtbo_idx=5,3 geçti doğrulama ancak çekirdeğe androidboot.dtbo_idx=3,5 ekleniyor komut satırı doğrulamayı geçemiyor.

Dizin 3'te bindirme DT'si 5. dizinde bindirme DT'si
[overlay_1.dts]

/dts-v1/;
/plugin/;

&c { prop = <0xfe>; };
[overlay_2.dts]

/dts-v1/;
/plugin/;

&c { prop = <0xff>; };
Maç sonucu DT

/dts-v1/;
/ {

	{
		phandle = <0x1>;
	};

	b {
		phandle = <0x2>;
	};

	c {
		phandle = <0x3>;
		prop = <0xfe>;
	};

	__simgeler__ {
		a = "/a";
		b = "/b";
		c = "/c";
	};
};