1. Краткое описание проблемы
Два сервиса, работающие с MQTT (wb-mqtt-db и wb-mqtt-adc), периодически аварийно завершаются с кодом 4/ILL (Illegal instruction), systemd их автоматически рестартует, счётчик перезапусков за сутки достигает 400+. Несмотря на это, данные в MQTT продолжают передаваться, но постоянные рестарты создают нагрузку на систему и запутывают диагностику.
2. Информация об устройстве
- Модель:
8.5.1
- Аппаратная ревизия:
8.5.1D/2GS 1.2D-2G
- Версия прошивки (firmware):
wb-2504
3. ОС и пакеты
- ОС: Debian stable (bullseye), архитектура arm64
- Ядро:
6.8.0-wb136 #1 SMP Thu Apr 24 05:25:49 UTC 2025 aarch64 GNU/Linux и wb138
- libwbmqtt1-5: 5.3.4 (Installed/Candidate 5.3.4, http://deb.wirenboard.com/wb8/bullseye)
- Система ранее была на testing, переведена на stable, сбрасывалась до заводских настроек, в MQTT только минимальные данные.
4. Подробное описание
- В логах systemd:
Main process exited, code=killed, status=4/ILL
Failed with result 'signal'.
Scheduled restart job, restart counter is at N.
- Core-dump показал, что в
libwbmqtt1.so.5
исполняется “dot-product” инструкция ARMv8.2-A (.inst 0xf7f0a123
), отсутствующая на CPU Cortex-A53 (ARMv8.0-A), из-за чего и падает процесс. - Сбои происходят при минимальной нагрузке (несколько подписок), даже после чистого сброса системы.
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/aarch64-linux-gnu/libthread_db.so.1".
__pthread_clockjoin_ex (threadid=281473489830288, thread_return=0x0, clockid=0, abstime=<optimized out>,
block=<optimized out>) at pthread_join_common.c:145
145 pthread_join_common.c: No such file or directory.
(gdb) continue
Continuing.
Thread 5 "backend: reques" received signal SIGILL, Illegal instruction.
[Switching to Thread 0xffffa5800190 (LWP 26765)]
0x0000ffffa8280600 in ?? () from /lib/aarch64-linux-gnu/libwbmqtt1.so.5
(gdb) bt
#0 0x0000ffffa8280600 in ?? () from /lib/aarch64-linux-gnu/libwbmqtt1.so.5
#1 0x0000ffffa82f9e00 in ?? () from /lib/aarch64-linux-gnu/libwbmqtt1.so.5
#2 0x0000ffffa82f9f6c in ?? () from /lib/aarch64-linux-gnu/libwbmqtt1.so.5
#3 0x0000ffffa8258a28 in std::_Function_handler<void (), WBMQTT::TDriverBackendImpl::StartRequestProcessorsLoop()::{lambda()#1}>::_M_invoke(std::_Any_data const&) () from /lib/aarch64-linux-gnu/libwbmqtt1.so.5
#4 0x0000ffffa8256324 in ?? () from /lib/aarch64-linux-gnu/libwbmqtt1.so.5
#5 0x0000ffffa80b5cac in ?? () from /lib/aarch64-linux-gnu/libstdc++.so.6
#6 0x0000ffffa81cb648 in start_thread (arg=0xffffa57ffa90) at pthread_create.c:477
#7 0x0000ffffa7f25c9c in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:78
(gdb) x/12i 0x0000ffffa8280600
=> 0xffffa8280600: .inst 0xf7f0a123 ; undefined
0xffffa8280604: b 0xffffa82803b8
0xffffa8280608: mov w0, w19
0xffffa828060c: ldp x19, x20, [sp, #16]
0xffffa8280610: ldp x21, x22, [sp, #32]
0xffffa8280614: ldp x23, x24, [sp, #48]
0xffffa8280618: ldp x25, x26, [sp, #64]
0xffffa828061c: ldp x27, x28, [sp, #80]
0xffffa8280620: ldp x29, x30, [sp], #256
0xffffa8280624: ret
0xffffa8280628: adrp x0, 0xffffa8359000 <_ZTVN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEEE>
0xffffa828062c: mov x8, x19
Буду признателен за помощь в выпуске исправленной версии библиотеки или другого решения, устраняющего SIGILL и постоянные рестарты сервисов.