Derleme Ortamını Ayarlama

Kaynağı GitHub'da göster

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

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

Yeni depo oluşturma

İ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ç 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 konumuna 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ığı sağlamak için deponuzu aşağıdaki gibi yapılandırmak isteyebilirsiniz:

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 Oluşturma, test etme, tüy alma komut dosyaları
src Platform soyutlama katmanı uygulaması
third_party Tüm üçüncü taraf kaynakların konumu

Alt modül ekle

Sonraki adım, openthread dosyasını 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, third_party alanına Silicon Labs Gecko SDK'nın alt modülünün basit bir sürümünü 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ı

Genel görevleri kolaylaştırmak için script klasöründe bazı komut dosyaları oluşturabilirsiniz. Önyükleme, derleme, kod oluşturucu çalıştırma ve GitHub CI kontrolleri için test komut dosyası gibi görevler için komut dosyaları bu komuta dahil olabilir.

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

bootstrap

Bu komut dosyası, donanım platformunuz için gerekli olan 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 olduğundan emin olmak üzere openthread'in bootstrap komut dosyasını da yürütmelidir.

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

build

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

Örnek için ot-efr32'teki 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 için yararlı olabilir. Bu, sağlık denetimi derlemeleri çalıştırmak kadar basit veya birim test paketi başlatmak kadar karmaşık olabilir.

ot-efr32'de komut dosyası, efr32 platformlarının her birinde desteklenen her pano için build komut dosyasını çalıştırır.

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

make-pretty

Bu komut dosyası, tutarlı stili 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 yöntem olabilir. Komut dosyası, openthread stil komut dosyalarını çağırır ve tüm OpenThread kod depolarında tutarlı stilin sağlanmasına yardımcı olur.

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

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

ld aracını, src/CMakeLists.txt içindeki platform CMake hedefinizde target_link_libraries kullanarak platforma özgü bağlayıcı komut dosyasına 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'siyle 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ığını başlatır
  4. .data bölümünü geçici olmayan bellekten RAM'e kopyalar
  5. Uygulama mantığını yürütmek için uygulama ana işlevine gider

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 alıntılanamaz:

  • src/CMakeLists.txt

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

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