Disabling IRQ
-
Пишу программу для Raspberry PI 3 Model B v1.2, система Raspbian GNU/Linux 9.4 (stretch) realtime . При работе с ttyS0 у меня периодически выскакивает сообщение "Disabling IRQ: 59", после чего ttyS0 перестает работать и приходится перезагружать устройство. Нашел один из вариантов решения проблемы прописать в grub.cfg "noirqdebug", но у меня Raspbian и там нет grub. Как осуществить это действие в Raspbian?
-
А что в логи ядра (dmesg, /var/log/messages) пишется, когда такая ошибка вываливается?
-
[ 199.901675] ------------[ cut here ]------------ [ 199.901708] WARNING: CPU: 1 PID: 86 at kernel/irq/handle.c:151 __handle_irq_event_percpu+0x2cc/0x2d0 [ 199.901721] irq 166 handler irq_default_primary_handler+0x0/0x1c enabled interrupts [ 199.901726] Modules linked in: xt_tcpudp iptable_mangle xt_DSCP cmac bnep hci_uart btbcm serdev bluetooth ecdh_generic brcmfmac brcmutil cfg80211 rfkill snd_bcm2835(C) snd_pcm snd_timer snd uio_pdrv_genirq fixed uio ip_tables x_tables ipv6 [ 199.901803] CPU: 1 PID: 86 Comm: irq/59-bcm2835- Tainted: G C 4.14.34-rt27-v7 #2 [ 199.901806] Hardware name: BCM2835 [ 199.901830] [<8010fdf8>] (unwind_backtrace) from [<8010bf74>] (show_stack+0x20/0x24) [ 199.901847] [<8010bf74>] (show_stack) from [<807a2e24>] (dump_stack+0xc8/0x10c) [ 199.901863] [<807a2e24>] (dump_stack) from [<8011db1c>] (__warn+0xf8/0x110) [ 199.901876] [<8011db1c>] (__warn) from [<8011db7c>] (warn_slowpath_fmt+0x48/0x50) [ 199.901890] [<8011db7c>] (warn_slowpath_fmt) from [<8017a948>] (__handle_irq_event_percpu+0x2cc/0x2d0) [ 199.901905] [<8017a948>] (__handle_irq_event_percpu) from [<8017a994>] (handle_irq_event_percpu+0x48/0x84) [ 199.901919] [<8017a994>] (handle_irq_event_percpu) from [<8017aa58>] (handle_irq_event+0x88/0xc0) [ 199.901935] [<8017aa58>] (handle_irq_event) from [<8017e550>] (handle_level_irq+0xb4/0x19c) [ 199.901952] [<8017e550>] (handle_level_irq) from [<8017984c>] (generic_handle_irq+0x34/0x44) [ 199.901968] [<8017984c>] (generic_handle_irq) from [<8050ece4>] (bcm2835_auxirq_handler+0x48/0x94) [ 199.901983] [<8050ece4>] (bcm2835_auxirq_handler) from [<8017bba0>] (irq_forced_thread_fn+0x30/0x84) [ 199.901998] [<8017bba0>] (irq_forced_thread_fn) from [<8017bf14>] (irq_thread+0x12c/0x200) [ 199.902013] [<8017bf14>] (irq_thread) from [<8013e844>] (kthread+0x144/0x174) [ 199.902031] [<8013e844>] (kthread) from [<80107d94>] (ret_from_fork+0x14/0x20) [ 199.902036] ---[ end trace 0000000000000002 ]--- [ 246.381155] irq 59: nobody cared (try booting with the "irqpoll" option) [ 246.381163] CPU: 0 PID: 86 Comm: irq/59-bcm2835- Tainted: G WC 4.14.34-rt27-v7 #2 [ 246.381165] Hardware name: BCM2835 [ 246.381187] [<8010fdf8>] (unwind_backtrace) from [<8010bf74>] (show_stack+0x20/0x24) [ 246.381197] [<8010bf74>] (show_stack) from [<807a2e24>] (dump_stack+0xc8/0x10c) [ 246.381209] [<807a2e24>] (dump_stack) from [<8017d684>] (__report_bad_irq+0x3c/0xdc) [ 246.381219] [<8017d684>] (__report_bad_irq) from [<8017dae8>] (note_interrupt+0x29c/0x2ec) [ 246.381227] [<8017dae8>] (note_interrupt) from [<8017a9c4>] (handle_irq_event_percpu+0x78/0x84) [ 246.381235] [<8017a9c4>] (handle_irq_event_percpu) from [<8017aa58>] (handle_irq_event+0x88/0xc0) [ 246.381243] [<8017aa58>] (handle_irq_event) from [<8017e550>] (handle_level_irq+0xb4/0x19c) [ 246.381250] [<8017e550>] (handle_level_irq) from [<8017984c>] (generic_handle_irq+0x34/0x44) [ 246.381259] [<8017984c>] (generic_handle_irq) from [<804daa48>] (bcm2836_chained_handle_irq+0x38/0x50) [ 246.381267] [<804daa48>] (bcm2836_chained_handle_irq) from [<8017984c>] (generic_handle_irq+0x34/0x44) [ 246.381274] [<8017984c>] (generic_handle_irq) from [<80179e58>] (__handle_domain_irq+0x6c/0xc4) [ 246.381282] [<80179e58>] (__handle_domain_irq) from [<80101528>] (bcm2836_arm_irqchip_handle_irq+0xac/0xb0) [ 246.381291] [<80101528>] (bcm2836_arm_irqchip_handle_irq) from [<807bddbc>] (__irq_svc+0x5c/0xa8) [ 246.381294] Exception stack(0xb96cfe98 to 0xb96cfee0) [ 246.381297] fe80: b9c34568 bb802210 [ 246.381303] fea0: 00000001 b96ce000 b9c34500 b9c34568 b9685740 b9c34510 b9c34500 b9685740 [ 246.381308] fec0: 8017bb70 b96cfef4 b96cfee8 b96cfee8 807bd6bc 807bd6d0 40000113 ffffffff [ 246.381317] [<807bddbc>] (__irq_svc) from [<807bd6d0>] (_raw_spin_unlock_irq+0x44/0x7c) [ 246.381324] [<807bd6d0>] (_raw_spin_unlock_irq) from [<8017bb14>] (irq_finalize_oneshot.part.1+0x8c/0xe8) [ 246.381332] [<8017bb14>] (irq_finalize_oneshot.part.1) from [<8017bbd0>] (irq_forced_thread_fn+0x60/0x84) [ 246.381339] [<8017bbd0>] (irq_forced_thread_fn) from [<8017bf14>] (irq_thread+0x12c/0x200) [ 246.381347] [<8017bf14>] (irq_thread) from [<8013e844>] (kthread+0x144/0x174) [ 246.381356] [<8013e844>] (kthread) from [<80107d94>] (ret_from_fork+0x14/0x20) [ 246.381358] handlers: [ 246.381362] [<8017aaec>] irq_default_primary_handler threaded [<8050ec9c>] bcm2835_auxirq_handler [ 246.381370] Disabling IRQ #59
-
Был вариант что это происходит из-за одновременного обращения к ttyS0 из разных потоков. Сейчас переделал программу и запись/чтение идет в одном потоке, ошибка все равно выскакивает.
-
Я думаю, что проблема в ядре, попробуй обычное, а не realtime
Попробуй BT отключить, он висит в 3-ке на UART'е -dtoverlay=pi3-disable-bt
в config.txt прописать -
Тут еще заметил один нюанс. Если запустить программу сразу после перезагрузки, она работает без каких-либо нареканий. Можно запускать, останавливать и проблем нет. А вот если скопировать после этого на плату новый исполняемый файл и запустить его. то почти сразу появляется ошибка.
Спасибо за рекомендации. Сейчас попробую. -
После добавления строки
dtoverlay=pi3-disable-bt
в config.txt перестал работать ttyS0. При попытке отправить туда данныеecho "Hello" > ttyS0
пишет что не доступны операции чтения/записи. -
В итоге получил следующее:
/boot/config.txt добавить: dtoverlay=pi3-disable-bt Консоль: sudo systemctl disable hciuart /boot/cmdline.txt убрать: console=serial0,115200
После этого работа с UART0 ведется через ttyAMA0, при этом никаких проблем с прерываниями в ходе работы не возникает (По крайней мере пока их небыло).