Михаил, поделись "прикидками", в смысле как измерял и в каких условиях. Это важно.MX_Master писал(а):По моим прикидкам, gpio.read и write в апельсине могут вместе занимать до 20 мкс и более.
Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
- going
- Мастер
- Сообщения: 523
- Зарегистрирован: 29 сен 2013, 20:55
- Репутация: 129
- Настоящее имя: Леонид
- Откуда: г.Киров
- Контактная информация:
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
Платы: BPI-M3, BPI-A64, OPI-PC2
- MX_Master
- Мастер
- Сообщения: 7478
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3101
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
LinuxCNC замеряет всё сам, по бырому подсмотреть можно с консоли:
halcmd show all
halcmd show all stepgen
halcmd show all трампарам
...
Для каждой функции там есть время выполнения в наносекундах.
halcmd show all
halcmd show all stepgen
halcmd show all трампарам
...
Для каждой функции там есть время выполнения в наносекундах.
- going
- Мастер
- Сообщения: 523
- Зарегистрирован: 29 сен 2013, 20:55
- Репутация: 129
- Настоящее имя: Леонид
- Откуда: г.Киров
- Контактная информация:
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
последнее cpu3 лучше оставить в покое. На нём крутится со-ядро, которое рулит всеми прерываниями и запуском РТ задач.DmitriiNT писал(а):Выделил два ядра (2,3) xenomai-ну, а грузится только одно - последнее 3-е ядро. Как-то странно он нагрузку распределяет.
В текущей версии LinuxCNC использует xenomai только, как вариант RTPREEMPT, т.е. работает в пространстве пользователя.DmitriiNT писал(а):Кто знает, за связь с Cobalt-ом в LinuxCNC какие файлы отвечают?
Тот факт, что тебе удалось это преодолеть, уже большой прогресс.
Что LinuxCNC хочет, смотри "linuxcnc/src/rtapi/rtapi*.h
Что предоставляет ядро xenomai соответственно в "xenomai/include/cobalt/*.h"
Возможность запустить задачу в РТ режиме предоставляет "xenomai/include/alchemy/*.h"DmitriiNT писал(а):Может можно их переписать, и заставить работать base_thread в пространстве ядра?
Как бы работы не початый край.
Платы: BPI-M3, BPI-A64, OPI-PC2
- going
- Мастер
- Сообщения: 523
- Зарегистрирован: 29 сен 2013, 20:55
- Репутация: 129
- Настоящее имя: Леонид
- Откуда: г.Киров
- Контактная информация:
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
И результат зависит от того на каком ядре и в каком пространстве эта задача выполняется.MX_Master писал(а):LinuxCNC замеряет всё сам,
Платы: BPI-M3, BPI-A64, OPI-PC2
- MX_Master
- Мастер
- Сообщения: 7478
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3101
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
Пошёл-ка я нахрен из этой темы, тут и без меня слишком много умных парней...
- going
- Мастер
- Сообщения: 523
- Зарегистрирован: 29 сен 2013, 20:55
- Репутация: 129
- Настоящее имя: Леонид
- Откуда: г.Киров
- Контактная информация:
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
MX_Master писал(а):Пошёл-ка я нахрен из этой темы
Диалог полезен всем! Ты не находишь, что собеседник может заблуждаться и имеет право иметь своё мнение?
Приведи аргументы!
"нахрен" это не вежливо.
Платы: BPI-M3, BPI-A64, OPI-PC2
-
- Кандидат
- Сообщения: 56
- Зарегистрирован: 11 дек 2019, 20:17
- Репутация: 6
- Настоящее имя: Дмитрий
- Контактная информация:
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
Вот буду писать драйвер hal_gpio_rtdm тогда эти вопросы буду решать. Можно и на ассемблере, я начинал с него, если приспичит, то можно. Хотя "Си" не далеко ушел от ассемблера - после компиляции и есть машинные коды. Это в современных языках нужен интерпретатор, который отбирает у системы львиную долю времени.
Пока копаю путь к ядру.
При запуске Linuxcnc открывает 3 потока, latency-test - 4 потока с Cobalt.
Подскажите, как сие цифры интерпретировать?
Последний раз редактировалось DmitriiNT 14 мар 2020, 19:15, всего редактировалось 1 раз.
-
- Кандидат
- Сообщения: 56
- Зарегистрирован: 11 дек 2019, 20:17
- Репутация: 6
- Настоящее имя: Дмитрий
- Контактная информация:
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
Есть у меня некоторые соображения по этой теме.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 и работает в пространстве ядра.
Надо проверить.
- going
- Мастер
- Сообщения: 523
- Зарегистрирован: 29 сен 2013, 20:55
- Репутация: 129
- Настоящее имя: Леонид
- Откуда: г.Киров
- Контактная информация:
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
Посмотрю завтра.DmitriiNT писал(а):Есть у меня некоторые соображения по этой теме.
Набрел я тут недавно на вот такое чудо:
P.S. если честно то я отошёл от xenomai и пытаюсь собирать EVL ядро.
Для меня это немного вернуться вниз.
Платы: BPI-M3, BPI-A64, OPI-PC2
- going
- Мастер
- Сообщения: 523
- Зарегистрирован: 29 сен 2013, 20:55
- Репутация: 129
- Настоящее имя: Леонид
- Откуда: г.Киров
- Контактная информация:
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
А собственно трудится rtapi_app как рт задача. Вроде всё хорошо.DmitriiNT писал(а):Подскажите, как сие цифры интерпретировать?
Платы: BPI-M3, BPI-A64, OPI-PC2
-
- Кандидат
- Сообщения: 56
- Зарегистрирован: 11 дек 2019, 20:17
- Репутация: 6
- Настоящее имя: Дмитрий
- Контактная информация:
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
Значить нормально все, можно драйвер hal_gpio_rtdm начинать писать. Мне еще интерфейс понадобится собственный. Какую-нибудь среду разработки порекомендуете? По форумам - рекомендуют Qt creator или Kdevelop. Ух, давненько не брал я в руки шашек...going писал(а):Посмотрю завтра.DmitriiNT писал(а):Есть у меня некоторые соображения по этой теме.
Набрел я тут недавно на вот такое чудо:
P.S. если честно то я отошёл от xenomai и пытаюсь собирать EVL ядро.
Для меня это немного вернуться вниз.
А EVL ядро какое-то преимущество дает?
-
- Кандидат
- Сообщения: 56
- Зарегистрирован: 11 дек 2019, 20:17
- Репутация: 6
- Настоящее имя: Дмитрий
- Контактная информация:
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
Я скопировал его исходный код, касающийся работы xenomai, в свой проект..., - так удалось скомпилировать linuxcnc.going писал(а):Посмотрю завтра.DmitriiNT писал(а):Есть у меня некоторые соображения по этой теме.
Набрел я тут недавно на вот такое чудо:
P.S. если честно то я отошёл от xenomai и пытаюсь собирать EVL ядро.
Для меня это немного вернуться вниз.
Запускаю..., в принципе, внешне, ни каких изменений и джиттер и базовый период те же от 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?
Поискал, откуда вызывается инициализация вижу два места:
Код: Выделить всё
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:~$
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);
}
-
- Кандидат
- Сообщения: 56
- Зарегистрирован: 11 дек 2019, 20:17
- Репутация: 6
- Настоящее имя: Дмитрий
- Контактная информация:
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
Еще есть упоминание о libuspace-rtai.so.0 в файле Submakefile:
Какова тут роль 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
-
- Кандидат
- Сообщения: 56
- Зарегистрирован: 11 дек 2019, 20:17
- Репутация: 6
- Настоящее имя: Дмитрий
- Контактная информация:
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
И еще, в rtapi_app есть место, где при старте, подгружаются разные модули для rtapi_app:
Возможно тут второй раз пытается загрузиться libuspace-xenomai.so.0 ????
Код: Выделить всё
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;
}
}
- going
- Мастер
- Сообщения: 523
- Зарегистрирован: 29 сен 2013, 20:55
- Репутация: 129
- Настоящее имя: Леонид
- Откуда: г.Киров
- Контактная информация:
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
Здесь просто сила привычки. Что привычнее и кажется удобнее, то и надо использовать.DmitriiNT писал(а):По форумам - рекомендуют Qt creator или Kdevelop
1-Очень подробная документация.DmitriiNT писал(а):А EVL ядро какое-то преимущество дает?
2- Проект всегда на вершине разработки ядра Linux. (xenomai тормознула на ядре 4.19)
3- Драйвер gpio умеет работать в РТ режиме.
Дмитрий, как у тебя происходит процесс сборки?DmitriiNT писал(а):Я скопировал его исходный код, касающийся работы xenomai, в свой проект..., - так удалось скомпилировать linuxcnc.
Я всё собирал в armbian, а там начиная с ядра (кросскомпиляция) затем в chroot окружение
сборка библиотек и linuxcnc всё это идёт друг за другом.
Платы: BPI-M3, BPI-A64, OPI-PC2
- going
- Мастер
- Сообщения: 523
- Зарегистрирован: 29 сен 2013, 20:55
- Репутация: 129
- Настоящее имя: Леонид
- Откуда: г.Киров
- Контактная информация:
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
Это вроде имеет отношение к ядру rtai.DmitriiNT писал(а):Еще есть упоминание о libuspace-rtai.so.0
Для него действительно собираются модули ядра Linux и они должны подгружаться при старте LinuxCNC.
Платы: BPI-M3, BPI-A64, OPI-PC2
-
- Кандидат
- Сообщения: 56
- Зарегистрирован: 11 дек 2019, 20:17
- Репутация: 6
- Настоящее имя: Дмитрий
- Контактная информация:
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
конечно же libuspace-xenomai.so.0DmitriiNT писал(а):libuspace-xenomai.so.0
-
- Кандидат
- Сообщения: 56
- Зарегистрирован: 11 дек 2019, 20:17
- Репутация: 6
- Настоящее имя: Дмитрий
- Контактная информация:
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
У меня есть твой образ с ядром xenomai.going писал(а):Дмитрий, как у тебя происходит процесс сборки?
Я всё собирал в armbian, а там начиная с ядра (кросскомпиляция) затем в chroot окружение
сборка библиотек и linuxcnc всё это идёт друг за другом.
Дальше просто прямо на плате.
Просто.
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
запускаю из меню или терминала - радуюсь или огорчаюсь
Вот как-то так.
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
подробно не отвечу - не готов погружаться в эту тему...
Забить, хотя бы до этапа наведения марафета в исходниках. Оно само пишет "ignored" - значит внутри есть контроль подобных ситуаций, а значит и коректная их обработка.DmitriiNT писал(а):Двойной вызов инициализации xenomai.
искать надо в исходниках. В бинарниках можно найти как ссылку на функцию, так и саму функцию.DmitriiNT писал(а):Поискал, откуда вызывается инициализация вижу два места:
DmitriiNT писал(а):Причем библиотека libuspace-xenomai.so.0 явно вызывается из rtapi_app.
Быблиотека не вызывается, она загружается в память системы при первом-же обращении к любой её функции. Причём загружается только один раз и этот единственный экземпляр используется всеми приложениями, ибо библиотека разделяемая (shared).DmitriiNT писал(а):Возможно тут второй раз пытается загрузиться libuspace-xenomai.so.0 ????
Для начала стоит выяснить что это такое и с чем едят. Иначе можно будет как-нибудь обнаружить, что и кашу маслом можно испортить...DmitriiNT писал(а):И ядро xenomai сконфигурировано без разрешения для не явных вызовов. Как можно поменять без пересборки xenomai?
Часть Makefile, используемая только в это месте.DmitriiNT писал(а):Какова тут роль Submakefile?
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- going
- Мастер
- Сообщения: 523
- Зарегистрирован: 29 сен 2013, 20:55
- Репутация: 129
- Настоящее имя: Леонид
- Откуда: г.Киров
- Контактная информация:
Re: Xenomai + LinuxCNC, EVL + LinuxCNC из исходников
Работать на плате немного грустно.DmitriiNT писал(а):У меня есть твой образ с ядром xenomai.
Дальше просто прямо на плате.
Базовый комп с Linux на борту, где можно систему сборки разместить имеется?
Если да, тогда можно настроить сборку от ядра и библиотеки xenomai до LinuxCNC.
Будешь всегда на вершине разработки.
Платы: BPI-M3, BPI-A64, OPI-PC2