Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
- 
				DmitriiNT
 - Кандидат
 - Сообщения: 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
						- 
				DmitriiNT
 - Кандидат
 - Сообщения: 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 МБ) 446 скачиваний
 
 
- 
				DmitriiNT
 - Кандидат
 - Сообщения: 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- 
				DmitriiNT
 - Кандидат
 - Сообщения: 56
 - Зарегистрирован: 11 дек 2019, 20:17
 - Репутация: 6
 - Настоящее имя: Дмитрий
 - Контактная информация:
 
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
Отчет о сборке:
			
							- Вложения
 - 
			
		
		
				
- linuxcnc_2.8.0~pre1_arm64.txt
 - (763.05 КБ) 534 скачивания
 
 
- Serg
 - Мастер
 - Сообщения: 21923
 - Зарегистрирован: 17 апр 2012, 14:58
 - Репутация: 5183
 - Заслуга: c781c134843e0c1a3de9
 - Настоящее имя: Сергей
 - Откуда: Москва
 - Контактная информация:
 
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
Проверь попадают-ли в собираемый .deb файлы libuspace-xenomai.so.0 и libuspace-xenomai.so
			
			
									
									Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
						- 
				DmitriiNT
 - Кандидат
 - Сообщения: 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- 
				DmitriiNT
 - Кандидат
 - Сообщения: 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
 - Мастер
 - Сообщения: 7488
 - Зарегистрирован: 27 июн 2015, 19:45
 - Репутация: 3113
 - Настоящее имя: Михаил
 - Откуда: Алматы
 - Контактная информация:
 
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
Попробуй. Если после этого latency-test станет краше, значит, дело только в проверке.
			
			
									
									
						- 
				DmitriiNT
 - Кандидат
 - Сообщения: 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
 - Репутация: 5183
 - Заслуга: c781c134843e0c1a3de9
 - Настоящее имя: Сергей
 - Откуда: Москва
 - Контактная информация:
 
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
Проверяет наличие слова "-xenomai" в выводе "uname -a".DmitriiNT писал(а):Не понял??? Это отключается проверка что-ли?
Ошибка детская, но нужно смотреть контекст - если результат функции нигде не используется, то при компиляции современными версиями gcc будет только это предупреждение, ну и неаккуратный код.DmitriiNT писал(а):Ошибка детскаяно всё же...
А может и не детская...
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
						- 
				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
- 
				DmitriiNT
 - Кандидат
 - Сообщения: 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
 - Репутация: 5183
 - Заслуга: 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"Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
						- 
				DmitriiNT
 - Кандидат
 - Сообщения: 56
 - Зарегистрирован: 11 дек 2019, 20:17
 - Репутация: 6
 - Настоящее имя: Дмитрий
 - Контактная информация:
 
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
Спасибо! Разобрался.
Пока копаю глубже...
			
			
									
									
						Пока копаю глубже...
- 
				DmitriiNT
 - Кандидат
 - Сообщения: 56
 - Зарегистрирован: 11 дек 2019, 20:17
 - Репутация: 6
 - Настоящее имя: Дмитрий
 - Контактная информация:
 
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
Ну вот, все таки хакнул я LinuxCNC.  
   Note: Using POSIX realtime  
 
Работы конечно еще много, но я на правильном пути...
Latency можно до 12-15 мкс довести.
			
							
			
									
									
						Работы конечно еще много, но я на правильном пути...
Latency можно до 12-15 мкс довести.
- 
				DmitriiNT
 - Кандидат
 - Сообщения: 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
 - Мастер
 - Сообщения: 7488
 - Зарегистрирован: 27 июн 2015, 19:45
 - Репутация: 3113
 - Настоящее имя: Михаил
 - Откуда: Алматы
 - Контактная информация:
 
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