Membangun dan Menjalankan mbusd untuk Teltonika RUT906

Membangun dan Menjalankan mbusd untuk Teltonika RUT906
Photo by Stephen Phillips - Hostreviews.co.uk / Unsplash

💡 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! 🚀