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 OpenThread'i yeni bir donanım platformuna taşımak için bu araç zinciri gereklidir.

Gelecekte diğer derleme araç zincirleri de desteklenebilir ancak bu taşıma kılavuzunun kapsamı dışındadır.

kullanılmaktadır.

Yeni depo oluşturma

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

Bu örnekte, GitHub'da SiliconLabs/ot-efr32 deposunu oluşturup ~/repos/ot-efr32'ye 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 depolarıyla tutarlılığı korumak için deponuzu aşağıdaki gibi 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 etme ve linting için komut dosyaları
src Platform soyutlama katmanı uygulaması
third_party Üçüncü taraf kaynakların konumu

Alt modül ekleme

Sonraki adım, openthread 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 hafif bir sürümünü third_party'e 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 yapılan görevleri kolaylaştırmak için script klasöründe bazı komut dosyaları oluşturabilirsiniz. Bu, ilk başlatma, derleme, kod temizleyici çalıştırma gibi görevler için komut dosyaları ve GitHub CI kontrolleri için bir test komut dosyası içerebilir.

Aşağıda, mevcut platform depolarının çoğunda standart olan komut dosyalarına ilişkin bazı örnekler verilmiştir.

bootstrap

Bu komut dosyası, donanım platformunuzun gerektirdiği tüm araçları ve paketleri yükler. Ayrıca, kullanıcının OpenThread yığınını oluşturmak için gereken her şeye sahip olduğundan emin olmak amacıyla openthread'nin önyükleme komut dosyasını da yürütmelidir.

Örnek için ot-efr32 içindeki önyükleme komut dosyasına bakın.

build

CMake derleme komut dosyası, kullanıcıların platformunuz için OpenThread yığınını derlemesine olanak tanımalıdır. Deponuzda örnek uygulamalar tanımlanmışsa bu komut dosyası bunları da oluşturur. Bu komut dosyası, platforma özgü makro tanımları da dahil olmak üzere temel sistem yapılandırma seçeneklerini içermelidir.

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

test

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

ot-efr32 komut dosyasında, komut dosyası yalnızca efr32 platformlarının her birinde desteklenen her kart için build komut dosyasını yürütür.

Örnek için ot-efr32 bölümündeki test komut dosyasına bakın.

make-pretty

Bu komut dosyası, tutarlı bir stil sağlamak için kod, komut dosyası 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 seçenek olabilir. Komut dosyası, openthread'ın stil komut dosyalarını çağırır ve tüm OpenThread depolarında tutarlı bir stilin sağlanmasına yardımcı olur.

Bağlantı oluşturucu komut dosyası yapılandırması

GNU Bağlayıcı komut dosyası, giriş dosyalarındaki tüm bölümlerin (GNU Derleyici Koleksiyonu (GCC) tarafından oluşturulan .o "nesne" dosyaları) nihai çıkış dosyasıyla (ör. .elf) nasıl eşleneceğini açıklar. Ayrıca, yürütülebilir bir programın her segmentinin depolama konumunu ve giriş adresini belirler. Platforma özel bağlayıcı komut dosyası genellikle platformun BSP'siyle birlikte sağlanır.

ld aracını, src/CMakeLists.txt'deki platform 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ç seti başlangıç kodu

Araç seti başlatma 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. Kesme vektörü tablosunu tanımlar
  3. Yığın ve yığınları başlatır.
  4. .data bölümünü kalıcı bellekten RAM'e kopyalar
  5. Uygulama mantığını yürütmek için uygulamanın ana işlevine atlar.

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

  • src/CMakeLists.txt

Örnek: ot-cc2538'da startup-gcc.c - src/CMakeLists.txt

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