Derleme Ortamını Ayarlama

Kaynağı GitHub'da görüntüleyin

OpenThread, ücretsiz ve açık geliştirmeyi desteklemek için derleme araç zincirinde CMake'i kullanır. Şu anda bu iş zinciri, OpenThread'ı yeni bir donanım platformuna taşımak için gereklidir.

Diğer derleme araç zincirleri gelecekte desteklenebilir ancak bu taşıma rehberinin kapsamında değildir.

Yeni bir kod deposu oluşturun

İlk adım, donanım platformunuz için yeni bir ev oluşturmaktır. Bu kılavuzda platform soyutlama katmanını, donanım platformunun SDK'sını ve birkaç faydalı komut dosyasını içeren ot-efr32 adlı yeni bir depo oluşturacağız.

Bu örnekte, GitHub'da SiliconLabs/ot-efr32 veri havuzunu oluşturup ~/repos/ot-efr32 ürününe klonladık.

mkdir -p ~/repos
cd ~/repos
git clone git@github.com:SiliconLabs/ot-efr32.git
Cloning into 'ot-efr32'...
remote: Enumerating objects: 99, done.
remote: Counting objects: 100% (99/99), done.
remote: Compressing objects: 100% (60/60), done.
remote: Total 333 (delta 65), reused 39 (delta 39), pack-reused 234
Receiving objects: 100% (333/333), 170.78 KiB | 5.69 MiB/s, done.
Resolving deltas: 100% (194/194), done.
git status
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

Depo yapısı

OpenThread GitHub kuruluşundaki mevcut platform veri havuzlarıyla tutarlılığı sağlamak için kod deponuzu aşağıdaki şekilde yapılandırabilirsiniz:

tree -F -L 1 --dirsfirst
.
├── examples/
├── openthread/
├── script/
├── src/
├── third_party/
├── CMakeLists.txt
├── LICENSE
└── README.md
Klasör Açıklama
examples isteğe bağlı Örnek uygulamalar
openthread Alt modül olarak openthread deposu
script Derleme, test, lining için komut dosyaları
src Platform soyutlama katmanı uygulaması
third_party Tüm üçüncü taraf kaynakların konumu

Alt modül ekle

Sonraki adım, openthread hizmetini ve diğer gerekli depoları alt modül olarak eklemektir.

git submodule add git@github.com:openthread/openthread.git
Cloning into '/home/user/repos/ot-efr32/openthread'...
remote: Enumerating objects: 78281, done.
remote: Counting objects: 100% (1056/1056), done.
remote: Compressing objects: 100% (488/488), done.
remote: Total 78281 (delta 639), reused 864 (delta 556), pack-reused 77225
Receiving objects: 100% (78281/78281), 76.62 MiB | 35.24 MiB/s, done.
Resolving deltas: 100% (61292/61292), done.

Bu örnekte, Silicon Labs Gecko SDK'sının basit bir sürümünü third_party modülü olarak bir alt modül olarak ekleyeceğiz.

cd third_party
git submodule add git@github.com:SiliconLabs/sdk_support.git
Cloning into '/home/user/repos/ot-efr32/third_party/sdk_support'...
remote: Enumerating objects: 32867, done.
remote: Counting objects: 100% (8181/8181), done.
remote: Compressing objects: 100% (3098/3098), done.
remote: Total 32867 (delta 4945), reused 7469 (delta 4732), pack-reused 24686
Receiving objects: 100% (32867/32867), 128.83 MiB | 30.91 MiB/s, done.
Resolving deltas: 100% (19797/19797), done.

Komut Dosyaları

Sık gerçekleştirilen görevleri kolaylaştırmak için script klasöründe bazı komut dosyaları oluşturmak isteyebilirsiniz. Bu, önyüklemeyi oluşturma, derleme, kod çalıştırma işlemi yapma gibi görevler için komut dosyaları ve GitHub CI kontrolleri için bir test komut dosyası içerebilir.

Aşağıda, mevcut platform veri havuzlarının çoğu için standart olan bazı komut dosyası örnekleri verilmiştir.

bootstrap

Bu komut dosyası, donanım platformunuzun gerektirdiği tüm araçları ve paketleri yüklemelidir. Ayrıca kullanıcının OpenThread yığınını oluşturmak için gereken her şeye sahip olması için openthread's bootstrap komut dosyasını da yürütmelidir.

Örnek için ot-efr32 içindeki bootstrap komut dosyasına bakın.

build

CMake derleme komut dosyası, kullanıcıların platformunuz için OpenThread yığını oluşturmasına izin vermelidir. Deponuz herhangi bir örnek uygulama tanımlıyorsa bu komut dosyası da bu uygulamaları derlemelidir. Bu komut dosyası, platforma özgü makro tanımları dahil olmak üzere temel sistem yapılandırma seçeneklerini içermelidir.

Örnek için ot-efr32 içindeki oluşturma komut dosyasına bakın.

test

Test komut dosyaları, kullanıcıların tanımladığınız herhangi bir testi kullanarak değişiklikleri test etmesi yararlı olabilir. Bu, onay kontrolü derlemeleri çalıştırmak kadar basit veya birim testi paketi başlatmak kadar karmaşık olabilir.

ot-efr32'da komut dosyası, efr32 platformlarının her birinde, desteklenen her pano için build komut dosyasını yürütür.

Örnek için ot-efr32 içindeki test komut dosyasına bakın.

make-pretty

Bu komut dosyası, tutarlı bir stil korumak için kodu, komut dosyalarını ve markdown dosyalarını biçimlendirmelidir.

Bu komut dosyasını kendiniz tanımlayabilirsiniz, ancak mevcut platform depolarının kullandığı make-pretty komut dosyasını kullanmak en kolay yol olabilir. Komut dosyası, openthread&#39'un stil komut dosyalarını çağırır ve tüm OpenThread veri havuzlarında tutarlı bir stil sağlanmasına yardımcı olur.

Bağlayıcı komut dosyası yapılandırması

GNU Bağlayıcı komut dosyası, giriş dosyalarındaki (GNU Derleyici Toplama (GCC) tarafından oluşturulan .o "Object" dosyaları) tüm bölümleri son çıkış dosyasına (örneğin, .elf) nasıl eşleyeceğinizi açıklar. Ayrıca, yürütülebilir bir programın her segmentinin depolama konumunu ve giriş adresini belirler. Platforma özgü bağlayıcı komut dosyası genellikle platformun BSP'si tarafından sağlanır.

ld aracını, src/CMakeLists.txt platformundaki CMake hedefinizde target_link_libraries kullanarak platforma özgü bağlayıcı komut dosyasını işaret edecek şekilde yapılandırın:

set(LD_FILE "${CMAKE_CURRENT_SOURCE_DIR}/efr32mg12.ld")

target_link_libraries(openthread-efr32mg12
    PRIVATE
        ot-config
    PUBLIC
        -T${LD_FILE}
        -Wl,--gc-sections -Wl,-Map=$.map
)

Araç zinciri başlangıç kodu

Araç zinciri başlangıç kodu genellikle platformun BSP'si ile birlikte sağlanır. Bu kod genellikle:

  1. Yürütülebilir programın giriş işlevini (Reset_Handler) uygular
  2. Vektörü kesme tablosunu tanımlar
  3. Yığın ve Yığını başlatır
  4. .data bölümünü kalıcı olmayan bellekten RAM'e kopyalar
  5. Uygulama mantığını yürütmek için uygulama ana işlevine atlar

Başlangıç kodu (C veya derleme kaynağı kodu), platformunuzun openthread-platform-name kitaplığına eklenmelidir. Aksi takdirde, bağlayıcı komut dosyasında kullanılan bazı temel değişkenler doğru şekilde tırnak içine alınamaz:

  • src/CMakeLists.txt

Örnek: ot-cc2538 içinde startup-gcc.c - src/CMakeLists.txt

add_library(openthread-cc2538
    alarm.c
...
    startup-gcc.c
...
    system.c
    logging.c
    uart.c
    $
)