Derleme ve Doğrulama

Cihaz Ağacı Kaynak dosyalarını derlemek için Cihaz Ağacı Derleyicisini (DTC) kullanabilirsiniz. Ancak, hedef ana CE'ye bindirmeli CE'yi uygulamadan önce, DTO davranışını simüle ederek sonucu da doğrulamanız gerekir.

DTC ile derleme

Kullanırken dtc derlemeye .dts , seçeneğini eklemeniz gerekir -@ bir ekleme __symbols__ çıkan düğümü .dtbo . __symbols__ düğümü DTO kütüphane referanslar için kullanabileceğiniz bir etiketle işaretlenmiş tüm düğümler, bir listesini içerir.

Numune komut ana DT inşa etmek .dts :

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

Bindirme DT inşa etmek Numune komut .dts :

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

Ana bilgisayarda DTO sonuçlarını doğrulayın

Doğrulama, bindirmeli CE'yi ana CE'ye yerleştirirken oluşabilecek hataları belirlemenize yardımcı olabilir. Hedefi güncellemeden önce, kullanmakta DTO davranışını simüle ederek ana bilgisayardaki DT bindirilirken sonucunu doğrulamak /include/ içinde .dts .

Şekil 1. Kullanım sözdizimi /include/ ana bilgisayarda DTO simüle etmek için
  1. Bindirme bir kopyasını oluşturun .dts . Kopyada, ilk satır başlığını kaldırın. Örnek:
    /dts-v1/;
    /plugin/;
    
    olarak dosyaya kaydet my_overlay_dt_wo_header.dts (veya istediğiniz herhangi dosya).
  2. Ana bir kopyasını oluşturun .dts . : Kopyada, son satırdan sonra, komuta sen Örneğin 1. adımda oluşturulan bir dosya için sözdizimi dahil
    /include/ "my_overlay_dt_wo_header.dts"
    
    olarak dosyaya kaydet my_main_dt_with_include.dts (veya istediğiniz herhangi dosya).
  3. Kullanım dtc derlemeye my_main_dt_with_include.dts DTO aynı sonucu olmalıdır DT, birleştirilmiş olsun. Örneğin:
    dtc -@ -O dtb -o my_merged_dt.dtb my_main_dt_with_include.dts
    
  4. Kullanım dtc dökümü my_merged_dt.dto .
    dtc -O dts -o my_merged_dt.dts my_merged_dt.dtb
    

Android 9'da DTO'yu doğrulama

Android 9, bir Cihaz Ağacı Blob Yerleşimi (DTBO) bölümü gerektirir. SoC DT'de düğüm eklemek veya özelliklerde değişiklik yapmak için, önyükleyicinin SoC DT'nin üzerine aygıta özel bir DT'yi dinamik olarak bindirmesi gerekir.

Uygulanan bindirmeleri gösteren

Etkinleştirmek için Vendor Testi Suite (VTS) bindirme uygulamasının doğruluğunu değerlendirmek için, satıcılar yeni çekirdek komut satırı parametresi eklemelisiniz androidboot.dtbo_idx DTBO bölüm seçilen bindirmeleri gösterir. Örneğin parametre androidboot. dtbo_idx=x,y,z raporları x , y ve z DTBO bölümünden Aygıt ağacı Bindirme (DTOS) sıfır tabanlı endeksleri olarak baz Aygıt ağacı (DT) önyükleyicinin tarafından (bu sırayla) uygulanmıştır.

Bindirme ana cihaz ağacından düğümlere uygulamak veya yeni düğüm eklemek, ancak bir önceki yerleşim olarak eklenen bir düğüm başvuruda bulunamaz olabilir. Bu kısıtlama, kaplama uygulaması kaplama sembol tablosunu ana DT sembol tablosuyla birleştirmediğinden gereklidir (birleştirme yapılmaması, sembol adlarındaki çakışmaları ve kaplamalar arasındaki bağımlılıkların karmaşıklığını önler).

Örnek: Geçersiz bindirmeler

Bu örnekte, overlay_2.dts düğüm belirtir e ilave edildi, overlay_1.dts . Sonra overlay_1 ana DT'ye uygulanan bir girişim uygulamak için yapılmış ise, overlay_2 elde edilen DT'ye sembolü bu, kaplama uygulaması bir hata ile başarısız olur e bir baz DT için sembol tablosunda mevcut değildir.

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 kaplamalar

Bu örnekte, overlay_2.dts sadece düğüm belirtir b ana DTS. Tüm overlay_1 baz DT'ye uygulanır, sonra uygulama, ardından overlay_2 , özelliği değeri prop düğümünün e (setin overlay_1.dts ) ile değer kümesi ile yazılır overlay_2.dts .

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ün uygulanması

Gerekli DTBO bölümünü uygulamak için önyükleyicinin aşağıdakileri yapabildiğinden emin olun:

  1. Üzerinde çalıştığı kartı tanımlayın ve uygulanacak ilgili kaplamayı/yer paylaşımlarını seçin.
  2. Append androidboot.dtbo_idx çekirdek komut satırına parametre.
    • Parametre, temel DT'ye uyguladığı DTBO bölüm görüntüsünden DTO'ların sıfır tabanlı endekslerini (aynı sırada) belirtmelidir.
    • Endeksler, DTBO bölümündeki bindirmenin konumuna başvurmalıdır.

DTBO bölümünün yapısı hakkında ayrıntılı bilgi için, bkz Aygıt Ağacı Overlay'ler source.android.com üzerinde.

DTBO bölümünün doğrulanması

Aşağıdakileri doğrulamak için VTS'yi kullanabilirsiniz:

  • Çekirdek komut satırı parametresi varlığı androidboot.dtbo_idx (kontrol ederek Init otomatik olarak ilgili kurmuş ro.boot.dtbo_idx sistem özelliği).
  • Geçerliliği ro.boot.dtbo_idx (bu özellik belirtir en az bir geçerli DTBO görüntü indeksi kontrol ederek) sistemi özelliği.
  • DTBO bölümünün geçerliliği (aynı zamanda temel DT'ye uygulanan DTBO bölümündeki bindirmeleri de doğrular).
  • Ortaya çıkan DT'deki ek düğümler veya özellik değişiklikleri Linux çekirdeğine sunulur.

Örneğin, aşağıdaki bindirmeleri ve son DT, ilave androidboot.dtbo_idx=5,3 çekirdek komut hattına doğrulama ancak ilave geçer androidboot.dtbo_idx=3,5 çekirdek komut hattına doğrulama geçmez.

DT'yi indeks 3'e yerleştir DT'yi indeks 5'e yerleştir
[overlay_1.dts]

/dts-v1/;
/plugin/;

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

/dts-v1/;
/plugin/;

&c { prop = <0xff>; };
son DT
/dts-v1/;
/ {

	a {
		phandle = <0x1>;
	};

	b {
		phandle = <0x2>;
	};

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

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