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

Menyiapkan Lingkungan Build

Lihat sumber di GitHub

Untuk mempromosikan pengembangan terbuka dan gratis, OpenThread menggunakan CMake di toolchain build. Saat ini, toolchain ini diperlukan untuk porting OpenThread ke platform hardware baru.

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

Buat repositori baru

Langkah pertama adalah menyiapkan tempat baru untuk platform hardware. Dalam panduan ini, kami akan membuat repositori baru bernama ot-efr32 yang berisi lapisan abstraksi platform, SDK platform hardware, dan beberapa skrip yang berguna.

Dalam contoh ini, kami membuat repositori SiliconLabs/ot-efr32 di GitHub dan meng-clone 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 di organisasi GitHub OpenThread, Anda mungkin ingin menyusun repositori Anda seperti itu:

tree -F -L 1 --dirsfirst
.
├── examples/
├── openthread/
├── script/
├── src/
├── third_party/
├── CMakeLists.txt
├── LICENSE
└── README.md
Folder Deskripsi
examples opsional Contoh aplikasi
openthread Repositori openthread sebagai submodul
script Skrip untuk mem-build, menguji, analisis lint
src Penerapan lapisan abstraksi platform
third_party Lokasi untuk setiap sumber pihak ketiga

Menambahkan submodul

Langkah berikutnya adalah menambahkan openthread dan repositori lain yang 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, kami akan menambahkan versi ringan dari Silicon Labs Gecko SDK sebagai submodul 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 mempermudah tugas umum, Anda dapat membuat beberapa skrip di folder script. Ini dapat mencakup skrip untuk tugas-tugas seperti bootstraping, mem-build, menjalankan kode lint, dan skrip pengujian untuk pemeriksaan GitHub CI.

Berikut 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 hardware Anda. Skrip ini juga harus menjalankan skrip bootstrap openthread untuk memastikan bahwa pengguna memiliki semua yang diperlukan untuk membuat stack OpenThread.

Lihat skrip bootstrap di ot-efr32 untuk contoh.

build

Skrip build CMake harus memungkinkan pengguna mem-build stack OpenThread untuk platform Anda. Jika repositori Anda mendefinisikan suatu aplikasi contoh, skrip ini juga harus membuatnya. Skrip ini harus berisi opsi konfigurasi sistem dasar, termasuk definisi makro khusus platform.

Lihat skrip build di ot-efr32 untuk mengetahui contohnya.

test

Skrip pengujian mungkin berguna bagi pengguna untuk menguji perubahan menggunakan pengujian apa pun yang telah Anda tetapkan. Hal ini dapat berupa sesuatu yang sederhana seperti menjalankan build pemeriksaan stabilitas atau rumit seperti meluncurkan suite pengujian unit.

Di ot-efr32, skrip cukup menjalankan skrip build untuk setiap board yang didukung di setiap platform efr32.

Lihat skrip pengujian di ot-efr32 untuk contoh.

make-pretty

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

Anda dapat menentukan skrip ini sendiri, tetapi mungkin akan paling mudah menggunakan skrip make-pretty yang digunakan oleh repositori platform yang sudah ada. Skrip ini memanggil skrip gaya openthread dan membantu memastikan gaya yang konsisten di semua repositori OpenThread.

Konfigurasi skrip linker

Skrip GNU Linker menjelaskan cara memetakan semua bagian dalam file input (.o file "objek" yang dihasilkan oleh GNU Compiler Collection (GCC)) ke output akhir file (misalnya, .elf). Class ini juga menentukan lokasi penyimpanan setiap segmen program yang dapat dijalankan, serta alamat entrinya. Skrip linker khusus platform sering kali disediakan bersama BSP platform.

Konfigurasikan alat ld untuk mengarah ke skrip linker khusus platform menggunakan target_link_libraries pada target CMake platform 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 toolchain

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

  1. Mengimplementasikan fungsi entri (Reset_Handler) dari program yang dapat dieksekusi
  2. Menentukan tabel vektor interupsi
  3. Menginisialisasi Heap dan Stack
  4. Menyalin bagian .data dari memori non-volatil ke RAM
  5. Langsung ke fungsi utama aplikasi untuk menjalankan logika aplikasi

Kode startup (kode sumber assembly atau C) harus disertakan dalam library openthread-platform-name platform Anda. Jika tidak, beberapa variabel utama yang digunakan dalam skrip 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
    $
)