LINUX.ORG.RU

Raspberry Pi 4 при выдачи данных через qtserialPort выдает ошибку «Сигнал: SIGSEGV Назначение: Segmentation faultqserialPort»

 ,


0

1

Собрал простой проект для raspberry pi c использованием qtserialPort. Проект собирается без ошибок, запускается, доходит до строчки serial->write("hello"); и выдает сообщение в режиме отладки:

Сигнал: 
SIGSEGV
Назначение: 
Segmentation fault

Вот что выдает QSerialPortInfo:

Port: ttyAMA0
Location: /dev/ttyAMA0
Description: 
Manufacturer: 
Serial number: 
Vendor Identifier: 
Product Identifier: 
Busy: No

Port: ttyS0
Location: /dev/ttyS0
Description: 
Manufacturer: 
Serial number: 
Vendor Identifier: 
Product Identifier: 
Busy: No

Вот код:

 serial = new QSerialPort(this);
    serial->setPortName("/dev/ttyS0");
    serial->open(QIODevice::ReadWrite);
    serial->setBaudRate(QSerialPort::Baud9600);
    serial->setDataBits(QSerialPort::Data8);
    serial->setParity(QSerialPort::NoParity);
    serial->setStopBits(QSerialPort::OneStop);
    serial->setFlowControl(QSerialPort::NoFlowControl);
    serial->error();
    connect(serial, SIGNAL(readyRead()), this, 
 SLOT(serialRecieve()));
 serial->write("hello"); // падает на этой строчки
root@pi:~# ls -l /dev

итого 0

crw-r--r--  1 root root     10, 235 мая 20 09:49 autofs

drwxr-xr-x  2 root root         580 мая 20 09:49 block

crw-------  1 root root     10, 234 мая 20 09:49 btrfs-control

drwxr-xr-x  3 root root          60 янв  1  1970 bus

crw-------  1 root root     10,  62 мая 20 09:49 cachefiles

drwxr-xr-x  2 root root        3140 мая 20 09:49 char

crw-------  1 root root      5,   1 мая 20 09:49 console

crw-------  1 root root     10, 203 мая 20 09:49 cuse

drwxr-xr-x  7 root root         140 мая 20 09:49 disk

drwxr-xr-x  2 root root          80 янв  1  1970 dma_heap

drwxr-xr-x  3 root root         120 мая 20 09:49 dri

crw-rw----  1 root video    29,   0 мая 20 09:49 fb0

lrwxrwxrwx  1 root root          13 фев 14  2019 fd -> /proc/self/fd

crw-rw-rw-  1 root root      1,   7 мая 20 09:49 full

crw-rw-rw-  1 root root     10, 229 мая 20 09:49 fuse

crw-rw----  1 root gpio    254,   0 мая 20 09:49 gpiochip0

crw-rw----  1 root gpio    254,   1 мая 20 09:49 gpiochip1

crw-rw----  1 root gpio    246,   0 мая 20 09:49 gpiomem

crw-------  1 root root    243,   0 мая 20 09:49 hidraw0

crw-------  1 root root    243,   1 мая 20 09:49 hidraw1

crw-------  1 root root    243,   2 мая 20 09:49 hidraw2

crw-------  1 root root     10, 183 мая 20 09:49 hwrng

lrwxrwxrwx  1 root root          12 фев 14  2019 initctl -> /run/initctl

drwxr-xr-x  4 root root         200 мая 20 09:49 input

crw-r--r--  1 root root      1,  11 мая 20 09:49 kmsg

lrwxrwxrwx  1 root root          28 фев 14  2019 log -> /run/systemd/journal/dev-log

brw-rw----  1 root disk      7,   0 мая 20 09:49 loop0

brw-rw----  1 root disk      7,   1 мая 20 09:49 loop1

brw-rw----  1 root disk      7,   2 мая 20 09:49 loop2

brw-rw----  1 root disk      7,   3 мая 20 09:49 loop3

brw-rw----  1 root disk      7,   4 мая 20 09:49 loop4

brw-rw----  1 root disk      7,   5 мая 20 09:49 loop5

brw-rw----  1 root disk      7,   6 мая 20 09:49 loop6

brw-rw----  1 root disk      7,   7 мая 20 09:49 loop7

crw-rw----  1 root disk     10, 237 мая 20 09:49 loop-control

drwxr-xr-x  2 root root          60 мая 20 09:49 mapper

crw-rw----  1 root video   236,   0 мая 20 09:49 media0

crw-rw----  1 root video   236,   1 мая 20 09:49 media1

crw-r-----  1 root kmem      1,   1 мая 20 09:49 mem

brw-rw----  1 root disk    179,   0 мая 20 09:49 mmcblk0

brw-rw----  1 root disk    179,   1 мая 20 09:49 mmcblk0p1

brw-rw----  1 root disk    179,   2 мая 20 09:49 mmcblk0p2

drwxrwxrwt  2 root root          40 янв  1  1970 mqueue

drwxr-xr-x  2 root root          60 мая 20 09:49 net

crw-rw-rw-  1 root root      1,   3 мая 20 09:49 null

crw-r-----  1 root kmem      1,   4 мая 20 09:49 port

crw-------  1 root root    108,   0 мая 20 09:49 ppp

crw-rw-rw-  1 root tty       5,   2 мая 20 11:34 ptmx

drwxr-xr-x  2 root root           0 фев 14  2019 pts

brw-rw----  1 root disk      1,   0 мая 20 09:49 ram0

brw-rw----  1 root disk      1,   1 мая 20 09:49 ram1

brw-rw----  1 root disk      1,  10 мая 20 09:49 ram10

brw-rw----  1 root disk      1,  11 мая 20 09:49 ram11

brw-rw----  1 root disk      1,  12 мая 20 09:49 ram12

brw-rw----  1 root disk      1,  13 мая 20 09:49 ram13

brw-rw----  1 root disk      1,  14 мая 20 09:49 ram14

brw-rw----  1 root disk      1,  15 мая 20 09:49 ram15

brw-rw----  1 root disk      1,   2 мая 20 09:49 ram2

brw-rw----  1 root disk      1,   3 мая 20 09:49 ram3

brw-rw----  1 root disk      1,   4 мая 20 09:49 ram4

brw-rw----  1 root disk      1,   5 мая 20 09:49 ram5

brw-rw----  1 root disk      1,   6 мая 20 09:49 ram6

brw-rw----  1 root disk      1,   7 мая 20 09:49 ram7

brw-rw----  1 root disk      1,   8 мая 20 09:49 ram8

brw-rw----  1 root disk      1,   9 мая 20 09:49 ram9

crw-rw-rw-  1 root root      1,   8 мая 20 09:49 random

drwxr-xr-x  2 root root          60 янв  1  1970 raw

crw-rw-r--  1 root netdev   10, 242 мая 20 09:49 rfkill

crw-rw----  1 root video   238,   0 мая 20 09:49 rpivid-h264mem

crw-rw----  1 root video   240,   0 мая 20 09:49 rpivid-hevcmem

crw-rw----  1 root video   239,   0 мая 20 09:49 rpivid-intcmem

crw-rw----  1 root video   237,   0 мая 20 09:49 rpivid-vp9mem

lrwxrwxrwx  1 root root           5 мая 20 09:49 serial0 -> ttyS0

lrwxrwxrwx  1 root root           7 мая 20 09:49 serial1 -> ttyAMA0

drwxrwxrwt  2 root root          40 фев 14  2019 shm

drwxr-xr-x  3 root root         180 мая 20 09:49 snd

lrwxrwxrwx  1 root root          15 фев 14  2019 stderr -> /proc/self/fd/2

lrwxrwxrwx  1 root root          15 фев 14  2019 stdin -> /proc/self/fd/0

lrwxrwxrwx  1 root root          15 фев 14  2019 stdout -> /proc/self/fd/1

crw-rw-rw-  1 root tty       5,   0 мая 20 09:49 tty

crw--w----  1 root tty       4,   0 мая 20 09:54 tty0

crw-------  1 pi   tty       4,   1 мая 20 09:49 tty1

crw--w----  1 root tty       4,  10 мая 20 09:49 tty10

crw--w----  1 root tty       4,  11 мая 20 09:49 tty11

crw--w----  1 root tty       4,  12 мая 20 09:49 tty12

crw--w----  1 root tty       4,  13 мая 20 09:49 tty13

crw--w----  1 root tty       4,  14 мая 20 09:49 tty14

crw--w----  1 root tty       4,  15 мая 20 09:49 tty15

crw--w----  1 root tty       4,  16 мая 20 09:49 tty16

crw--w----  1 root tty       4,  17 мая 20 09:49 tty17

crw--w----  1 root tty       4,  18 мая 20 09:49 tty18

crw--w----  1 root tty       4,  19 мая 20 09:49 tty19

crw--w----  1 root tty       4,   2 мая 20 09:49 tty2

crw--w----  1 root tty       4,  20 мая 20 09:49 tty20

crw--w----  1 root tty       4,  21 мая 20 09:49 tty21

crw--w----  1 root tty       4,  22 мая 20 09:49 tty22

crw--w----  1 root tty       4,  23 мая 20 09:49 tty23

crw--w----  1 root tty       4,  24 мая 20 09:49 tty24

crw--w----  1 root tty       4,  25 мая 20 09:49 tty25

crw--w----  1 root tty       4,  26 мая 20 09:49 tty26

crw--w----  1 root tty       4,  27 мая 20 09:49 tty27

crw--w----  1 root tty       4,  28 мая 20 09:49 tty28

crw--w----  1 root tty       4,  29 мая 20 09:49 tty29

crw--w----  1 root tty       4,   3 мая 20 09:49 tty3

crw--w----  1 root tty       4,  30 мая 20 09:49 tty30

crw--w----  1 root tty       4,  31 мая 20 09:49 tty31

crw--w----  1 root tty       4,  32 мая 20 09:49 tty32

crw--w----  1 root tty       4,  33 мая 20 09:49 tty33

crw--w----  1 root tty       4,  34 мая 20 09:49 tty34

crw--w----  1 root tty       4,  35 мая 20 09:49 tty35

crw--w----  1 root tty       4,  36 мая 20 09:49 tty36

crw--w----  1 root tty       4,  37 мая 20 09:49 tty37

crw--w----  1 root tty       4,  38 мая 20 09:49 tty38

crw--w----  1 root tty       4,  39 мая 20 09:49 tty39

crw--w----  1 root tty       4,   4 мая 20 09:49 tty4

crw--w----  1 root tty       4,  40 мая 20 09:49 tty40

crw--w----  1 root tty       4,  41 мая 20 09:49 tty41

crw--w----  1 root tty       4,  42 мая 20 09:49 tty42

crw--w----  1 root tty       4,  43 мая 20 09:49 tty43

crw--w----  1 root tty       4,  44 мая 20 09:49 tty44

crw--w----  1 root tty       4,  45 мая 20 09:49 tty45

crw--w----  1 root tty       4,  46 мая 20 09:49 tty46

crw--w----  1 root tty       4,  47 мая 20 09:49 tty47

crw--w----  1 root tty       4,  48 мая 20 09:49 tty48

crw--w----  1 root tty       4,  49 мая 20 09:49 tty49

crw--w----  1 root tty       4,   5 мая 20 09:49 tty5

crw--w----  1 root tty       4,  50 мая 20 09:49 tty50

crw--w----  1 root tty       4,  51 мая 20 09:49 tty51

crw--w----  1 root tty       4,  52 мая 20 09:49 tty52

crw--w----  1 root tty       4,  53 мая 20 09:49 tty53

crw--w----  1 root tty       4,  54 мая 20 09:49 tty54

crw--w----  1 root tty       4,  55 мая 20 09:49 tty55

crw--w----  1 root tty       4,  56 мая 20 09:49 tty56

crw--w----  1 root tty       4,  57 мая 20 09:49 tty57

crw--w----  1 root tty       4,  58 мая 20 09:49 tty58

crw--w----  1 root tty       4,  59 мая 20 09:49 tty59

crw--w----  1 root tty       4,   6 мая 20 09:49 tty6

crw--w----  1 root tty       4,  60 мая 20 09:49 tty60

crw--w----  1 root tty       4,  61 мая 20 09:49 tty61

crw--w----  1 root tty       4,  62 мая 20 09:49 tty62

crw--w----  1 root tty       4,  63 мая 20 09:49 tty63

crw--w----  1 root tty       4,   7 мая 20 09:49 tty7

crw--w----  1 root tty       4,   8 мая 20 09:49 tty8

crw--w----  1 root tty       4,   9 мая 20 09:49 tty9

crw-rw----  1 root dialout 204,  64 мая 20 09:49 ttyAMA0

crw-------  1 root root      5,   3 мая 20 09:49 ttyprintk

crw-rw----  1 root dialout   4,  64 мая 20 09:49 ttyS0

crw-------  1 root root     10, 239 мая 20 09:49 uhid

crw-------  1 root root     10, 223 мая 20 09:49 uinput

crw-rw-rw-  1 root root      1,   9 мая 20 09:49 urandom

drwxr-xr-x  2 root root          60 фев 14  2019 usb

drwxr-xr-x  3 root root          60 мая 20 09:49 v4l

crw-rw----  1 root video   242,   0 мая 20 09:49 vchiq

crw-rw----  1 root video   247,   0 мая 20 09:49 vcio

crw-------  1 root root    248,   0 мая 20 09:49 vc-mem

crw-rw----  1 root tty       7,   0 мая 20 09:49 vcs

crw-rw----  1 root tty       7,   1 мая 20 09:49 vcs1

crw-rw----  1 root tty       7,   2 мая 20 09:49 vcs2

crw-rw----  1 root tty       7,   3 мая 20 09:49 vcs3

crw-rw----  1 root tty       7,   4 мая 20 09:49 vcs4

crw-rw----  1 root tty       7,   5 мая 20 09:49 vcs5

crw-rw----  1 root tty       7,   6 мая 20 09:49 vcs6

crw-rw----  1 root tty       7, 128 мая 20 09:49 vcsa

crw-rw----  1 root tty       7, 129 мая 20 09:49 vcsa1

crw-rw----  1 root tty       7, 130 мая 20 09:49 vcsa2

crw-rw----  1 root tty       7, 131 мая 20 09:49 vcsa3

crw-rw----  1 root tty       7, 132 мая 20 09:49 vcsa4

crw-rw----  1 root tty       7, 133 мая 20 09:49 vcsa5

crw-rw----  1 root tty       7, 134 мая 20 09:49 vcsa6

crw-rw----  1 root video    10,  61 мая 20 09:49 vcsm-cma

crw-rw----  1 root tty       7,  64 мая 20 09:49 vcsu

crw-rw----  1 root tty       7,  65 мая 20 09:49 vcsu1

crw-rw----  1 root tty       7,  66 мая 20 09:49 vcsu2

crw-rw----  1 root tty       7,  67 мая 20 09:49 vcsu3

crw-rw----  1 root tty       7,  68 мая 20 09:49 vcsu4

crw-rw----  1 root tty       7,  69 мая 20 09:49 vcsu5

crw-rw----  1 root tty       7,  70 мая 20 09:49 vcsu6

crw-------  1 root root     10,  63 мая 20 09:49 vga_arbiter

crw-------  1 root root     10, 137 мая 20 09:49 vhci

crw-rw----+ 1 root video    81,   4 мая 20 09:49 video10

crw-rw----+ 1 root video    81,   5 мая 20 09:49 video11

crw-rw----+ 1 root video    81,   6 мая 20 09:49 video12

crw-rw----+ 1 root video    81,   0 мая 20 09:49 video13

crw-rw----+ 1 root video    81,   1 мая 20 09:49 video14

crw-rw----+ 1 root video    81,   2 мая 20 09:49 video15

crw-rw----+ 1 root video    81,   3 мая 20 09:49 video16

crw-rw----+ 1 root video    81,   7 мая 20 09:49 video18

crw-------  1 root root     10, 130 мая 20 09:49 watchdog

crw-------  1 root root    250,   0 мая 20 09:49 watchdog0

crw-rw-rw-  1 root root      1,   5 мая 20 09:49 zero

Вот ссылка на проект: https://disk.yandex.ru/d/h2MJ2yVVIoRX0A



Последнее исправление: Alex_Golubev (всего исправлений: 9)

Для начала добавь своего unix-пользователя в группу dialout и modem (если таковая есть).

Xintrea ★★★★★
()

Проверь, что у тебя включены порты UART в /boot/config.txt «enable_uart=1»
и отключена serial console в /boot/cmdline.txt - удалить «console=serial0,115200» (или «console=ttyS0,115200»).
Можно посмотреть кем сейчас занят порт «sudo lsof /dev/ttyS0» и проверить текущий конфиг ядра «cat /proc/cmdline».

sigurd ★★★★★
()
Последнее исправление: sigurd (всего исправлений: 2)
Ответ на: комментарий от Alex_Golubev

Как проверить есть ли у меня права?

Cмотрим права на ttyS0 -

ls -l /dev/ttyS0
crw-rw---- 1 root dialout 4, 64 мая 20 10:04 /dev/ttyS0

в файл могут писать только root и члены группы dialout. Можно запустить твою прогу через sudo, чтобы временно cтать root

sigurd ★★★★★
()
Ответ на: комментарий от sigurd

«enable_uart=1» в /boot/config.txt проверил включен. Вот что в /boot/cmdline.txt:

console=tty1 root=PARTUUID=f2412780-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles

не удалял «console=serial0,115200» (или «console=ttyS0,115200») так как не нашел. Файл оставил без изменений. На команду lsof /dev/ttyS0:

root@pi:~# lsof /dev/ttyS0
root@pi:~# 

на cat /proc/cmdline:

root@pi:~# cat /proc/cmdline

coherent_pool=1M 8250.nr_uarts=1 snd_bcm2835.enable_compat_alsa=0 snd_bcm2835.enable_hdmi=1 video=HDMI-A-1:1920x1200M@60 smsc95xx.macaddr=E4:5F:01:3A:70:3C vc_mem.mem_base=0x3ec00000 vc_mem.mem_size=0x40000000  console=tty1 root=PARTUUID=f2412780-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles
root@pi:~# ls -l /dev/ttyS0
crw-rw---- 1 root dialout 4, 64 мая 20 15:01 /dev/ttyS0
root@pi:~# 

Что сделал: Добавил usermod -a -G dialout pi

Проблему не решило.

Alex_Golubev
() автор топика
Последнее исправление: Alex_Golubev (всего исправлений: 1)
Ответ на: комментарий от Alex_Golubev

я бы удалил из /boot/cmdline.txt строку «console=tty1» - если не пользуешься серийной консолью. Тем более - на разных моделях RPi серийные порты считаются по разному - где то ttyS0 первый порт, где то - второй.
Хотя - пустой вывод lsof /dev/ttyS0 говорит, что никто не сидит на этом порту. Если бы на нем была консоль - процесс agetty был бы в выводе lsof

sigurd ★★★★★
()
Последнее исправление: sigurd (всего исправлений: 1)
Ответ на: комментарий от sigurd

Если добавляешь «dtoverlay=disable-bt» в /boot/config.txt то ошибка сохраняется.

Alex_Golubev
() автор топика

выдает сообщение в режиме отладки:

Сигнал: 
SIGSEGV
Назначение: 
Segmentation fault

Этого мало. Умеете пользоваться отладчиком? Смотрите стек вызовов и находите, какой именно указатель неправильно попыталась разыменовать программа. Если ошибка сидит в дебрях Qt, ставьте отладочные символы для Qt.

AITap ★★★★★
()
Ответ на: комментарий от Alex_Golubev

Это значит сделал выход из-под текущей сессии (банально exit из терминала) и залогинился заново. Но если ребутнулся - то так оно и случилось, проблема не в этом.

agentgoblin
()
Ответ на: комментарий от aiqu6Ait

Ну падать то не должно от этого.

Может ради интереса попробовать другую библиотеку для работы с serial port.

rumgot ★★★★★
()
Последнее исправление: rumgot (всего исправлений: 1)
Ответ на: комментарий от Alex_Golubev

Можете дать пошаговую инструкцию?

Нет, потому что не знаю, к чему давать инструкцию. Для отладчика GDB ссылки на две пошаговые инструкции приведены в сообщении выше. Вполне возможно, что в Вашей среде разработки уже есть встроенный отладчик, достаточно прочитать по ней инструкцию и воспользоваться им. Поскольку Вы пишете на C++, Вам всё равно рано или поздно придётся изучить этот инструмент.

AITap ★★★★★
()
Последнее исправление: AITap (всего исправлений: 1)
Ответ на: комментарий от Alex_Golubev

Я новичок в отладки. Можете дать пошаговую инструкцию?

Последовательность примерно такая:

  1. включаем создание core ulimit -c unlimited
  2. запускаем свою прогу - она упадет с сообщением Segmentation fault (core dumped) и создаст файл core-NNNN, где NNNN - номер процесса.
  3. запускаем gdb для посмертного анализа gdb proga core-NNNN
  4. gdb покажет в каком месте упало, выдать команду bt - покажет цепочку вызовов функций. Обычно этого достаточно, чтобы понять в каком месте падает. Можно командой p var-name узнать значение var-name в момент падения.
  5. Segmentation fault бывает, если указатели неправильно инициализированы или вообще не инициализированы. Но это уже скорее отсутствие проверок в коде библиотеки.
sigurd ★★★★★
()
Последнее исправление: sigurd (всего исправлений: 3)

если дропать возвращаемые результаты, в т.ч. результат вызова error(), то сегфолт никуда не денется

qbe
()
Ответ на: комментарий от sigurd

Вроде нашел. У меня sysroot не задан. В общем получаю ошибку:

Do you need "set solib-search-path" or "set sysroot"?Could not load shared library symbols for /usr/local/qt/plugins/imageformats/libqwebp.so.

Но я его прописал в qt creator:

 sysroot "/home/alexey/raspberrypi/sysroot". Это sysroot который на host установлен.

И синхронизацию делал rsync -avz qt root@192.168.1.16:/usr/local

Alex_Golubev
() автор топика
Последнее исправление: Alex_Golubev (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.