от 17.01.2018 Спойлер: Построение кластера... или кучи(как угодно) Спойлер: Центральный узел с DHCP Код (Text): # interfaces(5) file used by ifup(8) and ifdown(8) # Please note that this file is written to be used with dhcpcd # For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf' # Include files from /etc/network/interfaces.d: source-directory /etc/network/interfaces.d auto lo iface lo inet loopback ###################### auto eth0 iface eth0 inet dhcp ###################### ###################### auto eth0:0 iface eth0:0 inet static address 192.168.1.131 netmask 255.255.255.0 ###################### allow-hotplug wlan0 iface wlan0 inet static address 192.168.7.1 netmask 255.255.255.0 network 192.168.7.0 broadcast 192.168.7.255 #post-up service udhcpd restart #up iptables-restore < /etc/iptables.ipv4.nat allow-hotplug wlan1 iface wlan1 inet dhcp #wpa-ssid "dark_gray" #wpa-psk "13022005" wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf Это мой /etc/network/interfaces как пример - понятное дело "dark_gray" это имя сети роутера, а "13022005" пароль для подключения к ней. Узел делает автоподключение... и создаёт свою подсеть по WIFI с IP 192.168.7.XX. параметры которой по правилу: http://academicfox.com/raspberry-pi-besprovodnaya-tochka-dostupa-wifi-access-point/ Кстати: Код (Text): Проблема с wlan0 у Raspberry 3 У Raspberry 3 есть свой собственный wifi адаптер. Хорошая новость в том, что он не висит на usb-шине и если раздавать интернет через него, то можно достичь максимальной скорости Wifi. Однако плохая новость в том, что Raspberry Pi 3 не всегда монтирует встроенный адаптер, как wlan0. Если на USB-шине уже висит какой-то wi-fi адаптер, то он может стать wlan0, а встроенный адаптер становится wlan1. Это не удобно, потому стоит "жёстко" закрепить wlan0 за встроенным адаптером. Для этого нужно добавить правило в файл /etc/udev/rules.d/70-persistent-net.rules. Правило должно выглядеть примерно так: SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="b8:27:eb:53:4d:fd", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="wlan*", NAME="wlan0" Где b8:27:eb:53:4d:fd — это mac-адрес встроенного адаптера (его можно узнать с помощю команды ifconfig). Взято тут: http://musuk.guru/blog/raspberry-pi/raspberry-pi-2-wifi-router таким образом мой файл /etc/udev/rules.d/70-persistent-net.rules, которого не было и надо было создать редактором Код (Text): SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="14:cc:20:16:12:9b", ATTR{type}=="1", KERNEL=="wlan*", NAME="wlan1" SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="b8:27:eb:27:74:e2", ATTR{type}=="1", KERNEL=="wlan*", NAME="wlan0" ...а применялся встроенный wlan0 и usb-wifi, который wlan1(не умеет быть хостом... а только для работы с внешней сетью). Теперь они не путаются. Спойлер: Остальные узлы практически идентичны Код (Text): allow-hotplug wlan0 auto wlan0 iface wlan0 inet dhcp #iface wlan0 inet static wpa-ssid "bot_gray" wpa-psk "24011968" После этого все узлы будут подключены к одному, который организует сеть WIFI и раздаёт IP. Это только параметры из /etc/network/interfaces узлов. Но eth0 есть в каждом... иначе как настроить без дисплея и клавиатуры Спойлер: RAM диск... как без него? собственно источник: https://www.raspberrypi.org/forums/viewtopic.php?t=29175 Но забыли про доступ для всех. Путь должен быть таким: /etc/init.d/ramdisk для этого файла: ramdisk.zip Спойлер: Организуем автозапуск Сто делает: 1. Организует RAM-диск. Путь: /mnr/ram0; 2. Монтируем RAM-диск в заранее подготовленную директорию(для пользователя www-data) Путь: /home/httpd/ramdisk; 3. Запускаем стартовый файл /home/httpd/bash/wwstart от имени www-data, который запустит то, что нам надо. Код (C++): #!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. # Print the IP address _IP=$(hostname -I) || true if [ "$_IP" ]; then printf "My IP address is %s\n" "$_IP" fi # /etc/init.d/ramdisk restart # mount --bind /mnt/ram0 /home/httpd/ramdisk # su www-data -c /home/httpd/bash/wwstart & # exit 0 После этого механизм работы и взаимодействия уже есть! Спойлер: Поиск своих узлов - механизм BASH http://forum.amperka.ru/threads/Флуд-так-флуд-И-снова-bash-и-сказка-про-nc.13655/ Спойлер: Выполнение команд скриптом по SSH на другом хосте Да требуется чтобы одна машина сама проверяла состояние другой. И ещё проводила обмен файлами с ней.
Доброго времени суток! Это для настройки малины из уже настроенной другой малины. Правим /etc/rc.local на настриваемой малине (с правами ROOT) : Код (Bash): #!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. # Print the IP address _IP=$(hostname -I) || true if [ "$_IP" ]; then printf "My IP address is %s\n" "$_IP" fi # /etc/init.d/ramdisk restart # mount --bind /mnt/ram0 /home/httpd/ramdisk # su www-data -c /home/httpd/bash/wwstart & # exit 0 Создаётся RAM-диск в /mnt/ram0, монтируется в /home/httpd/ramdisk и запускается /home/httpd/bash/wwstart (это будет после следующего включения/перезапуска. Копируем директории: Директория home/httpd/bash(как ранее говорилось это может быть и автоматически в дальнейшем)... но делайте из RAM-диска. Для этого скопировать sshcmd.sh в RAM-диск(/home/httpd/ramdisk) и перейти в него. Посмотреть и найти настраиваемую малину в /home/httpd/ramdisk/sshosts Код (Bash): 192.168.7.1 22 Connection to 192.168.7.1 22 port [tcp/ssh] succeeded! 192.168.7.18 22 Connection to 192.168.7.18 22 port [tcp/ssh] succeeded! 192.168.7.19 22 Connection to 192.168.7.19 22 port [tcp/ssh] succeeded! 192.168.7.20 22 Connection to 192.168.7.20 22 port [tcp/ssh] succeeded! 192.168.7.21 22 Connection to 192.168.7.21 22 port [tcp/ssh] succeeded! Понятное дело все адреса выданы автоматически первой малиной. Код (Bash): www-data@raspberrypi:~/ramdisk$ ./sshcmd.sh tcmd www-data@192.168.7.18 www-data ./tt1 "ls -al" 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. SSH is enabled and the default password for the 'pi' user has not been changed. This is a security risk - please login as the 'pi' user and type 'passwd' to set a new password. total 12 drwxr-xr-x 3 www-data www-data 4096 Mar 3 19:08 . drwxr-xr-x 4 root root 4096 Mar 3 16:38 .. www-data@raspberrypi:~/ramdisk$ Как видно наша директория пуста... и не заходя туда сделаем /home/httpd/ramdisk Код (Bash): www-data@raspberrypi:~/ramdisk$ ./sshcmd.sh tcmd www-data@192.168.7.18 www-data ./tt1 "mkdir ramdisk" 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. SSH is enabled and the default password for the 'pi' user has not been changed. This is a security risk - please login as the 'pi' user and type 'passwd' to set a new password. www-data@raspberrypi:~/ramdisk$ Ну и проверим: Код (Bash): www-data@raspberrypi:~/ramdisk$ ./sshcmd.sh tcmd www-data@192.168.7.18 www-data ./tt1 "ls -al" 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. SSH is enabled and the default password for the 'pi' user has not been changed. This is a security risk - please login as the 'pi' user and type 'passwd' to set a new password. total 12 drwxr-xr-x 3 www-data www-data 4096 Mar 3 19:08 . drwxr-xr-x 4 root root 4096 Mar 3 16:38 .. drwxr-xr-x 2 www-data www-data 4096 Mar 3 19:08 ramdisk www-data@raspberrypi:~/ramdisk$ Диск создан! Копируем наш(на малине) /home/httpd/*****: Код (Bash): www-data@raspberrypi:~/ramdisk$ ./sshcmd.sh tohost www-data@192.168.7.18 www-data ./ttt /home/httpd/bash /home/httpd/bash www-data@192.168.7.18 www-data ./ttt /home/httpd/bash /home/httpd/bash www-data@raspberrypi:~/ramdisk$ ./sshcmd.sh tohost www-data@192.168.7.18 www-data ./ttt /home/httpd/config /home/httpd/config www-data@192.168.7.18 www-data ./ttt /home/httpd/config /home/httpd/config www-data@raspberrypi:~/ramdisk$ ./sshcmd.sh tohost www-data@192.168.7.18 www-data ./ttt /home/httpd/src /home/httpd/src www-data@192.168.7.18 www-data ./ttt /home/httpd/src /home/httpd/src www-data@raspberrypi:~/ramdisk$ ./sshcmd.sh tohost www-data@192.168.7.18 www-data ./ttt /home/httpd/task /home/httpd/task www-data@192.168.7.18 www-data ./ttt /home/httpd/task /home/httpd/task www-data@raspberrypi:~/ramdisk$ и после проверяем: Код (Bash): www-data@raspberrypi:~/ramdisk$ ./sshcmd.sh tcmd www-data@192.168.7.18 www-data ./tt1 "ls -al" 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. SSH is enabled and the default password for the 'pi' user has not been changed. This is a security risk - please login as the 'pi' user and type 'passwd' to set a new password. total 28 drwxr-xr-x 7 www-data www-data 4096 Mar 3 19:18 . drwxr-xr-x 4 root root 4096 Mar 3 16:38 .. drwxr-xr-x 2 www-data www-data 4096 Mar 3 19:15 bash drwxr-xr-x 2 www-data www-data 4096 Mar 3 19:16 config drwxr-xr-x 2 www-data www-data 4096 Mar 3 19:08 ramdisk drwxr-xr-x 3 www-data www-data 4096 Mar 3 19:17 src drwxr-xr-x 2 www-data www-data 4096 Mar 3 19:18 task www-data@raspberrypi:~/ramdisk$ И так всё на месте... и перезапуск. От имени ROOT так, что входим на устройство по SSH и потом перейдя по su перегружаем устройство по reboot и... на вскидку проверяем для наглядности: Код (Bash): www-data@raspberrypi:~/ramdisk$ ./sshcmd.sh tcmd www-data@192.168.7.18 www-data ./tt1 "ps -A" 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. SSH is enabled and the default password for the 'pi' user has not been changed. This is a security risk - please login as the 'pi' user and type 'passwd' to set a new password. PID TTY TIME CMD 1 ? 00:00:03 systemd 2 ? 00:00:00 kthreadd 3 ? 00:00:00 ksoftirqd/0 4 ? 00:00:00 kworker/0:0 5 ? 00:00:00 kworker/0:0H 6 ? 00:00:01 kworker/u8:0 7 ? 00:00:00 rcu_sched 8 ? 00:00:00 rcu_bh ... ... ... 7609 ? 00:00:00 spp.sh 7613 ? 00:00:00 spp.sh 7616 ? 00:00:00 nc 7633 ? 00:00:00 spp.sh 7637 ? 00:00:00 spp.sh 7644 ? 00:00:00 nc 7654 ? 00:00:00 sshd 7657 ? 00:00:00 spp.sh 7660 ? 00:00:00 spp.sh 7664 ? 00:00:00 nc 7666 ? 00:00:00 bash 7678 ? 00:00:00 spp.sh 7682 ? 00:00:00 spp.sh 7683 ? 00:00:00 nc 7692 ? 00:00:00 spp.sh 7694 ? 00:00:00 spp.sh 7696 ? 00:00:00 nc 7702 ? 00:00:00 spp.sh 7704 ? 00:00:00 spp.sh 7706 ? 00:00:00 nc 7714 ? 00:00:00 spp.sh 7716 ? 00:00:00 spp.sh 7718 ? 00:00:00 nc 7731 ? 00:00:00 ps 7732 ? 00:00:00 spp.sh 7734 ? 00:00:00 spp.sh 7736 ? 00:00:00 nc 19800 ? 00:00:00 sshd 24825 ? 00:00:00 sshd 24827 pts/0 00:00:00 bash www-data@raspberrypi:~/ramdisk$ А что собственно произошло? 1 - наш /etc/rc.local запустил /home/httpd/bash/wwstart - это скрипт... а он скопировал lwork.sh в ramdisk и запустил его там в тени. А lwork.sh рабочий цикл, который проверяя /home/httpd/task запускает процессы (если такие не запущены), указанные там (там только имена). В ряде случаев имена это пустые файлы с именем файла из /home/httpd/bash. Но если он не пустой, то содержимое будет входными параметрами для одноимённого файла в ../bash. Перед запуском каждый запускаемый файл копируется в RAM-диск(/home/httpd/ramdisk), а потом запускается. Цикличность работы скрипта lwork.sh определяется параметром в /home/httpd/config/lwork.cfg. Как можно заметить контролируется не только список хостов с портом 22 в этой сети(подсети), но и наличие и версия проекта в /home/httpd/src... кока что ipmem. Если /home/httpd/src/ipmem/src/work/ipmem ,будет отсутствовать или не соответствовать версии, указанной в /home/httpd/src/ipmem/src/version.h, будет тут же откомпилирован и помещён в /home/httpd/src/ipmem/work/ipmem. Кстати результаты сканирования сети размещаются в ramdisk/sshhost с интервалом 10 сек(за это время успевает проверить адреса с 192.168.7.1 по 192.168.7.254 порт 22)
Доброго времени суток! ...собственно начало. Всё в проекте "ipmem". Пока только выработка метода взаимодействия программы с выделенной памятью. Пока, сто это разделяемая память на устройстве... и как таковой сервер ещё не в действии... но в действии отдельные тестовые программы "test1" и "test2". Участие принимает разделяемая память на устройстве - директория "/dev/shm". Смысл теста: Код (Bash): #!/bin/bash # killall -9 test1 killall -9 test2 echo -e "======= test ======" echo -e "1) создание разделяемой памяти с помощью \"ipmem\" 256 байт" ./ipmem --cleshm -nshm testm -smfshm tests -szshm 256 echo -e "2) программа модификации дампа памяти \"test1\"" ./test1 -nshm testm -smfshm tests -szshm 256 & echo -e "4) программа вывода дампа памяти \"test2\"" ./test2 -nshm testm -smfshm tests -szshm 256 & Смысл в том, что: 1) "ipmem", хоть только и начало формирует: Код (Text): igor@debian-i:/dev/shm$ ls -al итого 272 drwxrwxrwt 2 root root 220 Янв 17 20:00 . drwxr-xr-x 33 root root 1380 Янв 17 20:08 .. -r-------- 1 igor igor 67108904 Янв 17 19:56 pulse-shm-176937212 -r-------- 1 igor igor 67108904 Янв 17 19:55 pulse-shm-2038499273 -r-------- 1 igor igor 67108904 Янв 17 19:55 pulse-shm-2597288203 -r-------- 1 igor igor 67108904 Янв 17 19:57 pulse-shm-2824082406 -r-------- 1 igor igor 67108904 Янв 17 19:56 pulse-shm-2834672448 -r-------- 1 igor igor 67108904 Янв 17 19:56 pulse-shm-3140599038 -rwxr-xr-x 1 igor igor 16 Янв 17 20:00 sem.tests -rwxr-xr-x 1 igor igor 257 Янв 17 20:01 testm -rw-r--r-- 1 root root 0 Янв 17 19:53 .tmpfs igor@debian-i:/dev/shm$ то есть: Код (Text): -rwxr-xr-x 1 igor igor 16 Янв 17 20:00 sem.tests -rwxr-xr-x 1 igor igor 257 Янв 17 20:01 testm Собственно семафор и сегмент памяти: 2) программа "test1" реализует и заполняет свой внутренний буфер размером 256 байт... и заполняя его значениями 0...255 записывает его в разделяемую память "/dev/shm/testm". Далее в цикле читается содержимое "/dev/shm/testm" в свой буфер и каждое его значение увеличивается на 1, после чего записывается обратно в "/dev/shm/testm". Ну и по циклу бесконечно. 3) программа "test2" просто читает содержимое "/dev/shm/testm" и выводит его на экран в виде дампа... тоже в бесконечном цикле: Код (Text): ---dump--- 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 ---dump--- 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 ---dump--- 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4 D5 В принципе ничего серьёзного... но "одновременный" доступ к одному адресному пространству разных программ - это многое означает. Именно - допустим картинка с камеры будет доступна множеству программ. А дальнейшее развитие проекта позволит расширить линейное адресное пространство на много устройств... и каждая (и не одна) программа на каждом устройстве будет иметь доступ к своим адресам. Пока только отработка интерфейса... с конечной точкой - какой-то программой. Все применения в "ipmem.zip" от 17.01.2018. Заголовочный файл 'imclient.h и содержит функции для работы со стороны конечной точки - программы! Всё в "test1" и "test2" после компиляции всё будет в ../bin. там и тестовый скрипт запуска двух программ. После теста остановить: killall test1 killall test2 Ранее задавал вопрос на эту тему с фразой: "Может велосипед делаю?"... но в ответ тишина и разговоры про котов. !!! Для тестирования надо перекомпилировать (ipmem,test1,test2).
Доброго времени суток! ...Вот потребовалось снова устанавливать Open CV на малину. Старая SD карта умерла и скопировать образ не удалось, да и Debian там был прежней версии. И вот все бубны сломал... хотел конечно последнюю версию... но то CMake старый, то собрать не выходит, то ещё что. и каждый Open CV (opencv-2.2.0(совсем старый), opencv-2.4.7(по моему он у меня был ранее), opencv-2.4.10(вот сейчас он у меня только что) ну и opencv-3.3.0(что-то не пошло, да и не пытался более). И как в разных инструкциях: http://cxem.net/arduino/arduino112.php http://robotclass.ru/articles/raspberrypi-3-opencv-3-install/ http://3dberry.org/node/10 https://www.pyimagesearch.com/2015/02/23/install-opencv-and-python-on-your-raspberry-pi-2-and-b/ http://robocraft.ru/blog/computervision/3242.html ну и других. Скажу сразу, что не осведомлён про конфигурации вот эти: Код (Text): cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D OPENCV_EXTRA_MODULES_PATH=~/Downloads/opencv_contrib-master/modules -D BUILD_EXAMPLES=ON .. , эти: Код (Text): cmake -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/usr/local -DBUILD_PERF_TESTS=OFF -DBUILD_opencv_gpu=OFF -DBUILD_opencv_ocl=OFF и просто Код (Text): cmake .. ... короче взяв отовсюду компоненты для установки и испытав всё это установил: из директории opencv-2.4.10/build (распаковываем архив opencv-2.4.10 и создаём в той директории директорию "build")... там запускаем: Код (Text): $ cmake -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/usr/local -DBUILD_PERF_TESTS=OFF -DBUILD_opencv_gpu=OFF -DBUILD_opencv_ocl=OFF .. /две точки означают, что он будет всё брать из директорий, что выше на уровень - если одна точка, то все запускается в папке проекта... но это мусорить там/ Далее ждём и получаем отчёты... должно всё быть нормально, если всё есть и cmake подходящий по версии... а наша папка "build" станет заполнена этим: Код (Text): www-data@raspberrypi:~/install/opencv-2.4.10/build$ ls 3rdparty CMakeCache.txt cmake_uninstall.cmake cvconfig.h include lib opencv2 OpenCVModules.cmake apps CMakeFiles CPackConfig.cmake data install_manifest.txt Makefile OpenCVConfig.cmake unix-install bin cmake_install.cmake CPackSourceConfig.cmake doc junk modules OpenCVConfig-version.cmake version_string.tmp www-data@raspberrypi:~/install/opencv-2.4.10/build$ , а в отчёте не будет ошибок. Итак всё готово теперь: Код (C++): make -j4 кстати -j4 это чтобы заработали все 4 ядра... будет быстрее, чем с одним... но все равно не быстро. У меня малины как серверы только по ssh и никаких клавиатур и дисплеев... да ещё через другую малину, которая раздаёт WIFI. Ну и если все в порядке то дойдёте до 100%. после этого Код (Text): sudo make install понятное дело если из под ROOT то sudo не надо. И всё вуфля! Нооооооо вот у меня доходило до половины и ошибки то какого то CODE_ID_XXX не находит и всё с файлами Код (Text): cap_ffmpeg.cpp cap_ffmpeg_api.hpp cap_ffmpeg_impl.hpp ... и т.д. И вот решил: https://uzverss.livejournal.com/74703.html Код (Text): 11:52 pm - FFmpeg - установка на Debian GNU/Linux 8 (Jessie) Если вам требуется перекодировать видео, вынуть из него скриншот, нарезать видеофайл или объединить, то ffmpeg — это то, что вам нужно! В Debian Jessie этот пакет исключили из официального репозитория и вместо него оставили avconv(Libav), который является форком и был рождем из-за конфликта внутри команды разработчиков. Конечно можно использовать и его или сделать линк в папке /usr/local/bin, но многие плагины требуют по привычке ffmpeg. Поэтому давайте рассмотрим несколько способо установки этого замечательного пакета. 1. Настроим apt на использование deb-multimedia репозитория Это форк дебиана, в котором используется ffmpeg вместо avconv (Libav). Следующие команды выполняются из-под рута. 1.1) Добавте следующие команды вниз /etc/apt/sources.list: sudo nano /etc/apt/sources.list добавить: deb http://www.deb-multimedia.org jessie main non-free deb-src http://www.deb-multimedia.org jessie main non-free 1.2) Обновите базу пакетов apt: sudo apt-get update 1.3) Добавим ключи deb-multimedia: sudo apt-get install deb-multimedia-keyring 1.4) Обновим базу пакетов снова: sudo apt-get update 2. Удалим пакет ffmpeg debian и установим новый из репозитория 2.1) Очистим систему от прошлых установок, если они были, чтобы предотвратить конфликт двух установленных версий и связанных с ним пакетов: sudo apt-get remove ffmpeg sudo apt-get install ffmpeg На этом можно было-бы и закончить, но недавно вышла версия 3,в которой добавили много разных вкусностей. А так как контрибьютеры не спешат добавлять ее в репозиторий, то мы поставим ее из иходников. 3. Установка библиотек и зависимостей для сбоки из исходников sudo apt-get install build-essential libmp3lame-dev libvorbis-dev libtheora-dev libspeex-dev yasm pkg-config libfaac-dev libopenjpeg-dev libx264-dev 4. Собираем пакет 4.1) Скачаем и распакуем исходный код: mkdir software; cd software; wget http://ffmpeg.org/releases/ffmpeg-3.1.4.tar.bz2; cd ..; mkdir src; cd src; tar xvjf ../software/ffmpeg-3.1.4.tar.bz2 4.2) Перейдем в папку с исходным кодом: cd ffmpeg-3.1.4 4.3) Сконфигурируем, соберем и установим: ./configure --enable-gpl --enable-postproc --enable-swscale --enable-avfilter --enable-libmp3lame --enable-libvorbis --enable-libtheora --enable-libx264 --enable-libspeex --enable-shared --enable-pthreads --enable-libopenjpeg --enable-libfaac --enable-nonfree make sudo make install 4.4) Запустим "/sbin/ldconfig" из-под root. На этом наша установка закончена. чтобы потом не мучится с make uninstall вместо sudo make install я предпочитаю sudo checkinstall -D если при сборке возникает ошибка: mkdir: невозможно создать каталог «/usr/local/share/ffmpeg»: Нет такого файла или каталога Makefile:166: ошибка выполнения рецепта для цели «install-data» make: *** [install-data] Ошибка 1 mkdir: невозможно создать каталог «/usr/local/share/ffmpeg»: Нет такого файла или каталога Makefile:166: ошибка выполнения рецепта для цели «install-data» make: *** [install-data] Ошибка 1 **** Установка неудачна. Отменяется создание пакета. Очищается...OK Удачи. то sudo mkdir /usr/local/share/ffmpeg а затем sudo checkinstall -D удалим лишнее: cd ../..; rm -rf software/ src/ После этого make дополз до 100% и всё установилось, вот только выполнил всё до пункта 2.1 включительно. Удачи!
О! Привет! Да нет конечно! Это про установку пакета Open CV. Сильный пакет, но бывают нюансы при установке. Конечно зависит от варианта установленного Rasbian. Вы наверное заметили тут http://cxem.net/arduino/arduino112.php что не все используют устройство с монитором. Если не затруднит и интересно, то почитайте про этот пакет. Интересно... не правда ли?
Доброго времени суток! Продолжаю работу... но простите за пояснения. Может и излишнее. Ещё раз простите! Но: bin.zip stst1.zip stst2.zip Собственно тут указанное выше(ранее) - вырезка. Что собственно - допустим первая программа (на основе test1) читает данные к примеру с web-камеры... ну допустим покадрово и записывает их с предварительной обработкой или без... и записывает в разделяемую память. Соответственно программа (на основе test2) читает эти данные из разделяемой памяти и что-то делает. Так же и другие программы (несколько) тоже на основе test2 что-то делают с извлекаемыми данными. Требуется только изменить требуемый размер: Код (C++): char SEMAPHORE_NAME[256]; // "/test_named_semaphore" char SHARED_MEMORY_OBJECT_NAME[256]; // "test_shared_memory" u_int64_t SHARED_MEMORY_OBJECT_SIZE; ... ... _SshMemCreate(&SHARED_MEMORY_OBJECT_NAME[0], &SEMAPHORE_NAME[0], 256, &sshm); 256 - это я для теста выбрал размер. Для картинки соответственно другой. Главное все программы при доступе не будут мешать друг другу. Удачи! Это очень выгодно разделять задачу на несколько программ! Причём не только одна программа может производить запись, а каждая. Всё зависит от задачи. И простите если, что не так... точнее не требуется.
Доброго времени суток!!! Перед тем как продолжить что-то своё, решил испытать элементы "кластера" на MPI пока только пару малин. По wifi как и задумано ранее. и сразу ряд вопросов: --- формирование связи с применением id_rsa.pub. Всё получается, кроме того, что можно подключаться по SSH с одной малины(MASTER) к другой(SLAVE)... но не наоборот. От SLAVE запрашивается пароль. Хоть и делал аналогично и от SLAVE в MASTER переносил ключи. (Простите в этой области я ниже нуба). Хотя может так и должно? --- запуск программы MPI (процессы на разных малинах) с предварительным переносом копий программ в другие малины. Компиляция применяя MPICH. Вот скрипт который переносит программу на указанные узлы: Код (Bash): #!/bin/bash # #путь для запуска pwork="/home/httpd/ramdisk" fwork=$1 pfwork="$pwork/$fwork" echo "$pfwork" #тут копируем файлы на узлы url="192.168.7.1" scp -r $fwork $url:$pfwork url="192.168.7.2" scp -r $fwork $url:$pfwork #переходим в корень пользователя и запускаем cd ~ mpirun -f ~/mpi.hosts -n 10 $pfwork на 10 процессов. По понятным причинам рабочая область в RAMDISKе. Это шаблон и входным параметром является имя файла запускаемой программы. Всё конечно работает, только время подключения(копирования и запуска). Да и копирование в собственный адрес 192.168.7.1 требует пароля (я на это не обращаю внимания - можно переделать). Должно запускаться только из корня (без настройки путей и т.п.)? - Возможно ли запускать не копии одной программы, а совсем разные проекты, но с единым - взаимодействием по MPI? Радует конечно то, что можно запустить параллельно скрипты на разных хостах например df -h Код (Text): www-data@pi01:~$ mpirun -f ~/mpi.hosts df -h Filesystem Size Used Avail Use% Mounted on /dev/root 15G 5.2G 8.9G 37% / devtmpfs 458M 0 458M 0% /dev tmpfs 462M 0 462M 0% /dev/shm tmpfs 462M 6.6M 456M 2% /run tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 462M 0 462M 0% /sys/fs/cgroup /dev/mmcblk0p1 63M 21M 42M 34% /boot /dev/ram0 3.9M 1.7M 2.2M 44% /mnt/ram0 tmpfs 93M 0 93M 0% /run/user/1002 tmpfs 93M 0 93M 0% /run/user/1000 Filesystem Size Used Avail Use% Mounted on /dev/root 30G 4.3G 24G 16% / devtmpfs 458M 0 458M 0% /dev tmpfs 462M 0 462M 0% /dev/shm tmpfs 462M 6.3M 456M 2% /run tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 462M 0 462M 0% /sys/fs/cgroup /dev/mmcblk0p1 63M 21M 42M 34% /boot /dev/ram0 3.9M 55K 3.9M 2% /mnt/ram0 tmpfs 93M 0 93M 0% /run/user/1001 tmpfs 93M 0 93M 0% /run/user/1000 www-data@pi01:~$ тут информация от двух малин. Если есть возможность запускать разные программы на разных малинах с едиой системой взаимодействия, то не потребуется городить велосипед. Например одна малина с камерой, дальномером и приводами, а остальные работают по обработке и управлению. И интересно было бы иметь взаимодействие между хостами, когда из более 2-х "напрямую", а не через "МАСТЕР" С глубоким уважением! Заранее спасибо!
...вот для уточнения... Этот вопрос: о запуске нескольких(двух на примере) разных программ с единым обменом - очень меня волнует. ОЧЕНЬ! пробую: Код (Bash): #!/bin/bash ./startmpi cpi & ./startmpi test4_mpi & где startmpi - это скрипт из прошлого сообщения. Глупо наверное. первая программа - cpi это вычисление числа пи, только я "завернул" её внутри цикла в коде Си. Вторя программа это: Код (C++): //main.c #include <stdio.h> #include "mpi.h" #define MAX 100 int main(int argc, char **argv) { int rank, size, n, i, ibeg, iend; MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &size); MPI_Comm_rank(MPI_COMM_WORLD, &rank); n=(MAX-1)/size+1; ibeg=rank*n+1; iend=(rank+1)*n; for(i=ibeg; i<=((iend>MAX)?MAX:iend); i++) printf ("process %d, %d^2=%d\n", rank, i, i*i); MPI_Finalize(); //return 0; } И то же в бесконечном цикле. В обоих циклах есть sleep(1) ожидание секунду. есть даже вывод в консоли: Спойлер: вывод с консоли process 9, 91^2=8281 process 9, 92^2=8464 process 9, 93^2=8649 process 9, 94^2=8836 process 9, 95^2=9025 process 9, 96^2=9216 process 9, 97^2=9409 process 9, 98^2=9604 process 9, 99^2=9801 process 9, 100^2=10000 process 5, 51^2=2601 process 5, 52^2=2704 process 5, 53^2=2809 process 5, 54^2=2916 process 5, 55^2=3025 process 5, 56^2=3136 process 5, 57^2=3249 process 5, 58^2=3364 process 5, 59^2=3481 process 5, 60^2=3600 process 7, 71^2=5041 process 7, 72^2=5184 process 7, 73^2=5329 process 7, 74^2=5476 process 7, 75^2=5625 process 7, 76^2=5776 process 7, 77^2=5929 process 7, 78^2=6084 process 7, 79^2=6241 process 7, 80^2=6400 process 4, 41^2=1681 process 4, 42^2=1764 process 4, 43^2=1849 process 4, 44^2=1936 process 4, 45^2=2025 process 4, 46^2=2116 process 4, 47^2=2209 process 4, 48^2=2304 process 4, 49^2=2401 process 4, 50^2=2500 process 2, 21^2=441 process 2, 22^2=484 process 2, 23^2=529 process 2, 24^2=576 process 2, 25^2=625 process 2, 26^2=676 process 2, 27^2=729 process 2, 28^2=784 process 2, 29^2=841 process 2, 30^2=900 process 6, 61^2=3721 process 6, 62^2=3844 process 6, 63^2=3969 process 6, 64^2=4096 process 6, 65^2=4225 process 6, 66^2=4356 process 6, 67^2=4489 process 6, 68^2=4624 process 6, 69^2=4761 process 6, 70^2=4900 process 8, 81^2=6561 process 8, 82^2=6724 process 8, 83^2=6889 process 8, 84^2=7056 process 8, 85^2=7225 process 8, 86^2=7396 process 8, 87^2=7569 process 8, 88^2=7744 process 8, 89^2=7921 process 8, 90^2=8100 process 0, 1^2=1 process 0, 2^2=4 process 0, 3^2=9 process 0, 4^2=16 process 0, 5^2=25 process 0, 6^2=36 process 0, 7^2=49 process 0, 8^2=64 process 0, 9^2=81 process 0, 10^2=100 process 3, 31^2=961 process 3, 32^2=1024 process 3, 33^2=1089 process 3, 34^2=1156 process 3, 35^2=1225 process 3, 36^2=1296 process 3, 37^2=1369 process 3, 38^2=1444 process 3, 39^2=1521 process 3, 40^2=1600 process 9, 91^2=8281 process 9, 92^2=8464 process 9, 93^2=8649 process 9, 94^2=8836 process 9, 95^2=9025 process 9, 96^2=9216 process 9, 97^2=9409 process 9, 98^2=9604 process 9, 99^2=9801 process 9, 100^2=10000 process 1, 11^2=121 process 1, 12^2=144 process 1, 13^2=169 process 1, 14^2=196 process 1, 15^2=225 process 1, 16^2=256 process 1, 17^2=289 process 1, 18^2=324 process 1, 19^2=361 process 1, 20^2=400 process 5, 51^2=2601 process 5, 52^2=2704 process 5, 53^2=2809 process 5, 54^2=2916 process 5, 55^2=3025 process 5, 56^2=3136 process 5, 57^2=3249 process 5, 58^2=3364 process 5, 59^2=3481 process 5, 60^2=3600 process 7, 71^2=5041 process 7, 72^2=5184 process 7, 73^2=5329 process 7, 74^2=5476 process 7, 75^2=5625 process 7, 76^2=5776 process 7, 77^2=5929 process 7, 78^2=6084 process 7, 79^2=6241 process 7, 80^2=6400 Process 4 of 10 is on pi01 Process 6 of 10 is on pi01 Process 8 of 10 is on pi01 Process 2 of 10 is on pi01 Process 4 of 10 is on pi01 Process 6 of 10 is on pi01 Process 2 of 10 is on pi01 Process 8 of 10 is on pi01 process 0, 1^2=1 process 0, 2^2=4 process 0, 3^2=9 process 0, 4^2=16 process 0, 5^2=25 process 0, 6^2=36 process 0, 7^2=49 process 0, 8^2=64 process 0, 9^2=81 process 0, 10^2=100 process 4, 41^2=1681 process 4, 42^2=1764 process 4, 43^2=1849 process 4, 44^2=1936 process 4, 45^2=2025 process 4, 46^2=2116 process 4, 47^2=2209 process 4, 48^2=2304 process 4, 49^2=2401 process 4, 50^2=2500 Process 3 of 10 is on pi02 Process 7 of 10 is on pi02 process 6, 61^2=3721 process 6, 62^2=3844 process 6, 63^2=3969 process 6, 64^2=4096 process 6, 65^2=4225 process 6, 66^2=4356 process 6, 67^2=4489 process 6, 68^2=4624 process 6, 69^2=4761 process 6, 70^2=4900 Process 5 of 10 is on pi02 Process 9 of 10 is on pi02 process 1, 11^2=121 process 1, 12^2=144 process 1, 13^2=169 process 1, 14^2=196 process 1, 15^2=225 process 1, 16^2=256 process 1, 17^2=289 process 1, 18^2=324 process 1, 19^2=361 process 1, 20^2=400 Process 1 of 10 is on pi02 Process 9 of 10 is on pi02 process 3, 31^2=961 process 3, 32^2=1024 process 3, 33^2=1089 process 3, 34^2=1156 process 3, 35^2=1225 process 3, 36^2=1296 process 3, 37^2=1369 process 3, 38^2=1444 process 3, 39^2=1521 process 3, 40^2=1600 process 8, 81^2=6561 process 8, 82^2=6724 process 8, 83^2=6889 process 8, 84^2=7056 process 8, 85^2=7225 process 8, 86^2=7396 process 8, 87^2=7569 process 8, 88^2=7744 process 8, 89^2=7921 process 8, 90^2=8100 process 2, 21^2=441 process 2, 22^2=484 process 2, 23^2=529 process 2, 24^2=576 process 2, 25^2=625 process 2, 26^2=676 process 2, 27^2=729 process 2, 28^2=784 process 2, 29^2=841 process 2, 30^2=900 Process 0 of 10 is on pi01 Process 7 of 10 is on pi02 Process 0 of 10 is on pi01 Process 1 of 10 is on pi02 process 9, 91^2=8281 process 9, 92^2=8464 process 9, 93^2=8649 process 9, 94^2=8836 process 9, 95^2=9025 process 9, 96^2=9216 process 9, 97^2=9409 process 9, 98^2=9604 process 9, 99^2=9801 process 9, 100^2=10000 Process 3 of 10 is on pi02 Process 5 of 10 is on pi02 process 5, 51^2=2601 process 5, 52^2=2704 process 5, 53^2=2809 process 5, 54^2=2916 process 5, 55^2=3025 process 5, 56^2=3136 process 5, 57^2=3249 process 5, 58^2=3364 process 5, 59^2=3481 process 5, 60^2=3600 process 7, 71^2=5041 process 7, 72^2=5184 process 7, 73^2=5329 process 7, 74^2=5476 process 7, 75^2=5625 process 7, 76^2=5776 process 7, 77^2=5929 process 7, 78^2=6084 process 7, 79^2=6241 process 7, 80^2=6400 pi is approximately 3.14159265358987083160968722950201, Error is 0.00000000000007771561172376095783 wall clock time = 0.093781 pi is approximately 3.14159265358987083160968722950201, Error is 0.00000000000007771561172376095783 wall clock time = 0.093969 process 4, 41^2=1681 process 4, 42^2=1764 process 4, 43^2=1849 Тут вроде как работают оба, но думаю без совместного обмена. Подскажите как быть с этим. Или делать велосипед.
...вот ковыряясь выяснил, что из одной MPI сессии у меня получается запустить совсем разные программы, если их имена совпадают на элементах кластера. Это совсем другое... в прошлом сообщении я отрывал MPI сессию для каждой программы отдельно. Вот опыты: two2.zip Собственно это две одинаковые программы с несколько разным содержимым. И если выйдет производить обмен данными, то можно строить распределённую систему управления (или что-то ещё) на неоднородном коде. Простите, но напомню, что механизм MPI задуман для распараллеливания вычислений, распределяя нагрузку не только на разные процессоры, но и на разные компьютеры в сети. Если кто знаком с этим, и если не сложно пожалуйста поделитесь опытом! Заранее спасибо.
Кстати про /dev/shm не использовал потому как ранее не доверял, а скорее не догадывался... а скорее всего не знал. Теперь использую как RAM-диск. Думаю это правильно и не надо делать лишний mount типа: Код (Bash): #!/bin/sh ### BEGIN INIT INFO # Provides: A ramdisk to save intermittent data # Required-Start: # Required-Stop: # X-Start-Before: # X-Stop-After: # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: create a ramdisk # Description: create a ramdisk with 64MB and mount it to /mnt/ram0 ### END INIT INFO ramdev="/dev/ram1" shmdev="/dev/shm/shmdisk" size=3 blocksize=2048 ((rrsize = size * blocksize)) # function fhelp() { echo "" echo "{start|stop|restart} обычные СТАРТ,СТОП и РЕСТАРТ рамдиска испоьзуя $ramdev" echo "{shmstart|shmstop|shmrestart} СТАРТ,СТОП и РЕСТАРТ рамдиска испоьзуя $tmpdev" echo "{tmpfsstart|tmpfsstop|tmpfsrestart} СТАРТ,СТОП и РЕСТАРТ рамдиска испоьзуя tmpfs" echo "" } case "$1" in #/dev/ramX start) if [ ! -e /mnt/defdisk ]; then mkdir /mnt/defdisk fi mke2fs -m 0 $ramdev mount $ramdev /mnt/defdisk chmod 777 /mnt/defdisk ;; stop) umount -v /mnt/defdisk ;; restart) umount -v /mnt/defdisk if [ ! -e /mnt/defdisk ]; then mkdir /mnt/defdisk fi mke2fs -m 0 $ramdev mount $ramdev /mnt/defdisk chmod 777 /mnt/defdisk ;; #/dev/shm/shmram shmstart) if [ ! -e /mnt/defdisk ]; then mkdir /mnt/defdisk fi if [ ! -e "$shmdev" ]; then mkdir "$shmdev" fi mount $shmdev /mnt/defdisk -o rsize=$rrsize dd if=/dev/zero of=/mnt/defdisk count=$size bs=$blocksize mke2fs -m 0 -F /mnt/defdisk chmod 777 /mnt/defdisk ;; shmstop) umount -v /mnt/defdisk rmdir $shmdev ;; shmrestart) umount -v /mnt/defdisk rmdir $shmdev if [ ! -e /mnt/defdisk ]; then mkdir /mnt/defdisk fi if [ ! -e "$shmdev" ]; then mkdir "$shmdev" fi mount $shmdev /mnt/defdisk -o rsize=$rrsize dd if=/dev/zero of=/mnt/defdisk count=$size bs=$blocksize mke2fs -m 0 -F /mnt/defdisk chmod 777 /mnt/defdisk ;; #tmpfs tmpfsstart) if [ ! -e /mnt/defdisk ]; then mkdir /mnt/defdisk fi mount -t tmpfs tmpfs /mnt/defdisk/ -o rsize=$rrsize dd if=/dev/zero of=/mnt/defdisk count=$size bs=$blocksize mke2fs -m 0 -F /mnt/defdisk chmod 777 /mnt/defdisk ;; tmpfsstop) umount -v /mnt/defdisk ;; tmpfsrestart) umount -v /mnt/defdisk if [ ! -e /mnt/defdisk ]; then mkdir /mnt/defdisk fi mount -t tmpfs tmpfs /mnt/defdisk/ -o rsize=$rrsize dd if=/dev/zero of=/mnt/defdisk count=$size bs=$blocksize mke2fs -m 0 -F /mnt/defdisk chmod 777 /mnt/defdisk ;; help) fhelp ;; *) echo $"Usage: $0 {<p>start|stop|<p>restart|help}" exit 1 esac exit 0 ну и понятно, что в /etc/rc.local (в других версиях путь иначе - в moxa к примеру /etc/init.d/rc.local): Код (Bash): #ram disk #/etc/init.d/ramdisk /etc/init.d/ramdisk2 shmstart теперь просто делаю указав путь(вот к примеру в скрипте): Код (Bash): _file_res="/dev/shm/anshttp.dat" _dfile="/dev/shm/sndhttp.dat" Уважаемые знатоки это нормально? Спасибо!
/dev/shm shared memory для чего именно? Подсмотрел у segnetics... там разделяемая память используется для взаимодействия данных между разными процессами... вплоть до разных проектов. Стал дальше смотреть... а данные (именованные) в файлах. Вот и решил воспользоваться готовым каталогом в RAM. Тем более посмотрел, что он есть во всех Linux-ах и с одинаковыми правами доступа.
вот посмотрите: Код (Text): www-data@Moxa:~$ df Filesystem 1K-blocks Used Available Use% Mounted on /dev/root 8192 6764 1428 83% / /dev/ram3 1003 9 943 1% /dev /dev/ram0 499 24 450 5% /var /dev/mtdblock3 6144 3304 2840 54% /tmp /dev/mtdblock3 15607264 12026548 2787912 81% /home /dev/mtdblock3 6144 3304 2840 54% /etc tmpfs 4516 0 4516 0% /dev/shm /dev/mmc1 15607264 12026548 2787912 81% /var/sd tmpfs 4516 0 4516 0% /mnt/defdisk /dev/mmc1 15607264 12026548 2787912 81% /home /dev/mmc1 15607264 12026548 2787912 81% /root tmpfs 4516 0 4516 0% /home/httpd/ramdisk /dev/mmc1 15607264 12026548 2787912 81% /usr /dev/mmc1 15607264 12026548 2787912 81% /lib www-data@Moxa:~$ и вот: Код (Text): igor@debian-i:~/coding/bash/nsite4$ df Файловая система 1K-блоков Использовано Доступно Использовано% Cмонтировано в rootfs 288370016 234246952 39474644 86% / udev 10240 0 10240 0% /dev tmpfs 399112 964 398148 1% /run /dev/disk/by-uuid/90d540ef-9e50-4d16-ad46-931292ef4ca7 288370016 234246952 39474644 86% / tmpfs 5120 0 5120 0% /run/lock tmpfs 1544100 26648 1517452 2% /run/shm igor@debian-i:~/coding/bash/nsite4$ все вроде как tmpfs
Нет... у них там примеры применения взаимодействия "внешних" проектов на Си совместно с SMLogix. Там прошит Debian на TRIM5, SHM2G(i), SHM4... и запускается при включении окружение. Есть доступ по ssh,ftp и др. Обычный Linux... а их HMI через /dev/shm разрешено использовать совместно с программами на C/C++. Эти ребята именно это сами и показывают... и подсказывают как. Дают выбор делать FBD программы и Си... но взаимодействовать с сенсорным дисплеем через их окружение. Кстати если в FBD не применять Modbus, то его можно применить на Си... ну или какой-то иной/свой протокол (к примеру TenzoM, которого там нет).
Что-то не понял... В овене на ST можно работать с модбасом. А здесь прямо внутри плк можно писать си программы?