Menyiapkan Lingkungan Build

Lihat sumber di GitHub

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

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

Membuat repositori baru

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

Dalam contoh ini, kita membuat repositori SiliconLabs/ot-efr32 di GitHub dan meng-clone-nya 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 mempertahankan konsistensi dengan repositori platform yang ada di organisasi GitHub OpenThread, sebaiknya strukturkan repositori Anda sebagai berikut:

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, dan melakukan linting
src Penerapan lapisan abstraksi platform
third_party Lokasi untuk sumber pihak ketiga apa pun

Menambahkan submodul

Langkah berikutnya adalah menambahkan openthread dan repo 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, kita akan menambahkan Silicon Labs Gecko SDK versi lite 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 seperti bootstraping, mem-build, menjalankan lint kode, 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 akan menginstal semua alat dan paket yang diperlukan oleh platform hardware Anda. Tindakan ini juga akan mengeksekusi skrip bootstrap openthread untuk memastikan bahwa pengguna memiliki semua yang diperlukan untuk mem-build stack OpenThread.

Lihat skrip bootstrap di ot-efr32 untuk mengetahui contohnya.

build

Skrip build CMake akan memungkinkan pengguna mem-build stack OpenThread untuk platform Anda. Jika repositori Anda menentukan aplikasi contoh, skrip ini juga akan mem-build aplikasi tersebut. 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 tentukan. Hal ini bisa berupa hal yang sederhana seperti menjalankan build pemeriksaan kewarasan atau yang rumit seperti meluncurkan rangkaian pengujian unit.

Di ot-efr32, skrip hanya mengeksekusi skrip build untuk setiap board yang didukung di setiap platform efr32.

Lihat skrip pengujian di ot-efr32 untuk mengetahui contohnya.

make-pretty

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

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

Konfigurasi skrip penaut

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

Konfigurasikan alat ld untuk mengarah ke skrip penaut khusus platform menggunakan target_link_libraries pada target CMake platform Anda 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 kali disediakan bersama BSP platform. Kode ini biasanya:

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

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