Konfigurowanie środowiska kompilacji

Wyświetl źródło w GitHub

Aby promować darmowe i otwarte programowanie, OpenThread wykorzystuje CMake w narzędziu do tworzenia kompilacji. Obecnie te narzędzia są potrzebne do przeniesienia OpenOpen na nową platformę sprzętową.

Inne narzędzia do tworzenia kompilacji mogą być obsługiwane w przyszłości, ale nie są uwzględnione w tym przewodniku dotyczącym przenoszenia.

Utwórz nowe

Pierwszym krokiem jest skonfigurowanie nowej platformy dla platformy sprzętowej. W tym przewodniku utworzymy nowe repozytorium o nazwie ot-efr32 zawierające warstwę abstrakcji platformy, pakiet SDK platformy sprzętowej i kilka przydatnych skryptów.

W tym przykładzie utworzyliśmy na GitHubie repozytorium SiliconLabs/ot-efr32 i skopiowaliśmy 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 platformy w organizacji OpenThread GitHub, możesz utworzyć strukturę repozytorium w następujący sposób:

tree -F -L 1 --dirsfirst
.
├── examples/
├── openthread/
├── script/
├── src/
├── third_party/
├── CMakeLists.txt
├── LICENSE
└── README.md
Folder Opis
examples Opcjonalne Przykładowe zastosowania
openthread repozytorium openthread jako moduł podrzędny,
script Skrypty do budowania, testowania i linowania
src Implementacja z użyciem warstwy abstrakcji platformy
third_party Lokalizacja dla zewnętrznych źródeł

Dodaj moduły podrzędne

Następnym krokiem jest dodanie modułu openthread i innych wymaganych repozytorium jako podmodułó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 dodamy uproszczoną wersję pakietu SDK Silicon Labs Gecko jako moduł podrzędny third_party.

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 czynności, możesz utworzyć kilka skryptów w folderze script. Może to obejmować skrypty do wykonywania takich zadań jak rozruch, tworzenie, uruchamianie kodu (linter) czy skrypt testowy na potrzeby kontroli CI w GitHubie.

Poniżej znajdziesz kilka przykładowych skryptów typowych dla większości istniejących repozytoriów platformy.

bootstrap

Powinien on zainstalować wszystkie narzędzia i pakiety wymagane przez platformę sprzętową. Powinno to też wykonać skrypt rozruchowy openthread, aby upewnić się, że użytkownik ma wszystko, co jest potrzebne do utworzenia stosu OpenThread.

Przykład znajdziesz w skrypcie shoestrap script w ot-efr32.

build

Skrypt kompilacji CMake powinien pozwolić użytkownikom na utworzenie stosu OpenThread dla Twojej platformy. Jeśli Twoje repozytorium definiuje jakiekolwiek przykładowe aplikacje, one również powinny zostać utworzone przez ten skrypt. Skrypt ten 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 dla użytkowników podczas testowania zmian za pomocą zdefiniowanych przez Ciebie testów. Może to być prosty proces, na przykład używanie kompilacji z przejrzystymi kontrolami, lub tak skomplikowany proces, jak uruchamianie pakietu do testowania jednostki.

W ot-efr32 skrypt po prostu wykonuje skrypt build na każdej obsługiwanej tablicy w ramach każdej platformy EF32.

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

make-pretty

Aby zachować spójność w stylu, skrypt powinien formatować kod, skrypty i pliki znaczników.

Możesz samodzielnie zdefiniować ten skrypt, ale najprościej będzie użyć skryptu make-pretty używanego przez istniejącą platformę. Skrypt wywołuje skrypty stylu openthread i pomaga zapewnić spójny styl we wszystkich repozytoriach OpenThread.

Konfiguracja skryptu tagu łączącego

Skrypt GNU Linker opisuje sposób mapowania wszystkich sekcji w plikach wejściowych (.o plików „object” wygenerowanych przez GNU Compiler Collection (GCC)) na ostateczne dane wyjściowe. (np. .elf). Określa też lokalizację zapisu każdego segmentu programu wykonywalnego i adres wejścia. Skrypt łączący z daną platformą jest często dostarczany przez platformę BSP.

Skonfiguruj narzędzie ld tak, aby wskazywało skrypt łączący z konkretną platformą, korzystając z metody target_link_libraries na platformie CMake na platformie 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 uruchamiania narzędzia Toolchain

Kod uruchamiania narzędzia jest często dostarczany wraz z BSP platformy. Ten kod zazwyczaj:

  1. Implementuje funkcję wpisu (Reset_Handler) programu wykonywalnego
  2. Określa tabelę wektorów
  3. Inicjuje stertę i stos
  4. Kopiuje sekcję .data z pamięci niezmiennej do pamięci RAM
  5. Przechodzenie do głównej funkcji aplikacji w celu wykonania logiki aplikacji

Kod startowy (C lub kod źródłowy zestawu) musi być zawarty w bibliotece openthread-platform-name Twojej platformy. W przeciwnym razie niektóre zmienne kluczowe użyte w skrypcie tagu łączącego nie mogą zostać ujęte prawidłowo:

  • 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
    $
)