Google は、黒人コミュニティのための人種的公平の促進に取り組んでいます。詳細をご覧ください。

ビルド環境を設定する

GitHub でソースを見る

自由でオープンな開発を促すため、OpenThread はビルド ツールチェーンで CMake を使用しています。現在、このツールチェーンは OpenThread を新しいハードウェア プラットフォームに移植するために必要です。

他のビルド ツールチェーンは今後サポートされる可能性がありますが、この移植ガイドでは扱いません。

新しいリポジトリを作成する

まず、ハードウェア プラットフォーム用に新しい家をセットアップします。このガイドでは、ot-efr32 という名前の新しいリポジトリを作成します。このリポジトリには、プラットフォーム抽象化レイヤ、ハードウェア プラットフォームの SDK、便利なスクリプトが含まれています。

この例では、GitHub に SiliconLabs/ot-efr32 リポジトリを作成し、~/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

リポジトリの構成

OpenThread GitHub 組織の既存のプラットフォーム リポジトリとの整合性を保つために、次のようにリポジトリを構造化することをおすすめします。

tree -F -L 1 --dirsfirst
.
├── examples/
├── openthread/
├── script/
├── src/
├── third_party/
├── CMakeLists.txt
├── LICENSE
└── README.md
フォルダ 説明
examples 省略可: 申請例
openthread サブモジュールとしての openthread リポジトリ
script ビルド、テスト、lint チェックのスクリプト
src プラットフォーム抽象化レイヤの実装
third_party サードパーティの提供元の場所

サブモジュールを追加する

次のステップでは、openthread と必要なその他のリポジトリをサブモジュールとして追加します。

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.

この例では、third_party のサブモジュールとして Silicon Labs Gecko SDK の軽量版を追加します。

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.

スクリプト

一般的なタスクを簡単に実行するには、script フォルダ内にいくつかのスクリプトを作成します。これには、ブートストラップ、コードリンターのビルド、実行、GitHub CI チェック用のテスト スクリプトなどのタスク用のスクリプトが含まれる場合があります。

以下に、既存のプラットフォーム リポジトリのほとんどで標準的なスクリプトの例を示します。

bootstrap

このスクリプトでは、ハードウェア プラットフォームに必要なすべてのツールとパッケージをインストールする必要があります。また、openthread のブートストラップ スクリプトを実行して、ユーザーに OpenThread スタックのビルドに必要なすべてのものがあることを確認します。

ot-efr32ブートストラップ スクリプトの例をご覧ください。

build

CMake ビルド スクリプトで、ユーザーがプラットフォームの OpenThread スタックをビルドできるようにします。リポジトリでサンプル アプリケーションを定義する場合、このスクリプトでもアプリケーションが作成されます。このスクリプトには、プラットフォーム固有のマクロ定義を含め、基本的なシステム構成オプションを含める必要があります。

例については、ot-efr32ビルド スクリプトをご覧ください。

test

テスト スクリプトでは、定義したテストを使用して変更をテストすることができます。サニティ チェック ビルドを実行するような単純なものもあれば、単体テストスイートを起動するような複雑なものもあります。

ot-efr32 では、efr32 プラットフォームごとに、サポートされているすべてのボードに対して build スクリプトが実行されます。

ot-efr32テスト スクリプトの例をご覧ください。

make-pretty

一貫したスタイルを維持するには、このスクリプトでコード、スクリプト、マークダウン ファイルをフォーマットする必要があります。

このスクリプトを自分で定義することもできますが、既存のプラットフォーム リポジトリが使用している make-pretty スクリプトを使用するのが最も簡単です。このスクリプトは、openthread のスタイル スクリプトを呼び出して、すべての OpenThread リポジトリで一貫したスタイルを実現します。

リンカー スクリプトの構成

GNU Linker スクリプトでは、入力ファイル(GNU Compiler Collection(GCC)で生成された .o「object」ファイル)のすべてのセクションを最終出力にマッピングする方法を説明します。ファイル(.elf など)に置き換わります。また、実行可能プログラムの各セグメントの保存場所とエントリ アドレスも決定します。通常、プラットフォーム固有のリンカー スクリプトは、プラットフォームの BSP で提供されます。

src/CMakeLists.txt のプラットフォーム CMake ターゲットで target_link_libraries を使用して、プラットフォーム固有のリンカー スクリプトを指すように ld ツールを構成します。

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
)

ツールチェーンのスタートアップ コード

多くの場合、ツールチェーンのスタートアップ コードはプラットフォームの BSP とともに提供されます。通常、このコードには次のような変更が含まれています。

  1. 実行可能プログラムのエントリ関数(Reset_Handler)を実装します。
  2. 割り込みベクタ テーブルを定義する
  3. ヒープとスタックを初期化する
  4. .data セクションを不揮発性メモリから RAM にコピーします。
  5. アプリケーション ロジックを実行するアプリケーションのメイン関数にジャンプします

スタートアップ コード(C またはアセンブリ ソースコード)は、プラットフォームの openthread-platform-name ライブラリに含める必要があります。そうしないと、リンカー スクリプトで使用される一部のキー変数を正しく引用符で囲むことができません。

  • src/CMakeLists.txt

: startup-gcc.cot-cc2538) - src/CMakeLists.txt

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