Ara katman yazılımı oluşturma

Vehicle Services Interface Definition Language (VSIDL) ara yazılımı, SDV ekosisteminin kullanımını basitleştirmek için yazılımla tanımlanmış araç (SDV) iletişim yığınının üzerinde bir soyutlama katmanı oluşturan bir dizi Rust kitaplığını tanımlar. Ara katman yazılımı, hizmetlerin birbirleriyle iletişim kurması ve etkileşime girmesi için standartlaştırılmış bir yol sağlar. Hem VSIDLC tarafından oluşturulan kod hem de özel kodunuz bu kitaplıkları kullanır.

Vehicle Services Interface Definition Language derleyicisi (VSIDLC) tanımları doğrular, derleme işlemi sırasında Rust ara katman yazılımı kodu oluşturmak için genrule hedeflerini içeren derleme dosyaları (Android.bp) oluşturur ve katalogdaki VSIDL ve protobuf dosyalarından dağıtım yapılandırmaları oluşturur. Şekil 1'de VSIDLC'ye giriş ve VSIDLC tarafından oluşturulan çıkış gösterilmektedir:

VSIDLC girişleri ve çıkışları

Şekil 1. VSIDLC girişleri ve çıkışları.

Şemayla ilgili açıklama aşağıda verilmiştir:

  1. Giriş olarak, katalog olarak bilinen dizinler içinde düzenlenmiş aşağıdaki dosyaları sağlarsınız:

    • Proto dosyaları (.proto uzantılı) VSIDL tarafından tanımlanan hizmet birimleri arasında değiştirilen veri yapılarını içerir.
    • VSIDL dosyaları (.vsidl uzantılı) hizmet paketlerini, hizmet birimlerini ve birim türü sahipliğini tanımlar.
    • Her katalog dizinindeki Android.bp dosyaları, katalogdaki tüm proto dosyaları için rust_protobuf derleme hedeflerini tanımlar. VSIDLC, Rust'ta oluşturulan protobuf mesaj türlerine referans vermek için bu hedeflerde belirtilen crate_name öğesini kullanır.
  2. Aşağıdaki dosyaları oluşturmak için VSIDLC'yi çalıştırırsınız:

    • Her hizmet paketi klasöründe Android.bp dosya oluşturulur. --genrule değerini ayarlarsanız bu hedefler, derleme işlemi sırasında güncel Rust dosyaları oluşturur ve gerekli rust_protobuf kitaplığı bağımlılıklarını içerir.

    • Her hizmet paketi için service_bundle.rs dosyaları oluşturulur ve bu dosyalar, ara katman yazılımı bileşenleriyle etkileşim için ana struct ve işlevleri içerir.

    • Pakete ait her RPC hizmeti için lib.rs dosyaları oluşturulur ve RPC hizmetinin adını taşıyan bir alt klasöre yerleştirilir. Apple tarafından yedeklenen bazı dosyalar:

    • Interface özelliği, sunucu tarafı mantığını uygular.

    • Bir Client yapısı, RPC hizmetine çağrı yapar.

    • VSIDL dosyasında bir diagnostics_declaration varsa diagnostics.rs dosyaları oluşturulur. Bu dosyalar, UDS tabanlı teşhis için gerekli bağlamaları sağlar.

    • --apex işareti kullanıldığında dağıtım ve güvenlik yapılandırmaları oluşturulur. Bu dosyalar apex/ ve configs/ dizinlerine yerleştirilir. Hizmetten hizmete iletişim için gereken düzenleme .textproto dosyalarını ve güvenlik politikalarını (izinler) içerir.

    • --services işareti kullanıldığında hizmet için standart bir kod oluşturulur. Bu, services/ dizinine yerleştirilir ve uygulamanızı hızlı bir şekilde başlatmak için main.rs dosyası da dahil olmak üzere bir Rust uygulaması iskeleti içerir.

VSIDLC'yi çalıştırma

VSIDLC'yi çalıştırmak için:

  1. Ortamınızı ayarlamadıysanız source build/envsetup.sh komutunu çalıştırın.

  2. VSIDLC'yi oluşturmak için aşağıdaki komutu çalıştırın:

    m vsidlc
    
  3. VSIDL katalog dizininizde gerekli derleme, protobuf ve VSIDL dosyalarının bulunduğundan emin olun.

  4. vsidlc komutunu çalıştırın:

    vsidlc -c path_to_catalog -o output_directory -p
    

    Nerede:

    • -c path_to_catalog ana katalog dizininin yolunu tanımlar.
    • -o output_directory, generated_rs çıkış dizininin oluşturulduğu üst dizini tanımlar.
    • (isteğe bağlı) --apex, düzenleme ve güvenlik yapılandırması yapılarını oluşturur.
    • (isteğe bağlı) --services, hızlı başlangıç için Rust uygulama iskeleti oluşturur.
    • (isteğe bağlı) -p, yeni dosyalar oluşturmadan önce mevcut oluşturulmuş dizinleri (ör. generated_rs ve varsa apex, configs veya services) siler.
    • (isteğe bağlı) --genrule, Rust kodu yerine Android.bp genrules oluşturur. Genrules, oluşturulan eserlerin sürüm denetimi altına alınmasını önlemek için m çalıştırılırken gerekli Rust kodunu anında oluşturur.

    generated_rs dizini oluşturulur. Bu dizinde Android.bp ve oluşturulan ara yazılım dosyaları bulunur. Bu dizin, tanımladığınız hizmet paketlerinin tam nitelikli adlarına karşılık gelen alt dizinler halinde düzenlenir.

Bağımlılıkları yönetme

VSIDLC, varsayılan olarak yalnızca ana katalog için kod oluşturur, bağımlılık katalogları için oluşturmaz. Kataloğunuzda diğer kataloglarda tanımlanan türler veya hizmet birimleri kullanılıyorsa -d işaretini kullanarak her bağımlılık kataloğunun yolunu belirtin:

vsidlc -c path_to_catalog -o output_directory -d dep1_path -d dep2_path ...

Geçişli bağımlılıklar (bağımlılıkların bağımlılıkları) dahil olmak üzere bağımlılık grafiğinin tamamı için yollar sağlamanız gerekir. Örneğin, aşağıdaki katalog bağımlılık ağacına sahip olduğunuzu varsayalım:

Örnek VSIDLC bağımlılık ağacı

Şekil 2. Örnek VSIDLC bağımlılık ağacı.

Ağaçtaki her katalog için ara yazılım oluşturmak üzere aşağıdaki komutları çalıştırmanız gerekir:

Hedef katalog Bağımlılıklar Komut
SDV Core kataloğu Yok vsidlc -o ./generated -c ./path/to/sdv_core_catalog
Teşhis kataloğu SDV Core kataloğu vsidlc -o ./generated -c ./path/to/diagnostics_catalog -d ./path/to/sdv_core_catalog
SOMEIP kataloğu Teşhis kataloğu, SDV Core kataloğu vsidlc -o ./generated -c ./path/to/someip_catalog -d ./path/to/diagnostics_catalog -d ./path/to/sdv_core_catalog
OEM kataloğu Teşhis kataloğu, SOMEIP kataloğu, (geçişli olarak) SDV Core kataloğu vsidlc -o ./generated -c ./path/to/oem_catalog -d ./path/to/someip_catalog -d ./path/to/diagnostics_catalog -d ./path/to/sdv_core_catalog

Rust çıkışını biçimlendirme

VSIDL, varsayılan olarak Rust çıktısını biçimlendirmek için rustfmt'yi kullanır. Varsayılan değerin düzgün çalışması için $ANDROID_BUILD_TOP ortam değişkenini veya RUSTFMT_PATH ve RUSTFMT_TOML_PATH ortam değişkenlerini ayarlayın. Rust'ın varsayılan olarak kullandığı biçimi değiştirmek için --rust-formatter seçeneğini pretty-please veya none ile birlikte kullanın:

  • Çıkış biçimini prettyplease olarak değiştirmek için pretty-please değerini kullanın:

    vsidlc -c path_to_catalog -o output_directory -p --rust-formatter pretty-please
    
  • Çıkış biçimini none olarak değiştirmek için none değerini kullanın:

    vsidlc -c path_to_catalog -o output_directory -p --rust-formatter none
    

Sonraki adımlar

Ara yazılım oluşturduktan sonra İşletme mantığınızı uygulama başlıklı makaleyi inceleyin.