Google is committed to advancing racial equity for Black communities. See how.
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

Derleme Ortamını Kurun

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

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

Diğer yapı araç zincirleri gelecekte desteklenebilir, ancak bunlar bu taşıma kılavuzunun kapsamında değildir.

GNU Autoconf

Autoconf komut dosyası, belirli platforma bağlı makro tanımları dahil olmak üzere temel sistem yapılandırma seçeneklerini içerir. Bu makrolar, ön derleme aşamasında diğer Makefile dosyalarında koşullu derlemeye maruz bırakılabilir.

OpenThread Autoconf komut dosyası şu adreste bulunur: /openthread/configure.ac

Platform örnek adı

AC_ARG_WITH(examples ...) makrosunda, yeni donanım platformu örnek adını ekleyin. İsim alfabetik sıraya göre eklenmelidir.

Misal:

AC_ARG_WITH(examples,
    [AS_HELP_STRING([--with-examples=TARGET],
        [Specify the examples from one of: none, simulation, cc2538, cc2650, efr32, nrf52840 @<:@default=none@:>@.])],
    [
        case "${with_examples}" in 
        none)
            ;;
        simulation|cc2538|cc2650|efr32|nrf52840)
            if test ${enable_posix_app} = "yes"; then
                AC_MSG_ERROR([--with-examples must be none when POSIX apps are enabled by --enable-posix-app])
            fi
            ;;
        *)
            AC_MSG_ERROR([Invalid value ${with_examples} for --with-examples])
            ;;
        esac
    ],
    [with_examples=none])

Platforma özgü C ön işlemci sembolü

Platform örneği için platforma özgü bir C önişlemci sembolü tanımlayın ve bunu açığa çıkarın.

Platforma özgü C ön işlemci sembolü include/openthread-config.h . Sembolü bu başlık dosyasına ekleyerek, önişlemci koşullu derleme durumları için kaynak kodumuzda onu kullanabiliriz.

Misal:

case ${with_examples} in
 
    ...
 
    efr32)
        OPENTHREAD_EXAMPLES_EFR32=1
        AC_DEFINE_UNQUOTED([OPENTHREAD_EXAMPLES_EFR32],[${OPENTHREAD_EXAMPLES_EFR32}],[Define to 1 if you want to use efr32 examples])
        ;;
 
...
 
esac
 
...
 
AC_SUBST(OPENTHREAD_EXAMPLES_EFR32)
AM_CONDITIONAL([OPENTHREAD_EXAMPLES_EFR32], [test "${OPENTHREAD_EXAMPLES}" = "efr32"])

Makefile çıktı dizini

AC_CONFIG_FILES makrosunda, platform örneği için bir Makefile çıktı dizini ekleyin.

Misal:

AC_CONFIG_FILES ([
       examples/platforms/efr32/Makefile
])

GNU Automake

Yeni platform örneğini desteklemek için Automake dosyalarını oluşturun ve değiştirin.

Aşağıdaki platforma özgü Automake dosyalarının oluşturulması gerekir:

  • /openthread/examples/Makefile- platform-name
  • /openthread/examples/platforms/ platform-name /Makefile.am
  • /openthread/examples/platforms/ platform-name /Makefile.platform.am

Bu dosyaların örnek uygulamaları için /examples bakın.

Aşağıdaki Automake dosyalarının da platform bilgilerinizle güncellenmesi gerekir:

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

GNU Bağlayıcı betiği, girdi dosyalarındaki tüm bölümlerin (GNU Derleyici Koleksiyonu (GCC) tarafından oluşturulan .o "nesne" dosyaları) nihai çıktı dosyasına (örneğin, .elf ) nasıl .elf . Ayrıca, çalıştırılabilir bir programın her bölümünün depolama konumunu ve ayrıca giriş adresini belirler. Platforma özgü bağlayıcı komut dosyası genellikle platformun BSP'si ile sağlanır.

LDADD_COMMON değişkeninin -T seçeneğini kullanarak ld aracını platforma özel bağlayıcı komut dosyasını LDADD_COMMON şekilde LDADD_COMMON .

/openthread/examples/platforms/ platform-name /Makefile.platform.am ve yeni platformu bağlayıcı komut dosyasına yönlendirin:

if OPENTHREAD_EXAMPLES_EFR32
    LDADD_COMMON                                                      += \
    $(top_builddir)/examples/platforms/efr32/libopenthread-efr32.a       \
    $(top_srcdir)/third_party/silabs/gecko_sdk_suite/v1.0/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg12_gcc_release.a \
    $(NULL)
 
LDFLAGS_COMMON                                                        += \
    -T $(top_srcdir)/third_party/silabs/gecko_sdk_suite/v1.0/platform/Device/SiliconLabs/EFR32MG12P/Source/GCC/efr32mg12p.ld \
    $(NULL)
endif # OPENTHREAD_EXAMPLES_EFR32

Platformun bağlayıcı komut dosyası yapılandırmasını /openthread/examples/platforms/Makefile.platform.am yardımcı programı Makefile'a /openthread/examples/platforms/Makefile.platform.am :

if OPENTHREAD_EXAMPLES_EFR32
include $(top_srcdir)/examples/platforms/efr32/Makefile.platform.am
endif

Alt dizin yapılandırması

Yeni platform örneği için paket alt dizinlerini yapılandırmak üzere /openthread/examples/platforms/Makefile.am değiştirin.

make dist için listeye platform alt dizin adını alfabetik sırayla ekleyin:

# Always package (e.g. for 'make dist') these subdirectories.
 
DIST_SUBDIRS                           = \
    cc2538                               \
    cc2650                               \
    efr32                                \
    nrf52840                             \
    simulation                           \
    utils                                \
    $(NULL)

SUBDIRS değişkenine platform alt dizin adını ekleyin:

# Always build (e.g. for 'make all') these subdirectories.
 
if OPENTHREAD_EXAMPLES_EFR32
    SUBDIRS                           += efr32
endif

Araç zinciri başlangıç ​​kodu

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

  1. Çalıştırılabilir programın giriş işlevini ( Reset_Handler ) Reset_Handler
  2. Kesinti 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 atlar

Başlangıç ​​kodu (C veya derleme kaynak kodu) platforma özgü Makefile.am eklenmelidir, aksi takdirde bağlayıcı komut dosyasında kullanılan bazı anahtar değişkenler doğru şekilde alıntılanamaz:

  • /openthread/examples/platforms/ platform-name /Makefile.am

Misal:

libopenthread_efr32_a_SOURCES   =  \
@top_builddir@/third_party/silabs/gecko_sdk_suite/v1.0/hardware/kit/common/bsp/bsp_bcc.c \
@top_builddir@/third_party/silabs/gecko_sdk_suite/v1.0/hardware/kit/common/bsp/bsp_stk.c \
@top_builddir@/third_party/silabs/gecko_sdk_suite/v1.0/platform/Device/SiliconLabs/EFR32MG12P/Source/system_efr32mg12p.c \
@top_builddir@/third_party/silabs/gecko_sdk_suite/v1.0/platform/Device/SiliconLabs/EFR32MG12P/Source/GCC/startup_efr32mg12p.c \