Добрый день всем.
С моей точки зрения существую 2 сложность при портирования EMC2 на другие ( не х86) платформы.
1) Первая это привязанность RTAI к платформе х86. Это доволно старое расширение и оно уже практически не подерживается. Варианты решения - использование Xenomai или PREEMPT_RT.
2) Производительность не-х86 МСU. EMC2 очень требовательна к ресурсам ЦПУ. Здесь и вычисления с плавающей точкой, и обработка GUI, и конечно-же задачи реального времени с высоким преемистостью, а именно программные генераторы шагов для приводов. К примеру, на 400Мгц ARM920T удалось запустить нормально только EMC2 довольно ранней версии без видеоподсистемы и со специально разработанным ( и единственно поддерживаемым) драйвером железа. И, к слову, не-x86 архитекутра практически означает, что про все стандратные
аппаратные HAL драйверы можно забыть.
К счастью, разработчики LinuxCNC прекрасно понимают сложившуюся ситуацию, а имеено необходимость расширять кросплатформенность системы и начали движение в этом направлении. Не уверен, включено ли следующее в официальные релиз, но в бранчах git (
http://git.mah.priv.at/gitweb?p=emc2-de ... n-preview3 ) уже есть поддержка упомянутых Xenomai и PREEMPT_RT, что позволило уже некоторым энтузиастам запустить его на Raspberry PI ( без GUI или с WEB-фронтендом от miniEMC2). Однако видится, что эта платформа не самая лучшая, вернее ее производительсность хоть и лучше, но все равно имеет те-же ограничения, что и mini2440 ( да собственно и х86) - сложности с обеспечением режима жесткого реального времени. Вообще для решение этой задачи гораздо более разумно было-бы использовать внешнюю плату расширения, которая могла-бы подключаться непосредственно к системной шине устрйства ( варианты на FPGA ) либо, в худшем случае, через последовательную шину USB, Ethernet, UART, CAN.... Варинты последних решений сущетсвуют в разных инкарнация, но обычно с дополнительными буферами координат дабы хоть как-то гарантировать ( надеяться что все будет хорошо ) непрерывность процесса движения из-за неизбежных повреждений данных в линиях передачи. А этот самый буфер создает дополнительну задержку между вычисленной и фактически отрабатываемой позицией, что негативно сказывается на работы как некоторых HAL модулей ( програмных PID регуляторов) так и системы в целом ( отработка нажатия концевиков и другие специфические задачи ( синхронное дивжение оси и шпинделя) ). И хотя эти огранчения могут быть преемлемыми в некоторых случаях, разработчики linuxcnc не спешать использовать в релизах подобные драйверы.
Возращаясь к идее платы расширения на системной шине. Благодаря ребятам из TI мы теперь имеем семейство интересных процессоров, а именно
AM335x. Как видно это Cortex™-A8 процессор с макс. частотой 720MHz, что не очень много по нынешним временам ( хотя разработчики вроде-бы обещают варианты 1000Мгц к середине 2013), но зато набор переферии просто отлиный. И 6 UART, 2 CAN, 2 USB, 2 Ethernet MAC, ШИМы и модули захвата ( можно подумать об энкодерах). Но самое "вкусное" конечно-же дргуое. Сей девайс имеет на борту 2 модуля PRU. Это по сути 2 32-х разрядный RICS процессор работающие на частоте до 200 Мгц и имееющие архитектуру оптимизированную для быстрых операций ввода/вывода. По данным производителя максимальная частота переключения ножек GPIO до 100 Мгц, на практике получено около 20 Мгц. Память PRU может быть напрямую доступна основному процессоры и наоборот - PRU имеют прямой доступ к памяти и периферии чипа, правда несколько медленнее чем доступ к внутренним ресурсам. Т.е. это по сути тот самый вариант платы на системной шине, но уже интегрированный в котроллер. Кроме прочего, PRUs имеют отдельную переферию: Ethernet MAC, таймер и высокоскоростной UART ( до 12Mbit). Получается, что можно реализовать уйму всевозможных интерфейсов в реальном времени. Самы простой вариант это генератор шагов для приводов (stepgen) с довольно высокой скоростью, более сложные варанты это CAN, какой-ли собственный протокол на основе UART и конечно-же Ethernet-based протоколы. TI предлагает готовые решения( библиотеки для PRU и ARM) для Profibus, EtherCAT и прочих. Кстати, EtherCAT очень интересный вариант, так как разработчики заявляют о возможности управляние сервоприводами с частотой сервоцикла до 10 кГц. В общем поле для деятельности обширное, тем более что сущетсвую довльно недорогие отладочные платы (
BeagleBone ).
Ну и что очень важно, сущетсвует git branch linuxcnc для
am335x контроллеров. Там уже добавлена базовая поддержка PRU ( примеры HAL, Assembler для PRU). Не хватает самого интересного - кода PRU реализующих эти самые задачи жесткого реального времени. Но всему свое время, думаю люди сейчас заняты коммерческими решениями в этом направлении, но уверен что появятся и открытые реализации, как минимум stepgen.