Страница 11 из 15

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

Добавлено: 03 мар 2020, 12:28
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

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

Добавлено: 03 мар 2020, 18:06
going
DmitriiNT писал(а):накладываются с ошибками. Может в этом причина.
Смотри исходники LinuxCNC.
Выложи сюда под спойлер текст вывода (log) configure

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

Добавлено: 03 мар 2020, 18:09
going
DmitriiNT писал(а):Кто нибудь пробовал применить одновременно патчи preempt_rt и ipipe-core xenomai?
А зачем?
Надо либо то, либо это. Но патч "preempt_rt " не даёт существенных преимуществ для платформы на чипах allwiner.

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

Добавлено: 10 мар 2020, 22:26
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.

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

Добавлено: 10 мар 2020, 22:50
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 - что то еще надо...?

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

Добавлено: 10 мар 2020, 23:41
DmitriiNT
Отчет о сборке:

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

Добавлено: 11 мар 2020, 03:39
Serg
Проверь попадают-ли в собираемый .deb файлы libuspace-xenomai.so.0 и libuspace-xenomai.so

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

Добавлено: 11 мар 2020, 04:30
MX_Master

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

Добавлено: 11 мар 2020, 08:51
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

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

Добавлено: 11 мар 2020, 08:53
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

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

Добавлено: 11 мар 2020, 11:22
MX_Master
Попробуй. Если после этого latency-test станет краше, значит, дело только в проверке.

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

Добавлено: 11 мар 2020, 11:37
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
    }

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

Добавлено: 11 мар 2020, 12:21
Serg
DmitriiNT писал(а):Не понял??? Это отключается проверка что-ли?
Проверяет наличие слова "-xenomai" в выводе "uname -a".
DmitriiNT писал(а):Ошибка детская :) но всё же...
А может и не детская...
Ошибка детская, но нужно смотреть контекст - если результат функции нигде не используется, то при компиляции современными версиями gcc будет только это предупреждение, ну и неаккуратный код.

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

Добавлено: 11 мар 2020, 18:36
DmitriiNT
4-я попытка подружить linuxcnc и xenomai не увенчалась успехом. :cry:
Опять Note: Using POSIX non-realtime :freak:
Интересно, у кого-нибудь получилось?
Хочу увидеть: Note: Using POSIX realtime

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

Добавлено: 11 мар 2020, 20:51
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

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

Добавлено: 11 мар 2020, 21:36
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"
тоже будет работать.

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

Добавлено: 11 мар 2020, 21:53
DmitriiNT
Спасибо! Разобрался.
Пока копаю глубже...

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

Добавлено: 11 мар 2020, 23:29
DmitriiNT
Ну вот, все таки хакнул я LinuxCNC. :hehehe: Note: Using POSIX realtime :hehehe:
Работы конечно еще много, но я на правильном пути...
Latency можно до 12-15 мкс довести. :good:

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

Добавлено: 12 мар 2020, 06:24
DmitriiNT
Продолжаем!
Выделил два ядра (2,3) xenomai-ну, а грузится только одно - последнее 3-е ядро. Как-то странно он нагрузку распределяет. :wik:
Кстати, когда ксеномайновский latency тест (2730 ns) запускаешь параллельно с нашим, - наш просто отдыхает.
Кто знает, за связь с Cobalt-ом в LinuxCNC какие файлы отвечают?
Может можно их переписать, и заставить работать base_thread в пространстве ядра?
И еще hal_gpio драйвер где посмотреть можно? Что бы он с Cobalt-ом работал.
Мне бы хотя бы образец. Так сказать, с чего начать...

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

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

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

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