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

Общие вопросы по операционным системам семейства Linux.

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

Сообщение going » 12 мар 2020, 16:32

MX_Master писал(а):По моим прикидкам, gpio.read и write в апельсине могут вместе занимать до 20 мкс и более.

Михаил, поделись "прикидками", в смысле как измерял и в каких условиях. Это важно.
Платы: BPI-M3, BPI-A64, OPI-PC2
Аватара пользователя
going
Мастер
 
Сообщения: 500
Зарегистрирован: 29 сен 2013, 20:55
Откуда: г.Киров
Репутация: 127

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

Сообщение MX_Master » 12 мар 2020, 16:43

LinuxCNC замеряет всё сам, по бырому подсмотреть можно с консоли:

halcmd show all
halcmd show all stepgen
halcmd show all трампарам
...

Для каждой функции там есть время выполнения в наносекундах.
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 5852
Зарегистрирован: 27 июн 2015, 19:45
Откуда: Алма-Ата
Репутация: 2603
Медальки:
Настоящее имя: Миша

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

Сообщение going » 12 мар 2020, 17:41

DmitriiNT писал(а):Выделил два ядра (2,3) xenomai-ну, а грузится только одно - последнее 3-е ядро. Как-то странно он нагрузку распределяет.

последнее cpu3 лучше оставить в покое. На нём крутится со-ядро, которое рулит всеми прерываниями и запуском РТ задач.
DmitriiNT писал(а):Кто знает, за связь с Cobalt-ом в LinuxCNC какие файлы отвечают?

В текущей версии LinuxCNC использует xenomai только, как вариант RTPREEMPT, т.е. работает в пространстве пользователя.
Тот факт, что тебе удалось это преодолеть, уже большой прогресс.
Что LinuxCNC хочет, смотри "linuxcnc/src/rtapi/rtapi*.h
Что предоставляет ядро xenomai соответственно в "xenomai/include/cobalt/*.h"
DmitriiNT писал(а):Может можно их переписать, и заставить работать base_thread в пространстве ядра?


Возможность запустить задачу в РТ режиме предоставляет "xenomai/include/alchemy/*.h"
Как бы работы не початый край.
Платы: BPI-M3, BPI-A64, OPI-PC2
Аватара пользователя
going
Мастер
 
Сообщения: 500
Зарегистрирован: 29 сен 2013, 20:55
Откуда: г.Киров
Репутация: 127

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

Сообщение going » 12 мар 2020, 17:44

MX_Master писал(а):LinuxCNC замеряет всё сам,

И результат зависит от того на каком ядре и в каком пространстве эта задача выполняется.
Платы: BPI-M3, BPI-A64, OPI-PC2
Аватара пользователя
going
Мастер
 
Сообщения: 500
Зарегистрирован: 29 сен 2013, 20:55
Откуда: г.Киров
Репутация: 127

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

Сообщение MX_Master » 12 мар 2020, 18:07

Пошёл-ка я нахрен из этой темы, тут и без меня слишком много умных парней...
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 5852
Зарегистрирован: 27 июн 2015, 19:45
Откуда: Алма-Ата
Репутация: 2603
Медальки:
Настоящее имя: Миша

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

Сообщение going » 12 мар 2020, 19:19

MX_Master писал(а):Пошёл-ка я нахрен из этой темы

:thinking:
Диалог полезен всем! Ты не находишь, что собеседник может заблуждаться и имеет право иметь своё мнение?
Приведи аргументы!
"нахрен" это не вежливо.
Платы: BPI-M3, BPI-A64, OPI-PC2
Аватара пользователя
going
Мастер
 
Сообщения: 500
Зарегистрирован: 29 сен 2013, 20:55
Откуда: г.Киров
Репутация: 127

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

Сообщение DmitriiNT » 14 мар 2020, 18:58

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

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

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

Доброго Вам!
Вот буду писать драйвер hal_gpio_rtdm тогда эти вопросы буду решать. Можно и на ассемблере, я начинал с него, если приспичит, то можно. Хотя "Си" не далеко ушел от ассемблера - после компиляции и есть машинные коды. Это в современных языках нужен интерпретатор, который отбирает у системы львиную долю времени.
Пока копаю путь к ядру.
При запуске Linuxcnc открывает 3 потока, latency-test - 4 потока с Cobalt.
Подскажите, как сие цифры интерпретировать?
Вложения
Xenomai + LinuxCNC, EVL + LinuxCNC из исходников Screenshot from 2020-03-14 20-35-14.png
Последний раз редактировалось DmitriiNT 14 мар 2020, 19:15, всего редактировалось 1 раз.
DmitriiNT
Кандидат
 
Сообщения: 56
Зарегистрирован: 11 дек 2019, 20:17
Репутация: 6
Настоящее имя: Дмитрий

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

Сообщение DmitriiNT » 14 мар 2020, 19:13

going писал(а):В текущей версии LinuxCNC использует xenomai только, как вариант RTPREEMPT, т.е. работает в пространстве пользователя.
Тот факт, что тебе удалось это преодолеть, уже большой прогресс.
Что LinuxCNC хочет, смотри "linuxcnc/src/rtapi/rtapi*.h
Что предоставляет ядро xenomai соответственно в "xenomai/include/cobalt/*.h"

Есть у меня некоторые соображения по этой теме.
Набрел я тут недавно на вот такое чудо:
https://github.com/mark-v-d/linuxcnc/tree/xenomai-3
Как есть не компилируется - не видит исходники xenomai_dev. И я не нашел, где указывается компилятору путь к исходникам xenomai_dev.
В общем он говорит, что у него полностью переработан модуль xenomai и работает в пространстве ядра.
Надо проверить.
DmitriiNT
Кандидат
 
Сообщения: 56
Зарегистрирован: 11 дек 2019, 20:17
Репутация: 6
Настоящее имя: Дмитрий

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

Сообщение going » 14 мар 2020, 21:24

DmitriiNT писал(а):Есть у меня некоторые соображения по этой теме.
Набрел я тут недавно на вот такое чудо:

Посмотрю завтра.

P.S. если честно то я отошёл от xenomai и пытаюсь собирать EVL ядро.
Для меня это немного вернуться вниз.
Платы: BPI-M3, BPI-A64, OPI-PC2
Аватара пользователя
going
Мастер
 
Сообщения: 500
Зарегистрирован: 29 сен 2013, 20:55
Откуда: г.Киров
Репутация: 127

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

Сообщение going » 14 мар 2020, 21:30

DmitriiNT писал(а):Подскажите, как сие цифры интерпретировать?

А собственно трудится rtapi_app как рт задача. Вроде всё хорошо.
Платы: BPI-M3, BPI-A64, OPI-PC2
Аватара пользователя
going
Мастер
 
Сообщения: 500
Зарегистрирован: 29 сен 2013, 20:55
Откуда: г.Киров
Репутация: 127

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

Сообщение DmitriiNT » 15 мар 2020, 00:02

going писал(а):
DmitriiNT писал(а):Есть у меня некоторые соображения по этой теме.
Набрел я тут недавно на вот такое чудо:

Посмотрю завтра.

P.S. если честно то я отошёл от xenomai и пытаюсь собирать EVL ядро.
Для меня это немного вернуться вниз.


Значить нормально все, можно драйвер hal_gpio_rtdm начинать писать. Мне еще интерфейс понадобится собственный. Какую-нибудь среду разработки порекомендуете? По форумам - рекомендуют Qt creator или Kdevelop. Ух, давненько не брал я в руки шашек... :D
А EVL ядро какое-то преимущество дает?
DmitriiNT
Кандидат
 
Сообщения: 56
Зарегистрирован: 11 дек 2019, 20:17
Репутация: 6
Настоящее имя: Дмитрий

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

Сообщение DmitriiNT » 15 мар 2020, 09:49

going писал(а):
DmitriiNT писал(а):Есть у меня некоторые соображения по этой теме.
Набрел я тут недавно на вот такое чудо:

Посмотрю завтра.

P.S. если честно то я отошёл от xenomai и пытаюсь собирать EVL ядро.
Для меня это немного вернуться вниз.


Я скопировал его исходный код, касающийся работы xenomai, в свой проект..., - так удалось скомпилировать linuxcnc.
Запускаю..., в принципе, внешне, ни каких изменений и джиттер и базовый период те же от 12 до 25 скачет - это если без нагрузок.
Увидел два предупреждения в терминале:
Код: Выделить всёРазвернуть
cnc@orangepipc2:~$ latency-test
   0"006.341| WARNING: [main] duplicate call from main program to xenomai_init() ignored
   0"006.460| WARNING: [main] (xeno-config --no-auto-init disables implicit call)
Note: Using XENOMAI (posix-skin) realtime

Двойной вызов инициализации xenomai.
И ядро xenomai сконфигурировано без разрешения для не явных вызовов. Как можно поменять без пересборки xenomai?

Поискал, откуда вызывается инициализация вижу два места:
Код: Выделить всёРазвернуть
cnc@orangepipc2:~$ grep -r "xenomai_init" /home/cnc/emc/
Binary file /home/cnc/emc/bin/rtapi_app matches
Binary file /home/cnc/emc/lib/libuspace-xenomai.so.0 matches
cnc@orangepipc2:~$

rtapi_app -> исходный код uspace_rtapi_app.cc
libuspace-xenomai.so.0 -> исходный код uspace_xenomai.cc
Причем библиотека libuspace-xenomai.so.0 явно вызывается из rtapi_app.
Вот кусок кода:
Код: Выделить всёРазвернуть
static RtapiApp *makeApp()
{
    std::unique_ptr<WithRoot> with_root;

    void *dll = nullptr;
    if(detect_xenomai()) {
        dll = dlopen(EMC2_HOME "/lib/libuspace-xenomai.so.0", RTLD_NOW);
        if(!dll) fprintf(stderr, "dlopen: %s\n", dlerror());
    }

    if(!dll && (euid != 0 || harden_rt() < 0))
    {
        rtapi_print_msg(RTAPI_MSG_ERR, "Note: Using POSIX non-realtime\n");
        return new Posix(SCHED_OTHER);
    }

    if(detect_rtai()) {
   with_root=std::make_unique<WithRoot>();
        dll = dlopen(EMC2_HOME "/lib/libuspace-rtai.so.0", RTLD_NOW);
        if(!dll) fprintf(stderr, "dlopen: %s\n", dlerror());
    }
    if(dll)
    {
        auto fn = reinterpret_cast<RtapiApp*(*)()>(dlsym(dll, "make"));
        if(!fn) fprintf(stderr, "dlopen: %s\n", dlerror());
        auto result = fn ? fn() : nullptr;
        if(result) {
            return result;
        }
    }
    rtapi_print_msg(RTAPI_MSG_ERR, "Note: Using POSIX realtime\n");
    return new Posix(SCHED_FIFO);
}

А где второй, не явный вызов xenomai_init() не нашел.
DmitriiNT
Кандидат
 
Сообщения: 56
Зарегистрирован: 11 дек 2019, 20:17
Репутация: 6
Настоящее имя: Дмитрий

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

Сообщение DmitriiNT » 15 мар 2020, 10:43

Еще есть упоминание о libuspace-rtai.so.0 в файле Submakefile:
Код: Выделить всёРазвернуть
ifeq ($(CONFIG_USPACE_XENOMAI),y)
USPACE_XENOMAI_SRCS := rtapi/uspace_xenomai.cc
USERSRCS += $(USPACE_XENOMAI_SRCS)
$(call TOOBJSDEPS, $(USPACE_XENOMAI_SRCS)): EXTRAFLAGS += -fPIC $(XENOMAI_CFLAGS)
../lib/libuspace-xenomai.so.0: $(call TOOBJS, $(USPACE_XENOMAI_SRCS))
   $(ECHO) Linking $(notdir $@)
   $(Q)$(CXX) -shared $(LDFLAGS) -o $@ $^ $(XENOMAI_LDFLAGS) -Wl,-soname,$(notdir $@)
TARGETS += ../lib/libuspace-xenomai.so.0
TARGETS += ../lib/libuspace-xenomai.so
endif

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

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

Сообщение DmitriiNT » 15 мар 2020, 10:51

И еще, в rtapi_app есть место, где при старте, подгружаются разные модули для rtapi_app:
Код: Выделить всёРазвернуть
static int do_load_cmd(string name, vector<string> args) {
    void *w = modules[name];
    if(w == NULL) {
        char what[LINELEN+1];
        snprintf(what, LINELEN, "%s/%s.so", EMC2_RTLIB_DIR, name.c_str());
        void *module = modules[name] = dlopen(what, RTLD_GLOBAL | RTLD_NOW);
        if(!module) {
            rtapi_print_msg(RTAPI_MSG_ERR, "%s: dlopen: %s\n", name.c_str(), dlerror());
            modules.erase(name);
            return -1;
        }
   /// XXX handle arguments
        int (*start)(void) = DLSYM<int(*)(void)>(module, "rtapi_app_main");
        if(!start) {
            rtapi_print_msg(RTAPI_MSG_ERR, "%s: dlsym: %s\n", name.c_str(), dlerror());
            dlclose(module);
            modules.erase(name);
            return -1;
        }
        int result;

        result = do_comp_args(module, args);
        if(result < 0) {
            dlclose(module);
            modules.erase(name);
            return -1;
        }

        if ((result=start()) < 0) {
            rtapi_print_msg(RTAPI_MSG_ERR, "%s: rtapi_app_main: %s (%d)\n",
                name.c_str(), strerror(-result), result);
            dlclose(module);
            modules.erase(name);
       return result;
        } else {
            instance_count ++;
       return 0;
        }
    } else {
        rtapi_print_msg(RTAPI_MSG_ERR, "%s: already exists\n", name.c_str());
        return -1;
    }
}

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

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

Сообщение going » 15 мар 2020, 12:04

DmitriiNT писал(а):По форумам - рекомендуют Qt creator или Kdevelop


Здесь просто сила привычки. Что привычнее и кажется удобнее, то и надо использовать.
DmitriiNT писал(а):А EVL ядро какое-то преимущество дает?

1-Очень подробная документация.
2- Проект всегда на вершине разработки ядра Linux. (xenomai тормознула на ядре 4.19)
3- Драйвер gpio умеет работать в РТ режиме.

DmitriiNT писал(а):Я скопировал его исходный код, касающийся работы xenomai, в свой проект..., - так удалось скомпилировать linuxcnc.

Дмитрий, как у тебя происходит процесс сборки?
Я всё собирал в armbian, а там начиная с ядра (кросскомпиляция) затем в chroot окружение
сборка библиотек и linuxcnc всё это идёт друг за другом.
Платы: BPI-M3, BPI-A64, OPI-PC2
Аватара пользователя
going
Мастер
 
Сообщения: 500
Зарегистрирован: 29 сен 2013, 20:55
Откуда: г.Киров
Репутация: 127

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

Сообщение going » 15 мар 2020, 12:11

DmitriiNT писал(а):Еще есть упоминание о libuspace-rtai.so.0

Это вроде имеет отношение к ядру rtai.
Для него действительно собираются модули ядра Linux и они должны подгружаться при старте LinuxCNC.
Платы: BPI-M3, BPI-A64, OPI-PC2
Аватара пользователя
going
Мастер
 
Сообщения: 500
Зарегистрирован: 29 сен 2013, 20:55
Откуда: г.Киров
Репутация: 127

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

Сообщение DmitriiNT » 15 мар 2020, 15:02

DmitriiNT писал(а):libuspace-xenomai.so.0

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

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

Сообщение DmitriiNT » 15 мар 2020, 15:25

going писал(а):Дмитрий, как у тебя происходит процесс сборки?
Я всё собирал в armbian, а там начиная с ядра (кросскомпиляция) затем в chroot окружение
сборка библиотек и linuxcnc всё это идёт друг за другом.

У меня есть твой образ с ядром xenomai.
Дальше просто прямо на плате.
Просто.
git clone https://github.com/mark-v-d/linuxcnc.git emc-xenomai // тут из стандартного git://github.com/linuxcnc/linuxcnc.git - все четко устанавливается
cd emc-xenomai
git checkout xenomai-3 // Ну или любую другую ветку.
......
Если нужно сейчас можно пропатчить и внести изменения в исходный код.
.....
debian/configure uspace
dpkg-checkbuilddeps
debuild -uc -us
....
....Жду 30-40 минут....
....
Потом устанавливаю пакеты:
я устанавливаю с помощью gdebi
запускаю из меню или терминала - радуюсь или огорчаюсь :D
Вот как-то так.
DmitriiNT
Кандидат
 
Сообщения: 56
Зарегистрирован: 11 дек 2019, 20:17
Репутация: 6
Настоящее имя: Дмитрий

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

Сообщение UAVpilot » 15 мар 2020, 16:24

подробно не отвечу - не готов погружаться в эту тему...

DmitriiNT писал(а):Двойной вызов инициализации xenomai.

Забить, хотя бы до этапа наведения марафета в исходниках. Оно само пишет "ignored" - значит внутри есть контроль подобных ситуаций, а значит и коректная их обработка.

DmitriiNT писал(а):Поискал, откуда вызывается инициализация вижу два места:

искать надо в исходниках. В бинарниках можно найти как ссылку на функцию, так и саму функцию.

DmitriiNT писал(а):Причем библиотека libuspace-xenomai.so.0 явно вызывается из rtapi_app.

DmitriiNT писал(а):Возможно тут второй раз пытается загрузиться libuspace-xenomai.so.0 ????

Быблиотека не вызывается, она загружается в память системы при первом-же обращении к любой её функции. Причём загружается только один раз и этот единственный экземпляр используется всеми приложениями, ибо библиотека разделяемая (shared).

DmitriiNT писал(а):И ядро xenomai сконфигурировано без разрешения для не явных вызовов. Как можно поменять без пересборки xenomai?

Для начала стоит выяснить что это такое и с чем едят. Иначе можно будет как-нибудь обнаружить, что и кашу маслом можно испортить... :)

DmitriiNT писал(а):Какова тут роль Submakefile?

Часть Makefile, используемая только в это месте.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 20304
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 4856
Заслуга: c781c134843e0c1a3de9
Медальки:
Настоящее имя: Сергей

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

Сообщение going » 16 мар 2020, 21:56

DmitriiNT писал(а):У меня есть твой образ с ядром xenomai.
Дальше просто прямо на плате.

Работать на плате немного грустно.
Базовый комп с Linux на борту, где можно систему сборки разместить имеется?
Если да, тогда можно настроить сборку от ядра и библиотеки xenomai до LinuxCNC.
Будешь всегда на вершине разработки.
Платы: BPI-M3, BPI-A64, OPI-PC2
Аватара пользователя
going
Мастер
 
Сообщения: 500
Зарегистрирован: 29 сен 2013, 20:55
Откуда: г.Киров
Репутация: 127

Пред.След.

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

Кто сейчас на конференции

Зарегистрированные пользователи: andrein, Андрей Г., Bing [Bot], Bizon9999, drey82, drykov, Евжений, frezeryga, gigs, Google [Bot], Kupfershcmidt, Majestic-12 [Bot], mmv, nik0954, PavelTch, pegas13, Portos, SeReGa Sh, shura2000, SVP, tpolimer2000, vitzin, Yandex [bot], шпиндель

Reputation System ©'