LinuxCNC + Orange Pi (allwincnc)

Контроллеры, драйверы, датчики, управляющие устройства.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: ЧПУ контроллер на базе Orange Pi

Сообщение Serg »

MX_Master писал(а):С небольшим костыльком в коде, собрал, всё-таки, ядро с RT патчем и опцией FULL_RT (5).
А что за костылёк?
MX_Master писал(а):Результат cyclictest'a на удивление похож на все предыдущие:
А цифры будут меняться если паралельно ещё чего-нибудь запустить? Какой-нибудь пустой цикл, хотя-бы такой:

Код: Выделить всё

while :; do true; done
Я эту плату не смотрел ни разу. А в сети есть готовые RT-ядра для этой платы, а то может сам чип "слишком прост"?

А RT точно есть? "uname -a" что говорит?
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
MX_Master
Мастер
Сообщения: 7488
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3113
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

Re: ЧПУ контроллер на базе Orange Pi

Сообщение MX_Master »

UAVpilot писал(а):А RT точно есть? "uname -a" что говорит?

Код: Выделить всё

master@orangepione:~$ uname -a
Linux orangepione 3.4.113-rt143-sun8i #8 SMP PREEMPT RT Fri Sep 29 20:43:04 +06 2017 armv7l armv7l armv7l GNU/Linux
UAVpilot писал(а):А в сети есть готовые RT-ядра для этой платы, а то может сам чип "слишком прост"?
Не встречал
UAVpilot писал(а):А цифры будут меняться если паралельно ещё чего-нибудь запустить? Какой-нибудь пустой цикл
Будут. Запустил пустой цикл, htop, открыл браузер + ютуб + видео, открыл libreoffice writer, открыл сессию XRDP

Код: Выделить всё

master@orangepione:~/rt-tests$ sudo ./cyclictest -a -t -n -p99
# /dev/cpu_dma_latency set to 0us
policy: fifo: loadavg: 2.18 2.49 1.19 1/299 3693           

T: 0 ( 3034) P:99 I:1000 C: 364441 Min:      7 Act:   31 Avg:   23 Max:    5939
T: 1 ( 3035) P:99 I:1500 C: 242985 Min:      7 Act:   32 Avg:   23 Max:    2312
T: 2 ( 3036) P:99 I:2000 C: 182252 Min:      7 Act:   43 Avg:   20 Max:     181
T: 3 ( 3037) P:99 I:2500 C: 145802 Min:      9 Act:   30 Avg:   23 Max:     126
UAVpilot писал(а):А что за костылёк?
Ругался на эту строку - https://github.com/allwinner-zh/linux-3 ... /sid.c#L28

Код: Выделить всё

    static DEFINE_SPINLOCK(sid_lock);
Не придумал ничего лучше, чем заменить её на

Код: Выделить всё

    static spinlock_t sid_lock;
Аватара пользователя
MX_Master
Мастер
Сообщения: 7488
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3113
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

Re: ЧПУ контроллер на базе Orange Pi

Сообщение MX_Master »

Почитал немного интернетов на тему "как освободить ядро проца от периодических системных операций ядра Linux". Советуют собрать ядро, играя параметрами CONFIG_NO_HZ_FULL/CONFIG_NO_HZ/CONFIG_HZ/.. А потом в командной строке ядра прописать примерно так

Код: Выделить всё

nohz_full=3 isolcpus=3 rcu_nocbs=3 selinux=0 audit=0
Вдобавок можно выставить vm.stat_interval например 60 (сек) вместо 1 (сек).

Что это даст? Мой первый пример ногодрыга на OPi1 чётко показал, что каждые 10 мс работники ядра Linux отрывают изолированное ядро проца от ногодрыга на системное обслуживание. Системные операции могут занимать от 10 до 100 мкс, а это отрицательно сказывается на генерации шагов. Вышеуказанные настройки должны исправить ситуацию. Если на изолированном ядре проца будет запущен только 1 процесс (1 поток) генератора шагов, то Linux не будет прерывать его системными операциями. Единственное, что будет прерывать наш процесс раз в 60 сек - это vmstat.

Иными словами, генератор будет практически полностью свободен от внешних прерываний. Используя аппартный таймер чипа H3 мы можем чётко отслеживать временные интервалы и генерировать шаги вовремя. Причём, это всё можно делать без RT патча ядра Linux. В теории, стессна. Осталось проверить это на практике.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: ЧПУ контроллер на базе Orange Pi

Сообщение Serg »

MX_Master писал(а):Будут. Запустил пустой цикл, htop, открыл браузер + ютуб + видео, открыл libreoffice writer, открыл сессию XRDP
Т.е. RT не работает...
MX_Master писал(а):Не придумал ничего лучше, чем заменить её на
Это неравноценная замена.
MX_Master писал(а):Мой первый пример ногодрыга на OPi1 чётко показал, что каждые 10 мс работники ядра Linux отрывают изолированное ядро проца от ногодрыга на системное обслуживание.
Уверен, что отрывают именно ядро?..
Твой ногодрыг использует не только лишь ядро, но и как минимум шину памяти. А она одна на все ядра, как ты их не изолируй...
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
MX_Master
Мастер
Сообщения: 7488
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3113
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

Re: ЧПУ контроллер на базе Orange Pi

Сообщение MX_Master »

UAVpilot писал(а):Это неравноценная замена.
Непонятно, почему ругается на это место. Пишет, что ошибка синтаксиса. Попробую заменить на равноценное, развернув все связанные макросы.
UAVpilot писал(а):Уверен, что отрывают именно ядро?..
Твой ногодрыг использует не только лишь ядро, но и как минимум шину памяти. А она одна на все ядра, как ты их не изолируй...
Глянул настройки ядра. Указан интервал в 100 Гц - CONFIG_HZ=100, а это наши 10 мс, которые хорошо видны на осциллограмме. Ногодрыг пишет только в SRAM. Скорее всего, очередь туда не такая большая.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: ЧПУ контроллер на базе Orange Pi

Сообщение Serg »

MX_Master писал(а):Ногодрыг пишет только в SRAM. Скорее всего, очередь туда не такая большая.
Ещё и в порты IO... )
Это дешёвый чип - там скорее всего одна шина и для памяти и для перифирии.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
mycnc
Мастер
Сообщения: 913
Зарегистрирован: 03 июл 2011, 02:01
Репутация: 623
Контактная информация:

Re: ЧПУ контроллер на базе Orange Pi

Сообщение mycnc »

MX_Master писал(а):что каждые 10 мс работники ядра Linux отрывают изолированное ядро проца от ногодрыга на системное обслуживание. Системные операции могут занимать от 10 до 100 мкс, а это отрицательно сказывается на генерации шагов.
занимаюсь похожими экспериментами. У меня аппаратный fifo, поэтому 100мкс задержки я бы и не заметил, но проблема в том, что за сутки с десяток раз вылетает задержка в 10-20мс
Аватара пользователя
MX_Master
Мастер
Сообщения: 7488
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3113
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

Re: ЧПУ контроллер на базе Orange Pi

Сообщение MX_Master »

mycnc писал(а):занимаюсь похожими экспериментами. У меня аппаратный fifo, поэтому 100мкс задержки я бы и не заметил, но проблема в том, что за сутки с десяток раз вылетает задержка в 10-20мс
Если эти задержки в 10-20 мс происходят очень редко, то их можно вычислить по всевозможным логам системы.

Если грамотно изучить все настройки ядра, то при сборке можно много чего отключить, впрочем, как и после сборки. Но я застрял на этом банальном CONFIG_NO_HZ_FULL.. хотя я и сделал свой конфиг, и поместил куда надо, но ядро собирается всё равно безо всяких CONFIG_NO_HZ_FULL. Так что я эти 10 мс ещё не победил.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: ЧПУ контроллер на базе Orange Pi

Сообщение Serg »

MX_Master писал(а):CONFIG_NO_HZ_FULL
Это врядли решит проблему, NOHZ означает, что шедулер будет тикать не с постоянным периодом, а только когда потребуется.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
MX_Master
Мастер
Сообщения: 7488
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3113
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

Re: ЧПУ контроллер на базе Orange Pi

Сообщение MX_Master »

Собрал, наконец, ядро с CONFIG_NO_HZ_FULL. В командной строке ядра присутствуют:

Код: Выделить всё

nohz_full=3 isolcpus=3 rcu_nocbs=3 rcu_nocb_poll selinux=0 audit=0 nowatchdog skew_tick=1
От пауз каждые 10 мс избавился, но, как и гласят доки, остались паузы каждую секунду.

Т.е. каждую секунду планировщик у нас отнимает максимум 15 мкс на обслуживание. Если нужно сделать простую софт генерацию шагов, то барьер плавной генерации будет на уровне 65 КГц. Более быстрая софт генерация, стессна, возможна, но каждую секунду будет едва заметный затык в 15 мкс. При 200 КГц (предел драйверов) этот затык будет едва заметен. Так что софт генерация шагов на Orange Pi до 200 КГц вполне реальна! И это радует. :beer_blow:

Надо бы провести тесты на шаговиках..
Вложения
2017-10-04_202456.png (5116 просмотров) <a class='original' href='./download/file.php?id=121462&mode=view' target=_blank>Загрузить оригинал (114.75 КБ)</a>
muxa
Мастер
Сообщения: 231
Зарегистрирован: 15 мар 2012, 12:29
Репутация: 23
Контактная информация:

Re: ЧПУ контроллер на базе Orange Pi

Сообщение muxa »

MX_Master писал(а):Если нужно сделать простую софт генерацию шагов
а как жеж запуск linuxcnc на оранже ? может я чего пропустил - запуск уже готовой cnc системы на этом микрокомпе возможен ?
понятно что GPIO у оранжа маловато и надо будет лепить свою промежуточную железку.
тем не менее есть linuxcnc с его hm_spi и есть spi на платке оранжа.
*вот собственно первый вопрос - работоспособность этой связки?
Аватара пользователя
MX_Master
Мастер
Сообщения: 7488
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3113
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

Re: ЧПУ контроллер на базе Orange Pi

Сообщение MX_Master »

Ну дык, никто в этой теме еще не добился реалтайма в апельсине. Про LinuxCNC и связку додумайте сами (:

Я буду только периодически пытаться поднять RT ось. И только ради опыта. На данном этапе мне RT не так важен.

Желающие могут тоже подключиться к этой игре с RT в апельсине. Я всеми руками за. Попробуйте собрать ядро с RT патчем, и запускайте latency test.
Аватара пользователя
MX_Master
Мастер
Сообщения: 7488
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3113
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

Re: OrangeCNC - ЧПУ контроллер на базе Orange Pi

Сообщение MX_Master »

Вернулся к сборке ядра с RT патчем (с опцией FULL_RT). Всё та же ошибка при сборке, может, кто подскажет

cтрока https://github.com/armbian/linux/blob/s ... /sid.c#L28

Код: Выделить всё

static DEFINE_SPINLOCK(sid_lock);
согласно RT патчу разворачивается в
https://github.com/armbian/build/blob/m ... led#L10287

Код: Выделить всё

spinlock_t sid_lock __cacheline_aligned_in_smp = __SPIN_LOCK_UNLOCKED(sid_lock);
и при сборке компилятор ругается

Код: Выделить всё

security/apparmor/sid.c:28:28: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘__cacheline_aligned_in_smp’
 static DEFINE_SPINLOCK(sid_lock);
                            ^
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: OrangeCNC - ЧПУ контроллер на базе Orange Pi

Сообщение Serg »

Очевидно неправильно разворачиваетсяю Нужно внимательно смотреть определение DEFINE_SPINLOCK, особенно директивы условной компиляции.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
arkhnchul
Мастер
Сообщения: 1773
Зарегистрирован: 01 фев 2016, 13:56
Репутация: 339
Откуда: москва
Контактная информация:

Re: OrangeCNC - ЧПУ контроллер на базе Orange Pi

Сообщение arkhnchul »

а зачем вообще на станочном компе apparmor?
Аватара пользователя
MX_Master
Мастер
Сообщения: 7488
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3113
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

Re: OrangeCNC - ЧПУ контроллер на базе Orange Pi

Сообщение MX_Master »

arkhnchul писал(а):а зачем вообще на станочном компе apparmor?
До станочного ещё далеко. Тут хотя б как есть с FULL_RT собрать - уже достиженье :hehehe:
UAVpilot писал(а):Очевидно неправильно разворачиваетсяю Нужно внимательно смотреть определение DEFINE_SPINLOCK, особенно директивы условной компиляции.
пару-тройку вечеров придётся потратить :think:
Аватара пользователя
going
Мастер
Сообщения: 523
Зарегистрирован: 29 сен 2013, 20:55
Репутация: 129
Настоящее имя: Леонид
Откуда: г.Киров
Контактная информация:

Re: OrangeCNC - ЧПУ контроллер на базе Orange Pi

Сообщение going »

MX_Master писал(а):и при сборке компилятор ругается
Доброго здоровья!
В какой среде сборка проходит? На апельсинке или кросс компиляция? Версия gcc?
Платы: BPI-M3, BPI-A64, OPI-PC2
arkhnchul
Мастер
Сообщения: 1773
Зарегистрирован: 01 фев 2016, 13:56
Репутация: 339
Откуда: москва
Контактная информация:

Re: OrangeCNC - ЧПУ контроллер на базе Orange Pi

Сообщение arkhnchul »

MX_Master писал(а):Тут хотя б как есть с FULL_RT собрать - уже достиженье
в смысле, открутить совсем apparmor (CONFIG_SECURITY_APPARMOR=n), при сборке коего проявляется ругань после патча.
Аватара пользователя
MX_Master
Мастер
Сообщения: 7488
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3113
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

Re: OrangeCNC - ЧПУ контроллер на базе Orange Pi

Сообщение MX_Master »

going писал(а):Доброго здоровья!
В какой среде сборка проходит? На апельсинке или кросс компиляция? Версия gcc?
Если коротко, то под Win8.1 установлен VirtualBox + Ubuntu 16.04 x64. Далее из под Ubuntu тянем исходники

Код: Выделить всё

sudo apt-get -y install git
sudo git clone https://github.com/armbian/build
и собираем

Код: Выделить всё

cd build
sudo ./compile.sh
Аватара пользователя
going
Мастер
Сообщения: 523
Зарегистрирован: 29 сен 2013, 20:55
Репутация: 129
Настоящее имя: Леонид
Откуда: г.Киров
Контактная информация:

Re: OrangeCNC - ЧПУ контроллер на базе Orange Pi

Сообщение going »

Понял. Кросскомпиляция.
У меня 3.4.39 ядро для BPI-M3 (чип A83T) собиралось и работало только gcc который в составе BSP от SINOVOIP
От linaro toolchain либо не собирал, либо собирал но ядро не работало. Разных версий перепробовал.
Оказалось у gcc при его сборке куча параметров и они отличаются.

Попробуй собрать только ядро в предлагаемой фирмой производителем среде.
https://github.com/OrangePiLibra/OrangePi

PS: Параметры gcc можно задать при компиляции ядра. Модель процессора, оптимизацию кода, и тд.
Последний раз редактировалось going 09 окт 2017, 19:23, всего редактировалось 1 раз.
Платы: BPI-M3, BPI-A64, OPI-PC2
Ответить

Вернуться в «Электроника»