Skonfiguruj środowisko kompilacji

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Wyświetl źródło na GitHubie

Aby promować wolny i otwarty projekt, OpenThread używa CMake w łańcuchu narzędzi do kompilacji. Obecnie ten łańcuch narzędzi jest wymagany do przenoszenia OpenOpen na nową platformę sprzętową.

W przyszłości mogą być obsługiwane inne łańcuchy narzędzi kompilacji, ale nie wchodzą one w zakres tego przewodnika przenoszenia.

Utwórz nowe

Pierwszym krokiem jest konfiguracja nowej platformy sprzętowej. W tym przewodniku utworzymy nowe repozytorium o nazwie ot-efr32, które zawiera warstwę abstrakcji platformy, pakiet SDK platformy i kilka przydatnych skryptów.

W tym przykładzie utworzyliśmy repozytorium SiliconLabs/ot-efr32 na GitHubie i skopiujemy je do ~/repos/ot-efr32.

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

Struktura repozytorium

Aby zachować spójność z istniejącymi repozytoriami platform należącym do organizacji OpenThread GitHub, możesz utworzyć taką strukturę repozytorium:

tree -F -L 1 --dirsfirst
.
├── examples/
├── openthread/
├── script/
├── src/
├── third_party/
├── CMakeLists.txt
├── LICENSE
└── README.md
Folder Opis
examples opcjonalne przykładowe aplikacje.
openthread Repozytorium openthread jako moduł podrzędny
script Skrypty do tworzenia, testowania i lintingu
src Implementacja warstwy abstrakcji na platformie
third_party Lokalizacja źródeł zewnętrznych

Dodaj moduły podrzędne

Następnym krokiem jest dodanie openthread i innych wymaganych repozytoriów jako podrzędnych modułów

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.

W tym przykładzie na stronie podrzędnej modułu third_party dodamy pakiet SDK Silicon Labs Gecko jako moduł podrzędny.

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.

Skrypty

Aby ułatwić wykonywanie typowych zadań, możesz utworzyć skrypty w folderze script. Może to obejmować skrypty dla takich zadań jak rozruch, tworzenie, uruchamianie linter-code i testowanie skryptu na potrzeby testów CI GitHub.

Poniżej znajdziesz kilka przykładów skryptów standardowych dla większości repozytoriów repozytoriów.

bootstrap

Ten skrypt powinien zainstalować wszystkie narzędzia i pakiety wymagane przez platformę sprzętową. Powinien też uruchomić skrypt startowy openthread&#39s, aby mieć pewność, że użytkownik ma wszystko, czego potrzeba do utworzenia stosu OpenThread.

Przykład znajdziesz w skrypcie rozruchu w ot-efr32.

build

Skrypt kompilacji CMake powinien umożliwiać użytkownikom tworzenie stosu OpenThread na potrzeby Twojej platformy. Jeśli w repozytorium zdefiniowane są przykładowe aplikacje, ten skrypt również powinien je tworzyć. Ten skrypt powinien zawierać podstawowe opcje konfiguracji systemu, w tym wszelkie definicje makr dla danej platformy.

Przykład znajdziesz w skrypcie kompilacji w ot-efr32.

test

Skrypt testowy może być przydatny w testowaniu zmian za pomocą zdefiniowanych przez Ciebie testów. Może to być tak wszystko, jak uruchomienie kompilacji z wykorzystaniem walidacji lub tak skomplikowane, jak uruchomienie pakietu testów jednostkowych.

W ot-efr32 skrypt po prostu wykonuje skrypt build dla każdej obsługiwanej tablicy na każdej platformie frfr222.

Przykład znajdziesz w skrypcie testowym w ot-efr32.

make-pretty

Aby zachować spójny styl, powinien on formatować kod, pliki i pliki Markdown.

Możesz zdefiniować ten skrypt samodzielnie, ale najprościej jest użyć skryptu make-pretty używanego przez istniejące repozytoria na platformie. Skrypt uruchamia skrypt openthread i umożliwia ujednolicenie stylu we wszystkich repozytoriach OpenThread.

Konfiguracja skryptu tagu łączącego

Skrypt łącznika GNU opisuje sposób mapowania wszystkich sekcji w plikach wejściowych (.o "object" pliki wygenerowane przez zbiór GNU Compiler Collection (GCC)) do ostatecznego pliku wyjściowego (na przykład .elf). Określa też lokalizację przechowywania każdego segmentu programu wykonawczego, a także adres wpisu. Skrypt łączący z określoną platformą jest często udostępniany za pomocą BSP platformy.

Skonfiguruj narzędzie ld tak, aby wskazywało na skrypt łączący z konkretną platformą przy użyciu target_link_libraries w miejscu docelowym CMake Twojej platformy w src/CMakeLists.txt:

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
)

Kod startowy łańcucha narzędzi

Ten kod często jest dołączona do BSP platformy. Zazwyczaj ten kod:

  1. Implementuje funkcję wpisu (Reset_Handler) programu wykonywalnego
  2. Definiuje tabelę wektorową przerw
  3. Inicjuje stertę i stos
  4. Kopiuje sekcję .data z pamięci ulotnej do pamięci RAM
  5. Przechodzi do głównej funkcji aplikacji, aby wykonać logikę aplikacji

Kod startowy (C lub kod źródłowy zestawu) musi być dodany do Twojej biblioteki na platformie openthread-platform-name. W przeciwnym razie niektóre zmienne kluczowe użyte w skrypcie tagu łączącego nie mogą być prawidłowo cytowane:

  • src/CMakeLists.txt

Przykład: startup-gcc.c w: ot-cc2538src/CMakeLists.txt

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