Menyiapkan Lingkungan Build

Lihat sumber di GitHub

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

Toolchain build lainnya mungkin didukung pada masa mendatang, tetapi tidak berada dalam cakupan panduan transfer 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, kami 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 menjaga konsistensi dengan repositori platform yang ada di organisasi GitHub OpenThread, sebaiknya buat struktur repositori Anda seperti 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 build, pengujian, analisis lint
src Implementasi lapisan abstraksi platform
third_party Lokasi untuk sumber pihak ketiga

Menambahkan submodul

Langkah berikutnya adalah menambahkan openthread dan repo lainnya 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 seperti bootstraping, mem-build, menjalankan kode-linter, dan skrip pengujian untuk pemeriksaan GitHub CI.

Berikut adalah beberapa contoh skrip yang bersifat standar untuk sebagian besar repositori platform yang ada.

bootstrap

Skrip ini harus menginstal semua alat dan paket yang diperlukan oleh platform hardware Anda. Kode ini juga harus menjalankan skrip bootstrap openthread untuk memastikan bahwa pengguna memiliki semua yang diperlukan untuk mem-build stack OpenThread.

Lihat skrip bootstrap di ot-efr32 sebagai contoh.

build

Skrip build CMake harus memungkinkan pengguna membuat stack OpenThread untuk platform Anda. Jika repositori Anda menentukan 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 yang telah Anda tetapkan. Hal ini bisa berupa hal sederhana seperti menjalankan build pemeriksaan kesehatan atau semudah meluncurkan suite 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 akan lebih mudah menggunakan skrip make-pretty yang digunakan oleh repo platform yang ada. Skrip ini 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 "object" .o yang dihasilkan oleh GNU Compiler Collection (GCC) ke file output akhir (misalnya, .elf). 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 mengarahkan 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 diberikan beserta BSP platform. Kode ini biasanya:

  1. Mengimplementasikan fungsi entri (Reset_Handler) dari program yang dapat dieksekusi
  2. Menentukan tabel vektor interupsi
  3. Melakukan inisialisasi 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 (C atau kode sumber 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
    $
)