Google is committed to advancing racial equity for Black communities. See how.
Trang này được dịch bởi Cloud Translation API.
Switch to English

Thiết lập môi trường xây dựng

Để thúc đẩy phát triển tự do và mở, OpenThread sử dụng GNU Autotools trong chuỗi công cụ xây dựng. Hiện tại, chuỗi công cụ này là bắt buộc để chuyển OpenThread sang một nền tảng phần cứng mới.

Các mã công cụ xây dựng khác có thể được hỗ trợ trong tương lai, nhưng hiện không nằm trong phạm vi của hướng dẫn chuyển này.

GNU Autoconf

Tập lệnh Autoconf chứa các tùy chọn cấu hình hệ thống cơ bản, bao gồm các định nghĩa macro tương đối nền tảng cụ thể. Các macro này có thể được sử dụng để biên dịch có điều kiện trong các Makefiles khác trong giai đoạn trước khi biên dịch.

Tập lệnh OpenThread Autoconf được đặt tại: /openthread/configure.ac

Tên ví dụ nền tảng

Trong AC_ARG_WITH(examples ...) , hãy thêm tên ví dụ nền tảng phần cứng mới. Tên phải được thêm theo thứ tự bảng chữ cái.

Thí dụ:

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])

Biểu tượng tiền xử lý C dành riêng cho nền tảng

Xác định ký hiệu tiền xử lý C dành riêng cho nền tảng cho ví dụ nền tảng và hiển thị nó.

Biểu tượng tiền xử lý C dành riêng cho nền tảng được hiển thị tại include/openthread-config.h . Bằng cách bao gồm biểu tượng trong tệp tiêu đề này, chúng tôi có thể tận dụng nó trong mã nguồn của chúng tôi cho các trường hợp biên dịch có điều kiện của bộ xử lý trước.

Thí dụ:

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"])

Thư mục đầu ra Makefile

Trong macro AC_CONFIG_FILES , thêm thư mục đầu ra Makefile cho ví dụ nền tảng.

Thí dụ:

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

GNU Automake

Tạo và sửa đổi các tệp Automake để hỗ trợ ví dụ nền tảng mới.

Các tệp Automake dành riêng cho nền tảng sau đây cần được tạo:

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

Xem /examples về các triển khai mẫu của các tệp này.

Các tệp Automake sau cũng cần được cập nhật thông tin nền tảng của bạn:

Cấu hình tập lệnh trình liên kết

Tập lệnh GNU Linker mô tả cách ánh xạ tất cả các phần trong tệp đầu vào (tệp .o "đối tượng" được tạo bởi Bộ sưu tập trình biên dịch GNU (GCC)) với tệp đầu ra cuối cùng (ví dụ: chính .elf ). Nó cũng xác định vị trí lưu trữ của từng phân đoạn của một chương trình thực thi, cũng như địa chỉ mục nhập. Tập lệnh trình liên kết dành riêng cho nền tảng thường được cung cấp cùng với BSP của nền tảng.

Định cấu hình công cụ ld để trỏ đến tập lệnh trình liên kết dành riêng cho nền tảng bằng cách sử dụng tùy chọn -T của biến LDADD_COMMON .

Tạo /openthread/examples/platforms/ platform-name /Makefile.platform.am và trỏ nền tảng mới tới tập lệnh trình liên kết của nó:

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

Thêm cấu hình tập lệnh trình liên kết của nền tảng vào tiện ích /openthread/examples/platforms/Makefile.platform.am Makefile:

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

Cấu hình thư mục con

Sửa đổi /openthread/examples/platforms/Makefile.am để định cấu hình các thư mục con gói cho ví dụ nền tảng mới.

Thêm tên thư mục con của nền tảng vào danh sách cho make dist , theo thứ tự bảng chữ cái:

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

Nối tên thư mục con của nền tảng vào biến SUBDIRS :

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

Mã khởi động chuỗi công cụ

Mã khởi động chuỗi công cụ thường được cung cấp cùng với BSP của nền tảng. Mã này thường:

  1. Triển khai chức năng nhập ( Reset_Handler ) của chương trình thực thi
  2. Xác định bảng vectơ ngắt
  3. Khởi tạo Heap và Stack
  4. Sao chép phần .data từ bộ nhớ không bay hơi vào RAM
  5. Chuyển đến chức năng chính của ứng dụng để thực thi logic ứng dụng

Mã khởi động (C hoặc mã nguồn lắp ráp) phải được thêm vào Makefile.am dành riêng cho nền tảng, nếu không một số biến chính được sử dụng trong tập lệnh trình liên kết không thể được trích dẫn chính xác:

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

Thí dụ:

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 \