Bahasa: ID

Memulai Zephyr di Ubuntu

Cara saya memasang Zephyr RTOS di Ubuntu Linux dan mem-flash aplikasi pertama ke nRF5340 DK, setelah terbiasa dengan bare metal.

Firmware ·

  • Zephyr
  • RTOS
  • nRF5340
  • Embedded C
  • Linux

Spesifikasi utama

BoardNordic nRF5340 DK
SoCnRF5340, dua core Arm Cortex-M33 (aplikasi + jaringan)
KomputerUbuntu Linux
Alatwest, Zephyr SDK, CMake, Ninja
DebuggerSEGGER J-Link, sudah terpasang di DK
Aplikasi pertamaBlinky (samples/basic/blinky)

Diagram blok

Diagram blok. Aplikasi saya, file board, dan Zephyr masuk ke west build, yang memakai CMake, Ninja, dan GCC untuk membuat zephyr.hex. west flash mengirimnya ke nRF5340 DK lewat J-Link melalui USB, lalu LED1 berkedip.

Gambaran umum

Selama bertahun-tahun saya menulis firmware secara bare metal, dengan main loop buatan sendiri, interrupt, dan driver yang langsung menulis ke register. Saya ingin mencoba Zephyr, RTOS open source yang sekarang didukung Nordic, NXP, ST, dan banyak lainnya. Berikut cara saya memasangnya di Ubuntu dan menjalankan aplikasi pertama di nRF5340 DK.

Memasang Zephyr di Ubuntu

1. Pasang alat-alat sistem

$ sudo apt update && sudo apt upgrade
$ sudo apt install --no-install-recommends git cmake ninja-build gperf \
    ccache dfu-util device-tree-compiler wget python3-dev python3-venv python3-tk \
    xz-utils file make gcc gcc-multilib g++-multilib libsdl2-dev libmagic1

2. Buat lingkungan Python dan pasang west

west adalah alat command line milik Zephyr. Alat ini mengunduh kode, melakukan build, dan mem-flash. Saya memasangnya di lingkungan Python tersendiri, supaya tidak tercampur dengan Python bawaan Ubuntu.

$ python3 -m venv ~/zephyrproject/.venv
$ source ~/zephyrproject/.venv/bin/activate
$ pip install west

Setiap membuka terminal baru, jalankan lagi perintah ini sebelum memakai west.

$ source ~/zephyrproject/.venv/bin/activate

3. Unduh Zephyr

$ west init ~/zephyrproject
$ cd ~/zephyrproject
$ west update
$ west zephyr-export
$ west packages pip --install

west update butuh waktu cukup lama. Perintah ini mengunduh Zephyr dan semua modulnya, termasuk library dari para vendor.

4. Pasang Zephyr SDK

SDK berisi compiler (GCC untuk Arm dan arsitektur lain) serta alat debugging.

$ cd ~/zephyrproject/zephyr
$ west sdk install

5. Pasang alat untuk mem-flash nRF5340 DK

DK ini sudah punya debugger SEGGER J-Link. Untuk mem-flash dari Linux, saya memasang dua alat.

  • J-Link Software and Documentation Pack dari SEGGER (file .deb untuk Ubuntu),
  • nRF Util dari Nordic, lalu perintah untuk board.
$ nrfutil install device

6. Build dan flash Blinky

nRF5340 punya dua core. Aplikasi berjalan di core aplikasi, cpuapp.

$ cd ~/zephyrproject/zephyr
$ west build -p always -b nrf5340dk/nrf5340/cpuapp samples/basic/blinky
$ west flash

LED1 di board mulai berkedip.

7. Lihat keluaran serial

Contoh hello_world menulis ke port serial USB milik DK.

$ west build -p always -b nrf5340dk/nrf5340/cpuapp samples/hello_world
$ west flash
$ sudo usermod -aG dialout $USER   # sekali saja, lalu logout dan login lagi
$ screen /dev/ttyACM0 115200       # keluar dengan Ctrl+A, lalu K

Yang saya pelajari - bare metal vs Zephyr

Bare metal berarti kode saya satu-satunya yang berjalan di chip. Ada loop while (1), interrupt untuk hal yang mendesak, dan driver yang ditulis langsung ke register. Hasilnya kecil, cepat, dan sepenuhnya bisa diprediksi, dan saya tahu setiap baris yang berjalan. Untuk produk sederhana, misalnya satu sensor dan satu tugas, ini tetap pilihan yang tepat.

Masalahnya muncul saat proyek makin besar. Dengan BLE, layar, logging, dan sensor sekaligus, main loop berubah menjadi tumpukan flag dan state machine, dan satu tugas yang lambat menunda semua tugas lain.

Zephyr memberi saya empat hal.

  • Thread dengan prioritas. Setiap tugas punya thread sendiri, dan scheduler menjalankan yang paling mendesak lebih dulu. Mutex, semaphore, dan message queue membuat thread bisa berbagi data dengan aman.
  • Stack siap pakai. Bluetooth LE, USB, jaringan, file system, logging, dan shell sudah tersedia, dirawat, dan diuji.
  • Kode yang portabel. Hardware dijelaskan di devicetree dan fitur diaktifkan di Kconfig (prj.conf). Blinky yang sama bisa di-build untuk ratusan board hanya dengan mengganti -b.
  • Dua core sudah diurus. Di nRF5340, Zephyr bisa menjalankan controller Bluetooth di core jaringan untuk saya. Dengan bare metal, saya harus mengatur sendiri kedua core dan komunikasi di antara keduanya.

Ada harganya. Zephyr butuh flash dan RAM lebih besar, sistem build-nya (west, CMake, devicetree, Kconfig) perlu waktu untuk dipelajari, dan error kadang lebih sulit dilacak.

Pegangan saya. Untuk perangkat kecil dengan satu fungsi, saya pakai bare metal. Begitu saya butuh beberapa tugas berjalan bersamaan, koneksi nirkabel, atau kode yang harus tetap bisa dipakai saat ganti chip, saya pakai Zephyr.

← Kembali ke semua proyek