Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
-
- Кандидат
- Сообщения: 56
- Зарегистрирован: 11 дек 2019, 20:17
- Репутация: 6
- Настоящее имя: Дмитрий
- Контактная информация:
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
Добрый день!
Такой вопрос. Кто нибудь пробовал применить одновременно патчи 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
Такой вопрос. Кто нибудь пробовал применить одновременно патчи 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
- Мастер
- Сообщения: 523
- Зарегистрирован: 29 сен 2013, 20:55
- Репутация: 129
- Настоящее имя: Леонид
- Откуда: г.Киров
- Контактная информация:
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
Смотри исходники LinuxCNC.DmitriiNT писал(а):накладываются с ошибками. Может в этом причина.
Выложи сюда под спойлер текст вывода (log) configure
Платы: BPI-M3, BPI-A64, OPI-PC2
- going
- Мастер
- Сообщения: 523
- Зарегистрирован: 29 сен 2013, 20:55
- Репутация: 129
- Настоящее имя: Леонид
- Откуда: г.Киров
- Контактная информация:
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
А зачем?DmitriiNT писал(а):Кто нибудь пробовал применить одновременно патчи preempt_rt и ipipe-core xenomai?
Надо либо то, либо это. Но патч "preempt_rt " не даёт существенных преимуществ для платформы на чипах allwiner.
Платы: BPI-M3, BPI-A64, OPI-PC2
-
- Кандидат
- Сообщения: 56
- Зарегистрирован: 11 дек 2019, 20:17
- Репутация: 6
- Настоящее имя: Дмитрий
- Контактная информация:
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
Доброго времени суток всем!
Вообщем никак у меня не получается подружить Linuxcnc и Xenomai
Все собирается без единой ошибки, устанавливается, запускается, но ...
Такое ощущение, что где то разрешения или правила не прописаны...?
Во вложении готовые пакеты с LinuxCNC для OrangePI PC2.
Вообщем никак у меня не получается подружить Linuxcnc и Xenomai
Все собирается без единой ошибки, устанавливается, запускается, но ...
Код: Выделить всё
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 МБ) 400 скачиваний
-
- Кандидат
- Сообщения: 56
- Зарегистрирован: 11 дек 2019, 20:17
- Репутация: 6
- Настоящее имя: Дмитрий
- Контактная информация:
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
Добавил правила для xenomai в /etc/udev/rules.d/xenomai.rules
Добавил юзера cnc в группы:
Все равно, Note: Using POSIX non-realtime - что то еще надо...?
Код: Выделить всё
# 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"
Код: Выделить всё
usermod -a -G xenomai,sudo,staff,kmem cnc
-
- Кандидат
- Сообщения: 56
- Зарегистрирован: 11 дек 2019, 20:17
- Репутация: 6
- Настоящее имя: Дмитрий
- Контактная информация:
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
Отчет о сборке:
- Вложения
-
- linuxcnc_2.8.0~pre1_arm64.txt
- (763.05 КБ) 484 скачивания
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
Проверь попадают-ли в собираемый .deb файлы libuspace-xenomai.so.0 и libuspace-xenomai.so
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
-
- Кандидат
- Сообщения: 56
- Зарегистрирован: 11 дек 2019, 20:17
- Репутация: 6
- Настоящее имя: Дмитрий
- Контактная информация:
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
Доброго Вам!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
-
- Кандидат
- Сообщения: 56
- Зарегистрирован: 11 дек 2019, 20:17
- Репутация: 6
- Настоящее имя: Дмитрий
- Контактная информация:
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
Доброго Вам!MX_Master писал(а):https://github.cnc32.ru/orangecnc/linux ... ff544cb529
Не понял??? Это отключается проверка что-ли?
Там чуть выше есть:
Код: Выделить всё
#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();
}
Код: Выделить всё
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
- Мастер
- Сообщения: 7478
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3099
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
Попробуй. Если после этого latency-test станет краше, значит, дело только в проверке.
-
- Кандидат
- Сообщения: 56
- Зарегистрирован: 11 дек 2019, 20:17
- Репутация: 6
- Настоящее имя: Дмитрий
- Контактная информация:
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
Вечером попробую.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 из исходников
Проверяет наличие слова "-xenomai" в выводе "uname -a".DmitriiNT писал(а):Не понял??? Это отключается проверка что-ли?
Ошибка детская, но нужно смотреть контекст - если результат функции нигде не используется, то при компиляции современными версиями gcc будет только это предупреждение, ну и неаккуратный код.DmitriiNT писал(а):Ошибка детская но всё же...
А может и не детская...
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
-
- Кандидат
- Сообщения: 56
- Зарегистрирован: 11 дек 2019, 20:17
- Репутация: 6
- Настоящее имя: Дмитрий
- Контактная информация:
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
4-я попытка подружить linuxcnc и xenomai не увенчалась успехом.
Опять Note: Using POSIX non-realtime
Интересно, у кого-нибудь получилось?
Хочу увидеть: Note: Using POSIX realtime
Опять Note: Using POSIX non-realtime
Интересно, у кого-нибудь получилось?
Хочу увидеть: Note: Using POSIX realtime
-
- Кандидат
- Сообщения: 56
- Зарегистрирован: 11 дек 2019, 20:17
- Репутация: 6
- Настоящее имя: Дмитрий
- Контактная информация:
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
А знает ли великий All, как в данном проекте можно отдельную библиотеку скомпилировать со всеми путями #include-никами?
Пробовал стандартно - но, gcc include видит только в <>, а локальные "" не видит. А прописывать руками пути очень муторно???
Нужно uspace_rtapi_app.cc пересобрать.
В ней собака порылась. имхо.
Поискал я тут откуда эта фраза Using POSIX non-realtime берется:
Пробовал стандартно - но, 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 из исходников
Это как? Скомпилированные библиотеки содержат только объектные файлы, никаких .h в них нет.DmitriiNT писал(а):А знает ли великий All, как в данном проекте можно отдельную библиотеку скомпилировать со всеми путями #include-никами?
DmitriiNT писал(а):Пробовал стандартно - но, gcc include видит только в <>, а локальные "" не видит. А прописывать руками пути очень муторно???
Код: Выделить всё
$ 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" - файл ищется там-же и ещё в текущем каталоге.
Т.е. например
Код: Выделить всё
#include "stdio.h"
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
-
- Кандидат
- Сообщения: 56
- Зарегистрирован: 11 дек 2019, 20:17
- Репутация: 6
- Настоящее имя: Дмитрий
- Контактная информация:
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
Спасибо! Разобрался.
Пока копаю глубже...
Пока копаю глубже...
-
- Кандидат
- Сообщения: 56
- Зарегистрирован: 11 дек 2019, 20:17
- Репутация: 6
- Настоящее имя: Дмитрий
- Контактная информация:
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
Ну вот, все таки хакнул я LinuxCNC. Note: Using POSIX realtime
Работы конечно еще много, но я на правильном пути...
Latency можно до 12-15 мкс довести.
Работы конечно еще много, но я на правильном пути...
Latency можно до 12-15 мкс довести.
-
- Кандидат
- Сообщения: 56
- Зарегистрирован: 11 дек 2019, 20:17
- Репутация: 6
- Настоящее имя: Дмитрий
- Контактная информация:
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
Продолжаем!
Выделил два ядра (2,3) xenomai-ну, а грузится только одно - последнее 3-е ядро. Как-то странно он нагрузку распределяет.
Кстати, когда ксеномайновский latency тест (2730 ns) запускаешь параллельно с нашим, - наш просто отдыхает.
Кто знает, за связь с Cobalt-ом в LinuxCNC какие файлы отвечают?
Может можно их переписать, и заставить работать base_thread в пространстве ядра?
И еще hal_gpio драйвер где посмотреть можно? Что бы он с Cobalt-ом работал.
Мне бы хотя бы образец. Так сказать, с чего начать...
Выделил два ядра (2,3) xenomai-ну, а грузится только одно - последнее 3-е ядро. Как-то странно он нагрузку распределяет.
Кстати, когда ксеномайновский latency тест (2730 ns) запускаешь параллельно с нашим, - наш просто отдыхает.
Кто знает, за связь с Cobalt-ом в LinuxCNC какие файлы отвечают?
Может можно их переписать, и заставить работать base_thread в пространстве ядра?
И еще hal_gpio драйвер где посмотреть можно? Что бы он с Cobalt-ом работал.
Мне бы хотя бы образец. Так сказать, с чего начать...
- MX_Master
- Мастер
- Сообщения: 7478
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3099
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
Дмитрий, не забывай, что кроме значения latency, ещё важно знать, сколько времени занимает сам базовый период. В нём, как минимум, будут крутится 3 функции - gpio.read, stepgen.make-pulses и gpio.write. Процессор апельсина, который работает на частоте ~1.3 ГГц, в этом плане даже до 4-го пня (3 ГГц) не дотягивает
По моим прикидкам, gpio.read и write в апельсине могут вместе занимать до 20 мкс и более. Если прибавить сюда время от stepgen.make-pulses, общая сумма станет заметно больше. К тому же, я сомневаюсь, что кто-то возьмётся переписывать эти фунции на ассемблере, чтобы хоть как-то сократить время их выполнения.
Так что, перед игрищами с latency, я бы для начала замерил базовый период, а уж потом бежал уменьшать latency
По моим прикидкам, gpio.read и write в апельсине могут вместе занимать до 20 мкс и более. Если прибавить сюда время от stepgen.make-pulses, общая сумма станет заметно больше. К тому же, я сомневаюсь, что кто-то возьмётся переписывать эти фунции на ассемблере, чтобы хоть как-то сократить время их выполнения.
Так что, перед игрищами с latency, я бы для начала замерил базовый период, а уж потом бежал уменьшать latency