Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Siapkan Lingkungan Bangun

Lihat sumber di GitHub

Untuk mempromosikan pembangunan yang bebas dan terbuka, OpenThread menggunakan CMake dalam membangun toolchain. Saat ini, toolchain ini diperlukan untuk porting OpenThread ke platform perangkat keras baru.

Toolchain build lainnya mungkin didukung di masa mendatang, tetapi tidak termasuk dalam cakupan panduan porting ini.

Buat repositori baru

Langkah pertama adalah menyiapkan rumah baru untuk platform perangkat keras Anda. Dalam panduan ini, kita akan menciptakan sebuah repositori baru bernama ot-efr32 yang berisi platform lapisan abstraksi, SDK platform perangkat keras, dan beberapa skrip yang berguna.

Dalam contoh ini, kami menciptakan SiliconLabs / ot-efr32 repositori pada GitHub dan kloning ke ~/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

Struktur repositori

Untuk membantu menjaga konsistensi dengan repositori platform yang ada dalam organisasi OpenThread GitHub, Anda mungkin ingin struktur repositori Anda seperti:

tree -F -L 1 --dirsfirst
.
├── examples/
├── openthread/
├── script/
├── src/
├── third_party/
├── CMakeLists.txt
├── LICENSE
└── README.md
Map Keterangan
examples Contoh aplikasi opsional
openthread The openthread repositori sebagai submodule sebuah
script Skrip untuk membangun, menguji, linting
src Implementasi lapisan abstraksi platform
third_party Lokasi untuk sumber pihak ketiga mana pun

Tambahkan submodul

Langkah selanjutnya adalah menambahkan openthread dan lain repo diperlukan sebagai submodul

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.

Untuk contoh ini, kita akan menambahkan versi lite dari Silicon Labs Gecko SDK sebagai submodule di 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.

Skrip

Untuk membuat tugas umum lebih mudah, Anda mungkin ingin membuat beberapa script dalam script folder. Ini mungkin termasuk skrip untuk tugas seperti bootstrap, membangun, menjalankan linter kode, dan skrip uji untuk pemeriksaan GitHub CI.

Di bawah ini adalah beberapa contoh skrip yang merupakan standar untuk sebagian besar repositori platform yang ada.

bootstrap

Skrip ini harus menginstal semua alat dan paket yang diperlukan oleh platform perangkat keras Anda. Hal ini juga harus mengeksekusi openthread 's skrip bootstrap untuk memastikan bahwa pengguna memiliki segala yang dibutuhkan untuk membangun tumpukan OpenThread.

Lihat skrip bootstrap di ot-efr32 untuk contoh.

build

The CMake membangun script harus memungkinkan pengguna untuk membangun tumpukan OpenThread untuk platform Anda. Jika repositori Anda mendefinisikan aplikasi contoh apa pun, skrip ini juga harus membuatnya. Skrip ini harus berisi opsi konfigurasi sistem dasar, termasuk definisi makro khusus platform apa pun.

Lihat membangun script di ot-efr32 untuk contoh.

test

Skrip pengujian mungkin berguna bagi pengguna untuk menguji perubahan menggunakan pengujian apa pun yang telah Anda tetapkan. Ini bisa berupa apa saja yang sederhana seperti menjalankan build sanity-check atau serumit meluncurkan suite unit-test.

Dalam ot-efr32 , script hanya mengeksekusi build naskah untuk setiap papan didukung pada masing-masing efr32 platform.

Lihat tes script di ot-efr32 untuk contoh.

make-pretty

Untuk mempertahankan gaya yang konsisten, skrip ini harus memformat kode, skrip, dan file penurunan harga.

Anda dapat mendefinisikan naskah ini sendiri, tapi mungkin paling mudah untuk menggunakan make-pretty naskah yang repo platform yang ada gunakan. Script panggilan ke openthread script gaya 's dan membantu memastikan gaya yang konsisten di semua repositori OpenThread.

Konfigurasi skrip tautan

The GNU Linker Script menjelaskan cara untuk memetakan semua bagian dalam file input ( .o "objek" file yang dihasilkan oleh GNU Compiler Collection (GCC)) ke file output akhir (misalnya, .elf ). Ini juga menentukan lokasi penyimpanan setiap segmen dari program yang dapat dieksekusi, serta alamat entri. Skrip tautan khusus platform sering kali disertakan dengan BSP platform.

Mengkonfigurasi ld alat untuk titik untuk script linker platform tertentu menggunakan target_link_libraries pada platform Anda sasaran CMake di 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
)

Kode startup rantai alat

Kode startup Toolchain sering diberikan bersama dengan BSP platform. Kode ini biasanya:

  1. Implements fungsi entri ( Reset_Handler ) dari program dieksekusi
  2. Mendefinisikan tabel vektor interupsi
  3. Inisialisasi Heap dan Stack
  4. Salinan .data bagian dari non-volatile memori untuk RAM
  5. Melompat ke fungsi utama aplikasi untuk menjalankan logika aplikasi

Kode startup (C atau perakitan kode sumber) harus disertakan dalam platform yang Anda openthread- platform-name perpustakaan, jika tidak, beberapa variabel utama yang digunakan dalam script linker tidak dapat dikutip dengan benar:

  • src/CMakeLists.txt

Contoh: startup-gcc.c di ot-cc2538 - src/CMakeLists.txt

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