Menyiapkan Lingkungan Build

Lihat sumber di GitHub

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

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

Membuat repositori baru

Langkah pertama adalah menyiapkan tempat 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 berguna.

Dalam contoh ini, kami membuat repositori SiliconLabs/ot-efr32 di GitHub dan meng-clone ~/repos/ot-efr32-nya.

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 Anda membuat struktur repositori seperti ini:

tree -F -L 1 --dirsfirst
.
├── examples/
├── openthread/
├── script/
├── src/
├── third_party/
├── CMakeLists.txt
├── LICENSE
└── README.md
Folder Deskripsi
examples opsional Aplikasi contoh
openthread Repositori openthread sebagai submodul
script Skrip untuk membangun, menguji, menganalisis lint
src Implementasi lapisan abstraksi platform
third_party Lokasi untuk 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, kita 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, sebaiknya buat beberapa skrip di folder script. Ini dapat mencakup skrip untuk tugas seperti bootstrap, membangun, menjalankan kode lint, dan skrip pengujian untuk pemeriksaan CI GitHub.

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 hardware Anda. Tindakan 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 sebagai contoh.

build

Skrip build CMake harus memungkinkan pengguna membuat stack OpenThread untuk platform Anda. Jika repositori Anda menetapkan contoh aplikasi, skrip ini juga harus membangun contoh aplikasi tersebut. Skrip ini harus berisi opsi konfigurasi sistem dasar, termasuk definisi makro khusus platform.

Lihat skrip build di ot-efr32 sebagai contoh.

test

Skrip pengujian mungkin berguna bagi pengguna untuk menguji perubahan menggunakan pengujian apa pun yang telah Anda tetapkan. Ini bisa sesederhana menjalankan build pemeriksaan kesehatan atau serumit meluncurkan paket 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 untuk 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 penaut

Skrip GNU Linker menjelaskan cara memetakan semua bagian dalam file input (file "object" .o yang dihasilkan oleh GNU Compiler Collection (GCC)) ke file {i>output<i} akhir (untuk contoh, .elf). Juga menentukan lokasi penyimpanan setiap segmen dari program yang dapat dieksekusi, serta alamat entri. Penaut khusus platform yang sering disediakan bersama BSP platform.

Konfigurasikan alat ld untuk mengarah ke skrip penaut 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. Ini kode biasanya:

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

Kode startup (C atau kode sumber assembly) harus disertakan dalam atribut Library openthread-platform-name, jika tidak, beberapa variabel utama akan digunakan dalam penaut skrip tidak dapat dikutip dengan benar:

  • src/CMakeLists.txt

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

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