Xenomai + LinuxCNC, EVL + LinuxCNC из исходников

Общие вопросы по операционным системам семейства Linux.
DmitriiNT
Кандидат
Сообщения: 56
Зарегистрирован: 11 дек 2019, 20:17
Репутация: 6
Настоящее имя: Дмитрий
Контактная информация:

Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников

Сообщение DmitriiNT »

Добрый день!

Такой вопрос. Кто нибудь пробовал применить одновременно патчи preempt_rt и ipipe-core xenomai?
Я сегодня попробовал.
Если накладывать первым патч preempt_rt, то ipipe-core xenomai выполняется с ошибками. Если наоборот, то все нормально. Будет ли мешать preempt_rt xenomai-ну?
Ядро пока не собирал.

Эксперименты провожу с ядром 4.19.55
linux-4.19.55
xenomai-3.1
ipipe-core-4.19.55-arm64-4.patch
preempt_rt patch-4.19.59-rt24.patch
Аватара пользователя
going
Мастер
Сообщения: 516
Зарегистрирован: 29 сен 2013, 20:55
Репутация: 129
Настоящее имя: Леонид
Откуда: г.Киров
Контактная информация:

Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников

Сообщение going »

DmitriiNT писал(а):накладываются с ошибками. Может в этом причина.
Смотри исходники LinuxCNC.
Выложи сюда под спойлер текст вывода (log) configure
Платы: BPI-M3, BPI-A64, OPI-PC2
Аватара пользователя
going
Мастер
Сообщения: 516
Зарегистрирован: 29 сен 2013, 20:55
Репутация: 129
Настоящее имя: Леонид
Откуда: г.Киров
Контактная информация:

Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников

Сообщение going »

DmitriiNT писал(а):Кто нибудь пробовал применить одновременно патчи preempt_rt и ipipe-core xenomai?
А зачем?
Надо либо то, либо это. Но патч "preempt_rt " не даёт существенных преимуществ для платформы на чипах allwiner.
Платы: BPI-M3, BPI-A64, OPI-PC2
DmitriiNT
Кандидат
Сообщения: 56
Зарегистрирован: 11 дек 2019, 20:17
Репутация: 6
Настоящее имя: Дмитрий
Контактная информация:

Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников

Сообщение DmitriiNT »

Доброго времени суток всем!
Вообщем никак у меня не получается подружить Linuxcnc и Xenomai :freak:
Все собирается без единой ошибки, устанавливается, запускается, но ...

Код: Выделить всё

LINUXCNC - 2.8.0~pre1
Machine configuration directory is '/home/cnc/linuxcnc/configs/sim.axis'
Machine configuration file is 'axis_mm.ini'
Starting LinuxCNC...
Found file(lib): /usr/share/linuxcnc/hallib/core_sim.hal
[b]Note: Using POSIX non-realtime[/b]
Found file(lib): /usr/share/linuxcnc/hallib/sim_spindle_encoder.hal
Found file(lib): /usr/share/linuxcnc/hallib/axis_manualtoolchange.hal
Found file(lib): /usr/share/linuxcnc/hallib/simulated_home.hal
note: MAXV     max: 53.340 units/sec 3200.400 units/min
note: LJOG     max: 53.340 units/sec 3200.400 units/min
note: LJOG default: 30.480 units/sec 1828.800 units/min
note: jog_order='XYZ'
note: jog_invert=set([])
task: main loop took 0.019612 seconds
Такое ощущение, что где то разрешения или правила не прописаны...?

Во вложении готовые пакеты с LinuxCNC для OrangePI PC2.
Вложения
linuxcnc-uspace_2.8.0~pre1_arm64.zip
Устанавливаются легко с помощью GDebi
(25.11 МБ) 394 скачивания
DmitriiNT
Кандидат
Сообщения: 56
Зарегистрирован: 11 дек 2019, 20:17
Репутация: 6
Настоящее имя: Дмитрий
Контактная информация:

Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников

Сообщение DmitriiNT »

Добавил правила для xenomai в /etc/udev/rules.d/xenomai.rules

Код: Выделить всё

# Don't let udev mess with our special network names
KERNEL=="vnic*|rteth*|rtlo", NAME="$env{INTERFACE_NAME}"
# Xenomai real-time devices
SUBSYSTEM=="rtdm", MODE="0660", GROUP="xenomai"
# allow RW access to /dev/mem
KERNEL=="mem", MODE="0660", GROUP="kmem"
# real-time heap device (Xenomai:rtheap)
KERNEL=="rtheap", MODE="0660", GROUP=="xenomai"
# real-time pipe devices (Xenomai:rtpipe)
KERNEL=="rtp[0-9]*", MODE="0660", GROUP="xenomai"
Добавил юзера cnc в группы:

Код: Выделить всё

usermod -a -G xenomai,sudo,staff,kmem cnc
Все равно, Note: Using POSIX non-realtime - что то еще надо...?
DmitriiNT
Кандидат
Сообщения: 56
Зарегистрирован: 11 дек 2019, 20:17
Репутация: 6
Настоящее имя: Дмитрий
Контактная информация:

Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников

Сообщение DmitriiNT »

Отчет о сборке:
Вложения
linuxcnc_2.8.0~pre1_arm64.txt
(763.05 КБ) 480 скачиваний
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников

Сообщение Serg »

Проверь попадают-ли в собираемый .deb файлы libuspace-xenomai.so.0 и libuspace-xenomai.so
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
MX_Master
Мастер
Сообщения: 7465
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3088
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников

Сообщение MX_Master »

DmitriiNT
Кандидат
Сообщения: 56
Зарегистрирован: 11 дек 2019, 20:17
Репутация: 6
Настоящее имя: Дмитрий
Контактная информация:

Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников

Сообщение DmitriiNT »

UAVpilot писал(а):Проверь попадают-ли в собираемый .deb файлы libuspace-xenomai.so.0 и libuspace-xenomai.so
Доброго Вам!

Есть такие файлы:
libuspace-xenomai.so.0 - в пакете linuxcnc-uspace-xenomai_2.8.0~pre1_arm64.deb
libuspace-xenomai.so - в пакете linuxcnc-uspace-dev_2.8.0~pre1_arm64.deb

После установки файлы лежат соответственно в:

Код: Выделить всё

/usr/lib/libuspace-xenomai.so.0
/usr/lib/libuspace-xenomai.so
DmitriiNT
Кандидат
Сообщения: 56
Зарегистрирован: 11 дек 2019, 20:17
Репутация: 6
Настоящее имя: Дмитрий
Контактная информация:

Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников

Сообщение DmitriiNT »

Доброго Вам!
Не понял??? Это отключается проверка что-ли?
Там чуть выше есть:

Код: Выделить всё

#ifdef USPACE_XENOMAI
static int detect_xenomai() {
    struct utsname u;
    uname(&u);
    return strcasestr (u.release, "-xenomai") != 0;
}
#else
static int detect_xenomai() {
    return 0;
}
#endif
...
...

static int detect_realtime() {
    struct stat st;
    if ((stat(EMC2_BIN_DIR "/rtapi_app", &st) < 0)
            || st.st_uid != 0 || !(st.st_mode & S_ISUID))
        return 0;
    return detect_env_override() || detect_preempt_rt() || detect_rtai() || detect_xenomai();
}
И при сборке реально определяется USPACE_XENOMAI

Код: Выделить всё

checking rpc/rpc.h presence... yes
checking for rpc/rpc.h... yes
checking for rtai-config... none
checking for xeno-config... /usr/bin/xeno-config
checking for realtime API(s) to use... uspace+xenomai
checking whether to enable userspace PCI access... yes
checking for libudev... yes - version 237
checking for cc version... not specified
Последний раз редактировалось DmitriiNT 11 мар 2020, 11:24, всего редактировалось 1 раз.
Аватара пользователя
MX_Master
Мастер
Сообщения: 7465
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3088
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников

Сообщение MX_Master »

Попробуй. Если после этого latency-test станет краше, значит, дело только в проверке.
DmitriiNT
Кандидат
Сообщения: 56
Зарегистрирован: 11 дек 2019, 20:17
Репутация: 6
Настоящее имя: Дмитрий
Контактная информация:

Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников

Сообщение DmitriiNT »

MX_Master писал(а):Попробуй. Если после этого latency-test станет краше, значит, дело только в проверке.
Вечером попробую.
Анализируя логи, меня еще вот беспокоит что:

Код: Выделить всё

...
Compiling hal/hal_lib.c
Compiling rtapi/uspace_xenomai.cc
rtapi/uspace_xenomai.cc: In member function ‘virtual unsigned char {anonymous}::XenomaiApp::do_inb(unsigned int)’:
rtapi/uspace_xenomai.cc:130:5: warning: no return statement in function returning non-void [-Wreturn-type]
     }
     ^
Compiling rtapi/uspace_ulapi.c
...
Ошибка детская :) но всё же...
А может и не детская...

Код: Выделить всё

#ifdef HAVE_SYS_IO_H
#include <sys/io.h>
#endif
...
...
unsigned char do_inb(unsigned int port) {
#ifdef HAVE_SYS_IO_H
        return inb(port);
#endif
    }

    void do_outb(unsigned char val, unsigned int port) {
#ifdef HAVE_SYS_IO_H
        return outb(val, port);
#endif
    }
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников

Сообщение Serg »

DmitriiNT писал(а):Не понял??? Это отключается проверка что-ли?
Проверяет наличие слова "-xenomai" в выводе "uname -a".
DmitriiNT писал(а):Ошибка детская :) но всё же...
А может и не детская...
Ошибка детская, но нужно смотреть контекст - если результат функции нигде не используется, то при компиляции современными версиями gcc будет только это предупреждение, ну и неаккуратный код.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
DmitriiNT
Кандидат
Сообщения: 56
Зарегистрирован: 11 дек 2019, 20:17
Репутация: 6
Настоящее имя: Дмитрий
Контактная информация:

Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников

Сообщение DmitriiNT »

4-я попытка подружить linuxcnc и xenomai не увенчалась успехом. :cry:
Опять Note: Using POSIX non-realtime :freak:
Интересно, у кого-нибудь получилось?
Хочу увидеть: Note: Using POSIX realtime
Вложения
Screenshot from 2020-03-11 20-27-35.png (5446 просмотров) <a class='original' href='./download/file.php?id=178073&sid=a991846f462a57eae3832d1729e0f767&mode=view' target=_blank>Загрузить оригинал (49.59 КБ)</a>
DmitriiNT
Кандидат
Сообщения: 56
Зарегистрирован: 11 дек 2019, 20:17
Репутация: 6
Настоящее имя: Дмитрий
Контактная информация:

Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников

Сообщение DmitriiNT »

А знает ли великий All, как в данном проекте можно отдельную библиотеку скомпилировать со всеми путями #include-никами?
Пробовал стандартно - но, gcc include видит только в <>, а локальные "" не видит. А прописывать руками пути очень муторно???
Нужно uspace_rtapi_app.cc пересобрать.
В ней собака порылась. имхо.
Поискал я тут откуда эта фраза Using POSIX non-realtime берется:

Код: Выделить всё

cnc@orangepipc2:~$ grep -r "Using POSIX non-realtime" /home/cnc/emc/
Binary file /home/cnc/emc/debian/linuxcnc-uspace/usr/bin/rtapi_app matches
/home/cnc/emc/src/rtapi/uspace_rtapi_app.cc:        rtapi_print_msg(RTAPI_MSG_ERR, "Note: Using POSIX non-realtime\n");
Binary file /home/cnc/emc/src/objects/rtapi/uspace_rtapi_app.o matches
Binary file /home/cnc/emc/bin/rtapi_app matches
/home/cnc/emc/docs/src/gui/gscreen.txt:Note: Using POSIX non-realtime
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников

Сообщение Serg »

DmitriiNT писал(а):А знает ли великий All, как в данном проекте можно отдельную библиотеку скомпилировать со всеми путями #include-никами?
Это как? Скомпилированные библиотеки содержат только объектные файлы, никаких .h в них нет.
DmitriiNT писал(а):Пробовал стандартно - но, gcc include видит только в <>, а локальные "" не видит. А прописывать руками пути очень муторно???
:wik:

Код: Выделить всё

$ cat t.h
#define HELLO "Hello, World!"

$ cat t.c
#include <stdio.h>
#include "t.h"

void main(void) {
  printf("%s\n", HELLO);
}

$ make t
cc     t.c   -o t
$ ./t
Hello, World!
$ cc --version
cc (GCC) 9.2.1 20190827 (Red Hat 9.2.1-1)
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ 
<file.h> - файл ищется только в каталогах, заданных опциями "-I", ну и в "стандартных".
"file.h" - файл ищется там-же и ещё в текущем каталоге.
Т.е. например

Код: Выделить всё

#include "stdio.h"
тоже будет работать.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
DmitriiNT
Кандидат
Сообщения: 56
Зарегистрирован: 11 дек 2019, 20:17
Репутация: 6
Настоящее имя: Дмитрий
Контактная информация:

Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников

Сообщение DmitriiNT »

Спасибо! Разобрался.
Пока копаю глубже...
DmitriiNT
Кандидат
Сообщения: 56
Зарегистрирован: 11 дек 2019, 20:17
Репутация: 6
Настоящее имя: Дмитрий
Контактная информация:

Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников

Сообщение DmitriiNT »

Ну вот, все таки хакнул я LinuxCNC. :hehehe: Note: Using POSIX realtime :hehehe:
Работы конечно еще много, но я на правильном пути...
Latency можно до 12-15 мкс довести. :good:
Вложения
Screenshot from 2020-03-12 01-21-17.png (5425 просмотров) <a class='original' href='./download/file.php?id=178100&sid=a991846f462a57eae3832d1729e0f767&mode=view' target=_blank>Загрузить оригинал (64.58 КБ)</a>
DmitriiNT
Кандидат
Сообщения: 56
Зарегистрирован: 11 дек 2019, 20:17
Репутация: 6
Настоящее имя: Дмитрий
Контактная информация:

Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников

Сообщение DmitriiNT »

Продолжаем!
Выделил два ядра (2,3) xenomai-ну, а грузится только одно - последнее 3-е ядро. Как-то странно он нагрузку распределяет. :wik:
Кстати, когда ксеномайновский latency тест (2730 ns) запускаешь параллельно с нашим, - наш просто отдыхает.
Кто знает, за связь с Cobalt-ом в LinuxCNC какие файлы отвечают?
Может можно их переписать, и заставить работать base_thread в пространстве ядра?
И еще hal_gpio драйвер где посмотреть можно? Что бы он с Cobalt-ом работал.
Мне бы хотя бы образец. Так сказать, с чего начать...
Вложения
Screenshot from 2020-03-12 08-04-48.png (5411 просмотров) <a class='original' href='./download/file.php?id=178105&sid=a991846f462a57eae3832d1729e0f767&mode=view' target=_blank>Загрузить оригинал (297.96 КБ)</a>
Аватара пользователя
MX_Master
Мастер
Сообщения: 7465
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3088
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников

Сообщение MX_Master »

Дмитрий, не забывай, что кроме значения latency, ещё важно знать, сколько времени занимает сам базовый период. В нём, как минимум, будут крутится 3 функции - gpio.read, stepgen.make-pulses и gpio.write. Процессор апельсина, который работает на частоте ~1.3 ГГц, в этом плане даже до 4-го пня (3 ГГц) не дотягивает ;)

По моим прикидкам, gpio.read и write в апельсине могут вместе занимать до 20 мкс и более. Если прибавить сюда время от stepgen.make-pulses, общая сумма станет заметно больше. К тому же, я сомневаюсь, что кто-то возьмётся переписывать эти фунции на ассемблере, чтобы хоть как-то сократить время их выполнения.

Так что, перед игрищами с latency, я бы для начала замерил базовый период, а уж потом бежал уменьшать latency :)
Ответить

Вернуться в «Прочие вопросы Linux»