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

ビルド環境をセットアップする

GitHubでソースを表示

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

他のビルドツールチェーンは将来サポートされる可能性がありますが、これらはこの移植ガイドの範囲内ではありません。

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

最初のステップは、ハードウェアプラットフォーム用の新しいホームをセットアップすることです。このガイドでは、という名前の新しいリポジトリ作成されますot-efr32プラットフォーム抽象化層、ハードウェアプラットフォームのSDK、およびいくつかの便利なスクリプトが含まれています。

この例では、作成したシリコン・ラボラトリーズ/ OT-efr32のGitHub上のリポジトリをし、それをクローン~/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構築、テスト、リンティングのためのスクリプト
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.

この例では、内サブモジュールとしてシリコン・ラボラトリーズのGecko SDKのliteのバージョンを追加することがあります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.

スクリプト

一般的なタスクを簡単にするために、あなたは、いくつかのスクリプトを作成することもできますscriptフォルダ。これには、ブートストラップ、ビルド、コードリンターの実行などのタスクのスクリプト、およびGitHubCIチェックのテストスクリプトが含まれる場合があります。

以下は、既存のプラットフォームリポジトリのほとんどで標準となっているスクリプトの例です。

bootstrap

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

参照ブートストラップスクリプトot-efr32例えば。

build

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

参照してくださいビルドスクリプトot-efr32例えば。

test

テストスクリプトは、ユーザーが定義したテストを使用して変更をテストするのに役立つ場合があります。これは、健全性チェックビルドを実行するような単純なものから、単体テストスイートを起動するような複雑なものまであります。

ではot-efr32 、スクリプトは単に実行しbuild efr32の各プラットフォーム上のすべてのサポートボード用のスクリプトを。

参照テストスクリプトot-efr32例えば。

make-pretty

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

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

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

GNUリンカスクリプトは、入力ファイル内のすべてのセクション(マッピングする方法について説明し.o (例えば、最終的な出力ファイルにGNUコンパイラコレクション(GCC)によって生成された「オブジェクト」ファイル) .elf )。また、実行可能プログラムの各セグメントの格納場所、およびエントリアドレスも決定します。プラットフォーム固有のリンカースクリプトは、多くの場合、プラットフォームのBSPで提供されます。

設定しld使用して、プラットフォーム固有のリンカスクリプトを指すようにツールtarget_link_librariesして、ご使用のプラットフォームCMakeのターゲット上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
)

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

ツールチェーンの起動コードは、多くの場合、プラットフォームのBSPとともに提供されます。このコードは通常、次のとおりです。

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

スタートアップコード(Cまたはアセンブリのソースコード)は、お使いのプラットフォームの中に含まれていなければならないopenthread- platform-nameそれ以外のリンカスクリプトで使用されるいくつかの重要な変数が正しく引用符で囲むことができない、図書館:

  • src/CMakeLists.txt

startup-gcc.cにおけるot-cc2538 - src/CMakeLists.txt

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