Membangun fondasi update firmware dari jarak jauh: merancang bootloader yang aman dengan secure boot, memahami strategi OTA A/B partition dan rollback, serta menyusun pipeline update bertanda tangan, ditutup praktik membangun pipeline OTA pertama

Perangkat yang kalian bangun tidak akan pernah sempurna di hari pertama. Bug ditemukan, fitur diminta, regulasi berubah — dan jika perangkatnya sudah terpasang di lapangan, satu-satunya jalan perbaikan adalah OTA (Over-The-Air update): memperbarui firmware lewat jaringan tanpa menyentuh perangkat. Tanpa OTA, satu bug di produksi berarti ribuan perangkat harus dikembalikan atau diganti.
Tapi OTA yang sembrono lebih berbahaya dari tidak ada OTA: update yang korup di tengah jalan bisa mengubah perangkat menjadi bata yang tidak bisa boot. Episode ini membangun pemahaman bootloader, strategi partisi A/B, update bertanda tangan, dan pipeline OTA end-to-end — kemampuan yang membedakan produk "matang" dari prototipe.
Bootloader adalah program kecil yang berjalan sebelum aplikasi utama. Tugasnya: memverifikasi dan menyalakan aplikasi — atau mengambil alih saat perlu update. Layout flash khas:
0x08000000 | Bootloader | verifikasi + decide
0x08008000 | App A (slot aktif) | firmware yang berjalan
0x080C0000 | App B (slot cadangan) | firmware update, menunggu verifikasi
0x08100000 | OTA buffer / metadata | konfigurasi updateAlur boot minimal:
Tanpa bootloader, kalian tidak punya mekanisme aman untuk update di lapangan. Dengan bootloader, update yang gagal bisa "ditarik kembali" tanpa kehilangan perangkat.
Secure boot memastikan hanya firmware yang ditandatangani vendor yang boleh berjalan. Rantai kepercayaannya berlapis:
Mekanismenya:
Ini juga fondasi keamanan yang dibahas lebih dalam di episode 18. Kunci privat adalah segalanya: jika bocor, semua perangkat kalian bisa diambil alih. Simpan di HSM/cloud KMS, dan jangan pernah commit ke repo.
Cara paling umum dan paling aman untuk update di MCU: dual-bank (A/B) update.
1. Firmware baru di-download ke slot B (tidak menyentuh slot A)
2. Slot B diverifikasi (signature + CRC)
3. Bootloader beralih boot ke B
4. Aplikasi B berjalan, lapor "sehat" ke server
5. Baru slot A boleh diisi update berikutnyaKelebihan A/B: tidak ada window "perangkat tanpa firmware". Update yang gagal membuat perangkat tetap boot dari slot lama. Kekurangannya: flash dobel — biaya yang wajar untuk keandalan.
Untuk sistem dengan satu slot saja (flash terbatas), pakai pola update-in-place + self-test: download ke area update, verifikasi, bootloader salin ke slot aplikasi, lalu app health-check — jika aplikasi baru crash berulang, bootloader otomatis boot ke versi lama. Ini lebih murah tapi punya jendela risiko saat penyalinan.
Setiap payload OTA harus ditandatangani dan diverifikasi:
# 1. build firmware
make firmware
# 2. tanda tangani dengan kunci privat (di CI, tidak pernah lokal)
sign-tool --key signing.key --input firmware.bin --output firmware-signed.bin
# 3. unggah ke server / cloud storage
aws s3 cp firmware-signed.bin s3://ota-bucket/v1.2.3.binDi sisi perangkat, bootloader (atau update client) memverifikasi signature dengan kunci publik sebelum menyalin. Protokol update juga harus memakai TLS (episode 12) — signature melindungi isi, TLS melindungi transport dari gangguan.
Metadata yang wajib dibawa tiap update: versi, hash, ukuran, dan min-version (untuk anti-rollback). Tanpa metadata, rollback yang salah bisa menurunkan perangkat ke versi yang rentan.
Important
Rancang rollback sebagai fitur kelas satu, bukan pemikiran belakangan. Tentukan dari awal: apa yang terjadi jika perangkat tidak bisa boot setelah update? Paling umum: bootloader menghitung jumlah crash berulang (atau selisih versi), lalu otomatis boot ke slot sebelumnya dan menandai update gagal. Tanpa mekanisme ini, perangkat yang gagal update adalah produk yang harus ditarik dari lapangan.
Alur lengkap update dari server ke perangkat:
Canary update adalah kebiasaan terbaik industri: update dimulai ke sebagian kecil perangkat, diawasi beberapa hari, dan jika tidak ada anomali baru diperluas. Server perlu menyimpan inventory perangkat: versi saat ini, model, dan status terakhir — ini membuat rollback massal menjadi mungkin.
Inti yang harus dibawa pulang:
Di episode 18 selanjutnya kita mendalami sisi gelap yang tak bisa dihindari: embedded security — secure boot, kriptografi di perangkat, dan melindungi firmware dari pembajakan. Dunia terhubung yang kalian bangun di episode 12 adalah juga dunia yang diserang. Sampai jumpa di episode 18!