Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru
Партнеры:
otladka.com.ua - г.Киев

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:1
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:5
Форум » starterkit.ru » Embedded Linux
Ошибки при работе с библиотекой libserialport
dolmatov
Добавлено 17.05.2024 12:51 Редактировалось 17.05.2024 13:06
0
Сообщение: 1
dolmatov
0

Пункты: 1325
Регистрация: 03.07.2016
Плата MangoPi/T113-s3. /buildroot. Пытаюсь работать с библиотекой libserialport, версия 1.0.1. Получаю список доступных портов средствами самой библиотеки. Среди них имется "/dev/ttyS5". Получаю указатель на него и пытаюсь открыть, указатель ненулевой, но операция sp_open(port) возвращает -2.

фрагмент кода
Код
error = sp_get_port_by_name_f(sp_name, &port);
if (error == SP_OK) {
error = sp_open_f(port, SP_MODE_READ);


sp_get_port_by_name_f и sp_open_f - мои уазатели на соответствующие функции при загрузке из динамической библиотеки.

Установил переменную окружения LIBSERIALPORT_DEBUG=1, запустил программу, получаю:

Код
sp: sp_get_port_by_name(/dev/ttyS5, 0x231ec) called.
sp: Building structure for port /dev/ttyS5.
sp: get_port_details returning SP_OK.
sp: sp_get_port_by_name returning SP_OK.
sp: sp_open(0xb5500600, 0x1) called.
sp: Opening port /dev/ttyS5.
sp: get_config(0xb5500600, 0xb663dcd0, 0xb663dcac) called.
sp: Getting configuration for port /dev/ttyS5.
sp: get_flow(9, 0xb663dcd0) called.
sp: Getting advanced flow control.
sp: sp_last_error_message() called.
sp: sp_last_error_message returning Inappropriate ioctl for device.
sp: get_flow returning SP_ERR_FAIL: Getting termiox failed: Inappropriate ioctl for device.
sp: sp_free_error_message(Inappropriate ioctl for device) called.
sp: sp_free_error_message returning.
sp: get_config returning SP_ERR_FAIL.
sp: sp_close(0xb5500600) called.
sp: Closing port /dev/ttyS5.
sp: sp_close returning SP_OK.
sp: sp_open returning SP_ERR_FAIL.


Помогите выясниь причину проблемы...
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 17.05.2024 15:53 Сообщение: 2
sasamy
4.70

Пункты: 78121
Регистрация: 14.08.2009
Цитата

Плата MangoPi/T113-s3. /buildroot. Пытаюсь работать с библиотекой libserialport, версия 1.0.1.


что за библиотека ? то что в буилдруте - с версией 0.1.1

https://github.com/sigrokproject/libserialport/tags

Цитата

sp_get_port_by_name_f и sp_open_f - мои уазатели на соответствующие функции при загрузке из динамической библиотеки.


этот финт я вообще не понял - возьмите пример да и соберите, какой смысл с самого начала грабли заботливо раскладывать..
Спуститься к концу Подняться к началу
Персональная информация
dolmatov
Добавлено 17.05.2024 21:49 Редактировалось 17.05.2024 23:19 Сообщение: 3
dolmatov
0

Пункты: 1325
Регистрация: 03.07.2016
Цитата

этот финт я вообще не понял - возьмите пример да и соберите, какой смысл с самого начала грабли заботливо раскладывать..


Да, Вы совершенно правы, разумеется.. Видимо я сначала должен был спросить разобраться как грамотно использовать динамическую библиотеку. Сейчас я в ран-тайм программно открываю библиотеку, считываю из нее указатель на функцию, и затем этот указатель использую в качестве самой функции. Подход очень громоздкий, и видимо, существет альтернативный метод, динамическая линковка, с которым я незнаком пока что. Но мой метод худо бедно оправдал себя при работе с библиотекой libgpiod, Там у меня все получилось как нужно, и я продолжил в том же духе. Этот метод я почерпнул ЗДЕСЬ

Что касается версии библиотеки, то ее мне выдала сама библиотека, посредством ее функции gpiod_version_string(). (у меня, соответственно, указатель на нее gpiod_version_string_f())
И как я только что разглядел, я допустил ошибку в выводе результата этой функции на печать. Приношу свои извинения.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 19.05.2024 00:42 Редактировалось 19.05.2024 00:46 Сообщение: 4
sasamy
4.70

Пункты: 78121
Регистрация: 14.08.2009
Цитата

Подход очень громоздкий, и видимо, существет альтернативный метод, динамическая линковка, с которым я незнаком пока что.


если собирать корневую в buildroot а приложение собирать отдельно и потом запускать в этой корневой можно сделать простейший Makefile

Цитата

BRDIR ?= /home/user/buildroot-2022.08.3-sk-t113
CC = $(BRDIR)/output/host/bin/arm-none-linux-gnueabihf-gcc
SYSROOT = $(BRDIR)/output/staging
LIBS = -lserialport
SRC = send_receive.c
BIN = send_receive

all:
$(CC) $(SRC) -o $(BIN) -O2 -Wall \
-I$(SYSROOT)/usr/include \
-L$(SYSROOT)/usr/lib \
--sysroot=$(SYSROOT) $(LIBS)

clean:
rm $(BIN)


В нем прописан пример
https://sigrok.org/api/libserialport/unstable/a00008.html

его надо положить в одной директории с этим Makefile

BRDIR - путь к buildroot в вашей системе
CC - название кросскомпилятора в вашей сборке buildroot

чтобы собрать достаточно выполнить просто

make

PS форум удалил отступы, вместо [TAB] должна быть табуляция в файле

Цитата

all:
[TAB]$(CC) $(SRC) -o $(BIN) -O2 -Wall \
[TAB]-I$(SYSROOT)/usr/include \
[TAB]-L$(SYSROOT)/usr/lib \
[TAB]--sysroot=$(SYSROOT) $(LIBS)

clean:
[TAB]rm $(BIN)
Спуститься к концу Подняться к началу
Персональная информация
dolmatov
Добавлено 20.05.2024 13:00 Редактировалось 20.05.2024 15:12 Сообщение: 5
dolmatov
0

Пункты: 1325
Регистрация: 03.07.2016
Цитата

all:
[TAB]$(CC) $(SRC) -o $(BIN) -O2 -Wall \
[TAB]-I$(SYSROOT)/usr/include \
[TAB]-L$(SYSROOT)/usr/lib \
[TAB]--sysroot=$(SYSROOT) $(LIBS)

clean:
[TAB]rm $(BIN)

Уважаемый sasamy, крайне признателен Вам за помощь в правильной работе с динамическими библиотеками. Однако изначальная проблема была(и все еще имеет место) все таки в чем то другом. Запустил пример по Вашей ссылке и получил по-сути тот же самый результат..

Код
Looking for port /dev/ttyS5.
Opening port.
Error: Failed: Inappropriate ioctl for device
Aborted


Такой же результат получаю при попытке открыть порты ttyUSB0 или ttyUSB1 - (конвертер FT2232), их наличие в сиситеме тоже показывает фунукция sp_list_ports(struct sp_port **ports) этой же самой библиотеки..

между тем выхлоп команды stty:
Код
stty -F /dev/ttyS5
speed 9600 baud; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-brkint -imaxbel


PS: Похоже вот в чем дело ... https://sigrok.org/bugzilla/show_bug.cgi?id=1687
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 20.05.2024 17:56 Редактировалось 20.05.2024 18:01 Сообщение: 6
sasamy
4.70

Пункты: 78121
Регистрация: 14.08.2009
Цитата

PS: Похоже вот в чем дело


добавьте патч в buildroot, находясь в корне buildroot

wget https://raw.githubusercontent.com/sielenk/gentoo-ebuild-repository/main/dev-libs/libserialport/files/libserialport-termiox.patch -P ./package/libserialport/

и пересоберите libserialport

rm -rf ./output/build/libserialport*
make
Спуститься к концу Подняться к началу
Персональная информация
dolmatov
Добавлено 28.05.2024 07:05 Редактировалось 28.05.2024 08:10 Сообщение: 7
dolmatov
0

Пункты: 1325
Регистрация: 03.07.2016
Еще одна странность... Использовал эту библиотеку для работы с BLE модулем, не получалось получить ответ на АТ команды модуля, хотя при работе от терминала с USB/Com на РС все ОК. Сличил осциллограммы от USB/Com на РС и от последовательного порта платыю Обнаружил что при заданном BaudRate 230400, фактическая скорость прередачи с платы составляет примерно 0.93 от скорости с USB/Com ...

P.S. Ответа не требуется, освежил в памяти как задается BaudRate у процессора T113, вижу, что максимальное значение baudrate из стандартного ряда, с приемлемой точностью можно выбрать только 115200 .. При частоте кварца 24 МГц.
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Embedded Linux