Автор Тема: Xenomai & realtime  (Прочитано 7488 раз)

Оффлайн Olej

Re: Xenomai & realtime
« Ответ #15 : Июнь 13, 2018, 01:51:52 pm »
P.S. Кстати, там же у голландцев есть образы виртуальных машин под VirtualBox и под VMware (ну, это уже для совсем упоротых приверженцев бодаться с Linux из-под Windows ;D).
- Нужно будет поднять их VM под VirtualBox - голландцев "проверить на вшивость".
- Каждый желающий пощупать пальцами что оно такое realtime - может относительно небольшими затратами сил и времени сделать это в VM.
Делаем...
[olej@xenix VirtualBox]$ ls -l xenomai-3.0.2_linux-4.1.18_debian-8.5.7z 
-rw-rw-r-- 1 olej olej 273496920 июн 13 10:04 xenomai-3.0.2_linux-4.1.18_debian-8.5.7z
Разархивирую:
[olej@xenix VirtualBox]$ time 7za x xenomai-3.0.2_linux-4.1.18_debian-8.5.7z

7-Zip (a) [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=ru_RU.utf8,Utf16=on,HugeFiles=on,64 bits,4 CPUs Intel(R) Xeon(R) CPU           L5420  @ 2.50GHz (10676),ASM)

Scanning the drive for archives:
1 file, 273496920 bytes (261 MiB)

Extracting archive: xenomai-3.0.2_linux-4.1.18_debian-8.5.7z
--
Path = xenomai-3.0.2_linux-4.1.18_debian-8.5.7z
Type = 7z
Physical Size = 273496920
Headers Size = 246
Method = LZMA2:24
Solid = +
Blocks = 1

Everything is Ok

Folders: 1
Files: 3
Size:       1184904745
Compressed: 273496920

real    0m34,955s
user    0m17,783s
sys     0m1,402s


[olej@xenix VirtualBox]$ ls -l xenomai3_debian
итого 1157128
-rw------- 1 olej olej       7717 июл  8  2016 xenomai3_debian.vbox
-rw------- 1 olej olej 1184890880 июл  7  2016 xenomai3_debian.vdi
Теперь перенесу этот полученный каталог xenomai3_debian в место, где у меня хранятся виртуальные машины VirtualBox ... но это только для единообразия, и делать не обязательно.

Оффлайн Olej

Re: Xenomai & realtime
« Ответ #16 : Июнь 13, 2018, 02:02:12 pm »
Теперь перенесу этот полученный каталог xenomai3_debian в место, где у меня хранятся виртуальные машины VirtualBox ... но это только для единообразия, и делать не обязательно.
В менеджере VirtualBox делаю не "Создать" (CTRL+N), а "Добавить" (CTRL+A), и указываю путь к файлу xenomai3_debian.vbox в новом каталоге xenomai3_debian ... файл образа диска там же xenomai3_debian.vdi - оно подхватит само.
Всё, VM создана...

Но!
VirtualBox говорит об ошибке образа - в настройках сетевого адаптера - они там намудрячили с выбором "Виртуальный адаптер хоста".
Может им там в Голландии так и удобнее, но мне оно не надо.
Меняем - на "Сетевой мост" (это будет достаточно важным в дальнейшем подключении!).





Оффлайн Olej

Re: Xenomai & realtime
« Ответ #17 : Июнь 13, 2018, 02:19:54 pm »
Всё, VM создана...
Запуск...
Через некоторое время:

ОК, мы получили текстовую консоль, CLI, с аавтоматическим логином от root:

Меня всё это не сильно устраивает ... но позволяет сколько угодно подключаться по SSH:
[olej@xenix .ssh]$ ssh root@192.168.1.107
Last login: Wed Jun 13 10:31:56 2018
root@xenomai3debian:~# uname -a
Linux xenomai3debian 4.1.18 #3 SMP Wed Jul 6 17:35:07 CDT 2016 x86_64 GNU/Linux
root@xenomai3debian:~#
...
Всё путём! - мы имеем Linux систему с дополнительным ядром Xenomai 3 (Cobalt).

Оффлайн Olej

Re: Xenomai & realtime
« Ответ #18 : Июнь 13, 2018, 02:52:14 pm »
Всё путём! - мы имеем Linux систему с дополнительным ядром Xenomai 3 (Cobalt).
root@xenomai3debian:/usr/xenomai/bin# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/xenomai/bin

root@xenomai3debian:/usr/xenomai/bin# xeno-config
xeno-config --verbose
        --core=cobalt
        --version="3.0.2"
        --cc="gcc"
        --ccld="/usr/xenomai/bin/wrap-link.sh gcc"
        --arch="x86"
        --prefix="/usr/xenomai"
        --library-dir="/usr/xenomai/lib"
Usage xeno-config OPTIONS
Options :
        --help
        --v,--verbose
        --version
        --cc
        --ccld
        --arch
        --prefix
        --[skin=]posix|vxworks|psos|alchemy|rtdm|smokey|cobalt
        --auto-init|no-auto-init
        --cflags
        --ldflags
        --lib*-dir,--libdir,--user-libdir
        --core
        --info
        --compat
Вот дополнительные имена (точки входа) ядра Linux, которых нет в "настоящем" Linux, и которые реализуют RTDM (realtime driver model):
root@xenomai3debian:~# cat /proc/kallsyms | grep " T rtdm_"
ffffffff81158e40 T rtdm_dev_unregister
ffffffff81158f80 T rtdm_dev_register
ffffffff81159620 T rtdm_cleanup
ffffffff811596d0 T rtdm_task_join
ffffffff81159730 T rtdm_task_busy_sleep
ffffffff81159770 T rtdm_toseq_init
ffffffff811597a0 T rtdm_nrtsig_pend
ffffffff811598a0 T rtdm_mmap_to_user
ffffffff81159900 T rtdm_iomap_to_user
ffffffff811599e0 T rtdm_mmap_iomem
ffffffff81159b50 T rtdm_mmap_kmem
ffffffff81159b70 T rtdm_mmap_vmem
ffffffff81159b90 T rtdm_munmap
ffffffff81159cc0 T rtdm_task_init
ffffffff81159d80 T rtdm_irq_request
ffffffff81159df0 T rtdm_schedule_nrt_work
ffffffff81159e70 T rtdm_ratelimit
ffffffff81159fe0 T rtdm_mutex_timedlock
ffffffff8115a1c0 T rtdm_mutex_lock
ffffffff8115a1e0 T rtdm_timer_stop
ffffffff8115a2d0 T rtdm_timer_destroy
ffffffff8115a3b0 T rtdm_mutex_init
ffffffff8115a4a0 T rtdm_timer_start
ffffffff8115a6e0 T rtdm_event_pulse
ffffffff8115a750 T rtdm_mutex_destroy
ffffffff8115a7b0 T rtdm_event_destroy
ffffffff8115a810 T rtdm_sem_destroy
ffffffff8115a870 T rtdm_event_select
ffffffff8115aa10 T rtdm_sem_select
ffffffff8115abd0 T rtdm_event_clear
ffffffff8115ad10 T rtdm_sem_up
ffffffff8115aec0 T rtdm_event_timedwait
ffffffff8115b0e0 T rtdm_event_wait
ffffffff8115b100 T rtdm_sem_init
ffffffff8115b270 T rtdm_sem_timeddown
ffffffff8115b490 T rtdm_sem_down
ffffffff8115b4b0 T rtdm_event_init
ffffffff8115b640 T rtdm_event_signal
ffffffff8115b7f0 T rtdm_mutex_unlock
ffffffff8115baf0 T rtdm_fd_get
ffffffff8115bf80 T rtdm_fd_put
ffffffff8115c020 T rtdm_fd_fcntl
ffffffff8115c0a0 T rtdm_fd_unlock
ffffffff8115c1e0 T rtdm_fd_lock
ffffffff8115c310 T rtdm_fd_close
ffffffff8115c5d0 T rtdm_fd_write
ffffffff8115c7a0 T rtdm_fd_sendmsg
ffffffff8115c960 T rtdm_fd_recvmsg
ffffffff8115cb20 T rtdm_fd_read
ffffffff8115ccf0 T rtdm_fd_ioctl
ffffffff8115cf00 T rtdm_fd_enter
ffffffff8115d360 T rtdm_fd_mmap
ffffffff8115d500 T rtdm_fd_valid_p
ffffffff8115d640 T rtdm_fd_select
ffffffff8115d700 T rtdm_fd_cleanup
ffffffff8115d730 T rtdm_fd_init
ffffffff819ce36d T rtdm_init
« Последнее редактирование: Июнь 13, 2018, 03:44:38 pm от Olej »

Оффлайн Olej

Re: Xenomai & realtime
« Ответ #19 : Июнь 13, 2018, 03:59:42 pm »
root@xenomai3debian:/usr/xenomai/bin# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/xenomai/bin
Всё, в этой среде (в VirtualBox) можно писать и отрабатывать свои realtime приложения.
В Xenomai есть несколько уровней совместимости (опция xeno-config --[skin=]posix|vxworks|psos|alchemy|rtdm|smokey|cobalt ).
Если самый привычный POSIX код приложения собирать с опциями сборки Xenomai - то будет собираться realtime задача. Эти опции определяются так (для Makefile):
root@xenomai3debian:/usr/xenomai/bin# xeno-config --posix --cflags
-I/usr/xenomai/include/cobalt -I/usr/xenomai/include -D_GNU_SOURCE -D_REENTRANT -D__COBALT__ -D__COBALT_WRAP__

root@xenomai3debian:/usr/xenomai/bin# xeno-config --posix --ldflags
-Wl,@/usr/xenomai/lib/cobalt.wrappers   /usr/xenomai/lib/xenomai/bootstrap.o -Wl,--wrap=main -Wl,--dynamic-list=/usr/xenomai/lib/dynlist.ld -L/usr/xenomai/lib -lcobalt -lpthread -lrt   

Оффлайн ua3nbw

Re: Xenomai & realtime
« Ответ #20 : Июнь 13, 2018, 04:16:12 pm »
 Запустите cyclictest.

Оффлайн Olej

Re: Xenomai & realtime
« Ответ #21 : Июнь 13, 2018, 04:19:16 pm »
Всё, в этой среде (в VirtualBox) можно писать и отрабатывать свои realtime приложения.
Здесь же рядом собрана и Ethernet сеть реального времени RTnet:
root@xenomai3debian:/usr/xenomai/sbin# pwd
/usr/xenomai/sbin

root@xenomai3debian:/usr/xenomai/sbin# ls -l
total 352
-rwxr-xr-x 1 root root 112552 Jul  6  2016 analogy_calibrate*
-rwxr-xr-x 1 root root  26320 Jul  6  2016 analogy_config*
-rwxr-xr-x 1 root root  17560 Jul  6  2016 autotune*
-rwxr-xr-x 1 root root  11808 Jul  6  2016 corectl*
-rwxr-xr-x 1 root root  12224 Jul  6  2016 hdb*
-rwxr-xr-x 1 root root   8360 Jul  6  2016 nomaccfg*
-rwxr-xr-x 1 root root  13448 Jul  6  2016 rtcanconfig*
-rwxr-xr-x 1 root root  16128 Jul  6  2016 rtcfg*
-rwxr-xr-x 1 root root  14672 Jul  6  2016 rtifconfig*
-rwxr-xr-x 1 root root  12424 Jul  6  2016 rtiwconfig*
-rwxr-xr-x 1 root root   7623 Jul  6  2016 rtnet*
-rwxr-xr-x 1 root root  11064 Jul  6  2016 rtping*
-rwxr-xr-x 1 root root   8712 Jul  6  2016 rtps*
-rwxr-xr-x 1 root root  14600 Jul  6  2016 rtroute*
-rwxr-xr-x 1 root root  17520 Jul  6  2016 slackspot*
-rwxr-xr-x 1 root root  12624 Jul  6  2016 tdmacfg*
-rwxr-xr-x 1 root root   7296 Jul  6  2016 version*

Оффлайн Olej

Re: Xenomai & realtime
« Ответ #22 : Июнь 13, 2018, 04:21:46 pm »
Запустите cyclictest.
Всё запускали ... и не только это, а десяток разных тестов + десятки раз.
До тестов сейчас дойдём... ;)

P.S. Хотя это очень интересное место: а что же будем тестировать?
Потому что большинство народа вообще не понимает что такое realtime ... могут сказать: "это когда реакция на прерывание происходит быстро" ;D

Оффлайн Olej

Re: Xenomai & realtime
« Ответ #23 : Июнь 13, 2018, 04:27:14 pm »
До тестов сейчас дойдём... ;)
Комплект тестов от kernel.org: index : rt-tests/rt-tests.git.
(скачав вы можете собрать из исходников десяток самых свежих версий тестов ... в числе которых и cyclictest)
 

Оффлайн ua3nbw

Re: Xenomai & realtime
« Ответ #24 : Июнь 13, 2018, 04:40:22 pm »
Запустите cyclictest.
Всё запускали ... и не только это, а десяток разных тестов + десятки раз.
До тестов сейчас дойдём... ;)

P.S. Хотя это очень интересное место: а что же будем тестировать?
Потому что большинство народа вообще не понимает что такое realtime ... могут сказать: "это когда реакция на прерывание происходит быстро" ;D

Для меня realtime определяется  латентностью, а это время которое требуется компьютеру для того, чтобы остановить то что он делает и ответить на внешний запрос (событие).




Оффлайн Olej

Re: Xenomai & realtime
« Ответ #25 : Июнь 13, 2018, 05:14:57 pm »
Запустите cyclictest.
Всё запускали ... и не только это, а десяток разных тестов + десятки раз.
До тестов сейчас дойдём... ;)

P.S. Хотя это очень интересное место: а что же будем тестировать?
Потому что большинство народа вообще не понимает что такое realtime ... могут сказать: "это когда реакция на прерывание происходит быстро" ;D

Для меня realtime определяется  латентностью, а это время которое требуется компьютеру для того, чтобы остановить то что он делает и ответить на внешний запрос (событие).
А вот и нет ;)
Не латентностью, а детерминированностью латентности. В GPOS (общего применения) латентность на некоторое событие может быть и очень небольшой, скажем 100мкс. ... но временами - 300мкс. ... а иногда, изредка, - даже и 3000 мкс.
RTOS, при прочих равных, всегда медленне GPOS ... общеизвестно, что QNS, pSOS или VxWorks - "медленные" OS на том же оборудовании (т.е. с точки зрения задержки, латентности - они "хуже" обычных GPOS). Но у них разброс, дисперсия латентности - ниже, у них латентность может быть (см. пример выше) 200мкс. в тех же условиях, но у них реакция всегда гарантировано наступит не позже 300мкс., она не может быть позже.

Оффлайн Olej

Re: Xenomai & realtime
« Ответ #26 : Июнь 13, 2018, 07:43:43 pm »
Накатал этот образ на SD-карту и пробовал его поднять на Rapsberry Pi 2.
Не могу загрузить.
Причём на точно том же оборудовании какой-то там Raspbian (не я писал SD) грузится "на ура".
Или темнят голландцы что-то ... или нужно ещё как-то пробовать ... может с SD-карточкой что-то не так?
Ещё раз перезаписал на новую SD-карту 8Gb (не пожалел по такому случаю, на совершенно новую потратился, для страховки ;)... в последний раз для пробы).
После разархивирования:
[olej@dell Raspberry_Pi]$ ls -l raspbian_jessie8_*
-rw-r--r-- 1 olej olej 1852833792 июл 28  2017 raspbian_jessie8_xenomai3.0.5.img
-rw-rw-r-- 1 olej olej  367071559 май 27 15:28 raspbian_jessie8_xenomai3.0.5.img.7z
Вот этот .img накатал на SD-карту ... и он загружается. :o
И получает IP по DHCP, и подключение по SSH...
olej@nvidia ~ $ ssh root@192.168.1.108
The authenticity of host '192.168.1.108 (192.168.1.108)' can't be established.
ECDSA key fingerprint is SHA256:ybkJ5eB+oqonPKk23OyqvtH+1zfv9A+TNtNpiCw4BJQ.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.108' (ECDSA) to the list of known hosts.
root@192.168.1.108's password:

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Wed Jun 13 16:25:35 2018

model: Raspberry Pi 2 Model B Rev 1.1
compatible: brcm,bcm2709
My IP address is 192.168.1.108

Xenomai/cobalt v3.0.5
root@raspberrypi:~ # uname -a
Linux raspberrypi 4.1.21-v7+ #4 SMP Sat Jul 15 06:39:14 CEST 2017 armv7l GNU/Linux
Теперь это у нас в руках нативный hard realtime Linux/Xenomai на ARM платформе.
« Последнее редактирование: Июнь 13, 2018, 07:51:57 pm от Olej »

Оффлайн ua3nbw

Re: Xenomai & realtime
« Ответ #27 : Июнь 15, 2018, 08:05:02 pm »
обратите внимание на систему сборки https://github.com/buildroot/buildroot
наши платы там присутствуют, и есть опция  в Target packages  ---> Real-Time  --->
  x x                                           [*] Xenomai Userspace                                                                                            x x
  x x                                           ()    Custom Xenomai version (NEW)                                                                               x x
  x x                                                 Xenomai core (Mercury)  --->                                                                               x x
  x x                                           [*]   Enable SMP support (NEW)                                                                                   x x
  x x                                           [ ]   Enable registry (NEW)                                                                                      x x
  x x                                           ()    Additional configure options (NEW)                                                                         x x
  x x                                           [ ]   Install testsuite (NEW)                                                                                    x x
  x x                                           [ ]   RTCan utilities (NEW)                                                                                      x x
  x x                                           [ ]   Analogy libs and utils (NEW)                                                                               x x
  x x                                                 Skin selection  --->   

Работает или нет ? не знаю, но можно копать в этом направлении.

кстати ядро 4.17 даже стартовало.
Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 4.17.0 (root@ubuntu) (gcc version 7.3.0 (Buildroot 2018.08-git-00296-gfaf5041461)) #1 SMP Fri Jun 15 20:14:43 MSK 2018
[    0.000000] CPU: ARMv7 Processor [410fc075] revision 5 (ARMv7), cr=10c5387d
[    0.000000] CPU: div instructions available: patching division code
[    0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[    0.000000] OF: fdt: Machine model: Xunlong Orange Pi PC
[    0.000000] Memory policy: Data cache writealloc
[    0.000000] cma: Reserved 16 MiB at 0x7cc00000
[    0.000000] psci: probing for conduit method from DT.
[    0.000000] psci: Using PSCI v0.1 Function IDs from DT
[    0.000000] random: get_random_bytes called from start_kernel+0xa0/0x3f4 with crng_init=0
[    0.000000] percpu: Embedded 16 pages/cpu @(ptrval) s33868 r8192 d23476 u65536
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 252416
[    0.000000] Kernel command line: console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait
[    0.000000] Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)
[    0.000000] Inode-cache hash table entries: 65536 (order: 6, 262144 bytes)
[    0.000000] Memory: 980456K/1015808K available (6144K kernel code, 423K rwdata, 1508K rodata, 1024K init, 241K bss, 18968K reserved, 16384K cma-reserved, 212980K highmem)

« Последнее редактирование: Июнь 15, 2018, 09:06:56 pm от ua3nbw »

Оффлайн Olej

Re: Xenomai & realtime
« Ответ #28 : Июнь 15, 2018, 09:57:38 pm »
обратите внимание на систему сборки https://github.com/buildroot/buildroot
Я про BuildRoot здесь уже писал в форуме, я когда-то пару-тройку лет назад использовал его в проекте, и он оставил очень и очень приятное впечатление!
... но наш любитель  ручных сборок здесь заболтал, и как-то из поля зрения оно выпало...
Спасибо, что напомнили - обязательно посмотрю и отпишусь сюда.

Оффлайн Olej

Re: Xenomai & realtime
« Ответ #29 : Июнь 28, 2018, 12:42:06 pm »
обратите внимание на систему сборки https://github.com/buildroot/buildroot
наши платы там присутствуют
Дошли руки - обратил внимание ;D
Вы для начала использовали их дефаултные конфиги параметров ядра? Вот эти:
[olej@xenix buildroot-master]$ make list-defconfigs | grep orangepi
  orangepi_lite_defconfig             - Build for orangepi_lite
  orangepi_one_defconfig              - Build for orangepi_one
  orangepi_pc2_defconfig              - Build for orangepi_pc2
  orangepi_pc_defconfig               - Build for orangepi_pc
  orangepi_pc_plus_defconfig          - Build for orangepi_pc_plus
  orangepi_plus_defconfig             - Build for orangepi_plus
  orangepi_prime_defconfig            - Build for orangepi_prime
  orangepi_win_defconfig              - Build for orangepi_win
  orangepi_zero_defconfig             - Build for orangepi_zero
  orangepi_zero_plus2_defconfig       - Build for orangepi_zero_plus2