Membangun dan Menjalankan mbusd untuk Teltonika RUT906
💡 Teltonika RUT906: Router Kecil, Kemampuan Besar
Teltonika RUT906 adalah router industri ringkas berbasis Linux (RutOS/OpenWrt) yang mendukung konektivitas seluler, ethernet, WiFi, GPS, dan I/O digital. Dirancang untuk otomasi industri, perangkat ini sering digunakan sebagai edge device dalam ekosistem IIoT, SCADA, dan sistem telemetri.
Salah satu kemungkinan RUT906 adalah kemampuannya menjalankan daemon pengguna seperti mbusd, untuk komunikasi Modbus TCP↔RTU. Namun, tidak semua daemon tersedia dalam firmware default-nya. Karena itu, kadang kita perlu menyusun sendiri binary yang sesuai—terutama untuk deployment ringan, statik, dan tanpa dependensi eksternal.
🔧 Persiapan Environment
Asumsi: Anda telah melakukan kompilasi awal SDK RUT906 sesuai dengan petunjuk resmi dari Teltonika, sehingga direktori staging_dir
telah tersedia dan terisi lengkap.
cd ~/rut906
export STAGING_DIR=~/rut906/rutos-ramips-rut9m-sdk/staging_dir
export PATH=$STAGING_DIR/toolchain-mipsel_24kc_gcc-8.4.0_musl/bin:$PATH
⚙️ toolchain.cmake
nano toolchain.cmake
:
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_C_COMPILER mipsel-openwrt-linux-gcc)
set(CMAKE_CXX_COMPILER mipsel-openwrt-linux-g++)
set(CMAKE_FIND_ROOT_PATH ~/rut906/rutos-ramips-rut9m-sdk/staging_dir/toolchain-mipsel_24kc_gcc-8.4.0_musl)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libgcc -static-libstdc++")
🔨 Build Steps
git clone https://github.com/kumajaya/mbusd.git --depth=1
mkdir -p mbusd/build
cd mbusd/build
cmake -DCMAKE_TOOLCHAIN_FILE=../../toolchain.cmake -DCMAKE_INSTALL_PREFIX=/usr ..
make
mipsel-openwrt-linux-strip mbusd
Verifikasi output:
file mbusd
# Hasil yang diharapkan: statically linked, stripped MIPS ELF
🎁 Instalasi nano
dan mbusd
Sebagian pengguna mungkin nyaman dengan vi
, tapi saya pribadi lebih cocok dengan nano
. Sayangnya, nano
tidak tersedia secara default di RutOS. Berikut langkah-langkah yang saya lakukan untuk memasangnya di RUT906 yang berbasis OpenWrt 21.02.0 (mipsel_24kc
):
1. Salin mbusd
kemudian login ke RUT906 via ssh
scp mbusd root@192.168.1.1:/home/root/
ssh root@192.168.1.1
Gunakan password yang sama dengan akses WebUI.
2. Periksa arsitektur sistem dan versi
cat /etc/os-release
Pastikan nilai OPENWRT_ARCH
dan VERSION
sesuai.
3. Unduh dan pasang nano
Saya menggunakan paket dari repositori OpenWrt 21.02.0:
wget https://downloads.openwrt.org/releases/21.02.0/packages/mipsel_24kc/packages/nano-full_7.2-2_mipsel_24kc.ipk
opkg install nano-full_7.2-2_mipsel_24kc.ipk
4. Atasi error xterm-256color
Saat pertama kali dijalankan, muncul error:
Error opening terminal: xterm-256color.
Solusinya, tambahkan environment variable berikut:
export TERMINFO=/usr/local/usr/share/terminfo
Agar permanen, tambahkan ke /etc/profile
.
5. Perbaiki error nanorc
nano
juga mengeluh soal file highlight yang tidak ditemukan:
Error in /etc/nanorc on line 6: Error expanding /usr/share/nano/*.nanorc
Solusinya: ubah baris /usr/share/nano/*.nanorc
menjadi /usr/local/usr/share/nano/*.nanorc
di /etc/nanorc
.
Setelah semua beres, nano
bisa digunakan dengan nyaman tanpa perlu mengingat kombinasi :wq
. Editor favorit saya kini resmi bisa dipakai di RUT906.
vi
boleh tetap tinggal di sistem, tapi saya tidak akan memanggilnya lagi 😄
🧩 Konfigurasi UCI
nano /etc/config/mbusd
:
config instance '1'
option enabled '1'
option config_file '/etc/mbusd/mbusd-rs485.conf'
option log_output '-'
option readonly '-o'
config instance '2'
option enabled '0'
option config_file '/etc/mbusd/mbusd-rs232.conf'
option log_output '-'
option readonly '-o'
Tambahkan instance lain jika diperlukan.
🗳️ Skrip Init /etc/init.d/mbusd
nano /etc/init.d/mbusd
:
#!/bin/sh /etc/rc.common
USE_PROCD=1
START=99
STOP=10
CONFIG="mbusd"
APP="/usr/local/usr/bin/mbusd"
set_service() {
local section="$1"
config_get ENABLED "$section" "enabled" "0"
[ "$ENABLED" != "1" ] && return 1
config_get config_file "$section" "config_file" "/etc/mbusd/mbusd-rs485.conf"
config_get log_output "$section" "log_output" "-"
config_get readonly "$section" "readonly" " "
procd_open_instance "$section"
procd_set_param command "$APP" -d -v2 -L "$log_output" -c "$config_file" "$readonly"
procd_set_param respawn ${respawn_threshold:-0} ${respawn_timeout:-6} ${respawn_retry:-0}
procd_close_instance
}
start_service() {
config_load "$CONFIG"
config_foreach set_service
}
service_triggers() {
procd_add_reload_trigger "$CONFIG"
}
🚀 Aktivasi Service
chmod +x /etc/init.d/mbusd
/etc/init.d/mbusd enable
/etc/init.d/mbusd start
📦 Status Final
- ✅ Binary: statically linked, stripped, MIPS32 R2
- ✅ Multi-instance UCI support
- ✅ Init-script terintegrasi dengan
procd
- ✅ Akses Modbus dibatasi
read-only
✍️ Penutup
Proses membangun mbusd
untuk RUT906 ini bukan sekadar soal kompilasi, tapi juga tentang memahami ekosistem perangkat embedded dan menyesuaikan build agar benar-benar sesuai dengan kebutuhan sistem target.
Dengan toolchain yang tepat, konfigurasi CMake yang presisi, dan sedikit intuisi teknikal, kita dapat menghasilkan binary statik yang siap digunakan tanpa dependensi tambahan, cocok untuk perangkat industri yang mengutamakan keandalan.
Semoga dokumentasi ini bisa menjadi referensi bagi Anda yang ingin men-deploy layanan serupa di perangkat Teltonika lainnya, atau sekadar menambah wawasan mengenai proses kompilasi lintas platform. Motif sebenarnya di sini adalah mencegah akses write
dari pihak lain ke perangkat Modbus yang terhubung.
Jika Anda menemukan bagian yang bisa diperbaiki, atau ingin berdiskusi seputar integrasi layanan di RUT906, jangan ragu untuk menghubungi saya. Mari sama-sama kita dorong interoperabilitas di dunia IIoT! 🚀