|
Вопросы о SMH-2G(i) Здесь всё, что касается работы контроллера SMH-2G(i). |
|
Опции темы | Поиск в этой теме |
01.02.2017, 11:26 | #1 |
Member
Регистрация: Jul 2016
Сообщения: 33
Благодарил(а): 1 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
C/C++
Доброго времени суток!
Заранее прошу прощения за глупые вопросы. 1. Есть SMH2Gi, в который уже залит проект SMLogix. Имеется ли возможность заходить в контроллер по SSH с дргой линукс машины по сети с целью установки в автозапуск ещё и своего кода на Си. 2. Скачал примеры и возрадовался прочитав в Makefile вот это: INCPATH = -I/usr/share/qt4/mkspecs/qws/linux-2Gimyprg-g++ -I. -I/usr/include/qt4 -I. -I. Как понял можно использовать QtCreator... ну и сразу моя глупость: как вы "прикручиваете" этот кросс-компилятор... и где его взять? Имеется ли компилятор на самом устройстве?... возможно можно и там компилировать... или только кросс компиляция. 3. Посмотрел вот это: Код:
rlSharedMemory::rlSharedMemory(const char *shmname, unsigned long Size) { .... .... // create file file_existed = 1; fp = fopen(name,"r"); if(fp == NULL) { file_existed = 0; fp = fopen(name,"w"); if(fp == NULL) { int ret; char buf[1024]; sprintf(buf,"could not write shm=%s\n",shmname); ret = ::write(1,buf,strlen(buf)); if(ret < 0) exit(-1); sprintf(buf,"you have to run this program as root !!!\n"); ret = ::write(1,buf,strlen(buf)); if(ret < 0) exit(-1); status=ERROR_FILE; exit(-1); } } fclose(fp); .... .... 4. Могу ли войдя по SSH создать нового пользователя по useradd и сделать ram-disk (хотя наверное глупость всё это - простите) примерно так: Код:
#!/bin/bash # ramdisk.sh # "электронный диск" -- это область в ОЗУ компьютера #+ с которой система взаимодействует как с файловой системой. # Основное преимущество -- очень высокая скорость чтения/записи. # Недостатки -- энергозависимость, уменьшение объема ОЗУ, доступного системе, # относительно небольшой размер. # # Чем хорош электронный диск? # При хранении наборов данных, таких как таблиц баз данных или словарей, на электронном диске #+ вы получаете высокую скорость работы с этими наборами, поскольку время доступа к ОЗУ # неизмеримо меньше времени доступа к жесткому диску. E_NON_ROOT_USER=70 # Сценарий должен запускаться с правами root. ROOTUSER_NAME=root MOUNTPT=/mnt/defdisk SIZE=2000 # 2K блоков (измените, если это необходимо) BLOCKSIZE=1024 # размер блока -- 1K (1024 байт) DEVICE=/dev/ram1 # Первое устройство ram username=`id -nu` if [ "$username" != "$ROOTUSER_NAME" ] then echo "Сценарий должен запускаться с правами root." exit $E_NON_ROOT_USER fi if [ ! -d "$MOUNTPT" ] # Проверка наличия точки монтирования, then #+ благодаря этой проверке, при повторных запусках сценария mkdir $MOUNTPT #+ ошибки возникать не будет. fi dd if=/dev/zero of=$DEVICE count=$SIZE bs=$BLOCKSIZE # Очистить электронный диск. mke2fs $DEVICE # Создать файловую систему ext2. mount $DEVICE $MOUNTPT # Смонтировать. chmod 777 $MOUNTPT # Сделать электронный диск доступным для обычных пользователей. # Но при этом, только root сможет его отмонтировать. echo "Электронный диск \"$MOUNTPT\" готов к работе." # Теперь электронный диск доступен для любого пользователя в системе. # Внимание! Электронный диск -- это энергозависимое устройство! Все данные, хранящиеся на нем, #+ будут утеряны при остановке или перезагрузке системы. # Если эти данные представляют для вас интерес, то сохраняйте их копии в обычном каталоге. # После перезагрузки, чтобы вновь создать электронный диск, запустите этот сценарий. # Простое монтирование /mnt/ramdisk, без выполнения подготовительных действий, не будет работать. exit 0 Простите ещё раз! Заранее спасибо! |
01.02.2017, 11:33 | #2 |
Уволен из Сегнетикс
Регистрация: Nov 2015
Адрес: CПб/ВЛГ
Сообщения: 0
Благодарил(а): 0 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: C/C++
1. Возможность подключения по ssh, конечно же, есть. ip-адрес контроллера набираете и всё. Логин/пароль через лоджик задаются. Если не менялись - то root/segnetics.
2. Мы используем кросс-компиляцию.. На 2G(i) не пробовал компилить, на триме пробовал. Но там сборка линукс по шире + доставил gcc + производительность + руками библиотеки подключал. Можно, но сложно. Кросс-компиляция делает это быстрее и легче. С пк всегда удобней работать. Что касается qt - моё мнение, не следует его использовать. Чем легче будет программа - тем лучше для всех. А всякие qt - это надстройки над надстройками надстроек. Чем ниже вы "кодите" - тем лучше получается программа. 3. В Линуксе многие вещи представлены как "текстовый файл". Разделяемая память из лоджика (в справке лоджика описано) тоже ссылается на файл, который находится во временной папке в оперативной памяти. Ничего дополнительно создавать не надо. 4. __________________ В сегнетиксе не работаю с самого начала 2019 года. |
01.02.2017, 12:47 | #3 |
Member
Регистрация: Jul 2016
Сообщения: 33
Благодарил(а): 1 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: C/C++
Спасибо!!!
А всякие qt - это надстройки над надстройками надстроек. Чем ниже вы "кодите" - тем лучше получается программа. Даже привычнее без Qt... просто make и всё! Отлично! Ведь картинки не нужны, а только сервер. (пример попался с Qt) На 2G(i) не пробовал компилить, на триме пробовал. Интересует в таком случае кросс-компилятор в среде линукс ноутбука! Не виндовс! Я так понимаю что linux-2Gimyprg-g++ (linux-2Gimyprg-gcc) и вообще весь linux-2Gimyprg-XXX надо где-то раздобыть вместе с библиотеками и т.п. Ну или какой-то другой компилятор. Был бы благодарен за ссылку! (возможно есть в директориях для скачивания... но простите... проблема с ориентацией в них и соответственно поиском... извините). Возможность подключения по ssh, конечно же, есть. ip-адрес контроллера набираете и всё. Логин/пароль через лоджик задаются. Я понимаю так, что только root. И вот ещё: Код:
//Инициализация переменных разделяемой памяти ........ Shm mymem("./load_files.srv"); if (mymem.getType("Parameter") != FLOAT) exit(1); if (mymem.getType("Eject") != BOOL) exit(1); if (mymem.getType("FreeDiskSpace") != FLOAT) exit(1); ........ Последний раз редактировалось oiv_1968, 01.02.2017 в 13:00 |
01.02.2017, 12:48 | #4 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 117
Благодарил(а): 15 раз(а)
Поблагодарили:
660 раз(а) в 604 сообщениях
|
Ответ: C/C++
Цитата:
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
01.02.2017, 13:15 | #5 |
Member
Регистрация: Jul 2016
Сообщения: 33
Благодарил(а): 1 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: C/C++
Спасибо!
Простите... стыдно докучать. Последний вопрос: Там есть директория LinuxVM понимаю, что линукс виртуальная машина. Это какой-то образ для VirtualBox который запускает виртуальное устройство? В составе увидел и сам VirtualBox-XXXXX.exe для установки под виндовс. Для чего виртуальная машина? Каково точное назначение? У меня есть такая, я в ней запускаю виндовсы. Или этот VirtualBox что-то другое? Простите я наверное туплю сильно... но хочу понять всё в подробностях. |
01.02.2017, 13:32 | #6 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 117
Благодарил(а): 15 раз(а)
Поблагодарили:
660 раз(а) в 604 сообщениях
|
Ответ: C/C++
Цитата:
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
01.02.2017, 13:36 | #7 |
Member
Регистрация: Jul 2016
Сообщения: 33
Благодарил(а): 1 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: C/C++
Скачал toolchain... понял из документации, что он собирается из исходников.
У меня есть возможность собрать для запуска (этого toolchain) практически для любой линукс машины... включая ARM... если собирать на ней???????????? |
01.02.2017, 13:42 | #8 |
Уволен из Сегнетикс
Регистрация: Nov 2015
Адрес: CПб/ВЛГ
Сообщения: 0
Благодарил(а): 0 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: C/C++
В Линуксе можно всё. Главное - знать как. К сожалению, я тут не подскажу. Не пробовал.
__________________ В сегнетиксе не работаю с самого начала 2019 года. |
01.02.2017, 13:53 | #9 |
Member
Регистрация: Jul 2016
Сообщения: 33
Благодарил(а): 1 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: C/C++
Сейчас(скорее сегодня) попробую собрать по инструкции (раздел 1.3 прилагаемой инструкции в PDF) на Raspberry Pi 3... о результатах отпишусь.
|
01.02.2017, 17:18 | #10 |
Member
Регистрация: Jul 2016
Сообщения: 33
Благодарил(а): 1 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: C/C++
Простите я что-то не то говорил... ничего не собирается, а согласно ссылке
http://www.pengutronix.de/oselas/too.../index_en.html устанавливается Вот только той версии не видел (1.99.3.2) А стал ставить вот это: oselas.toolchain-2016.06.1-arm-v5te-linux-gnueabi-gcc-5.4.0-glibc-2.23-binutils-2.26-kernel-4.6-sanitized Хотя в документе упоминается: arm-v5te-linux-gnueabi_gcc-4.3.2_glibc-2.8_binutils-2.18_kernel-2.6.27-sanitized Понятно что версия новее... но меня интересует соответствие. Ранее никогда не делал это. Разве что apt-get install gcc только в /etc/apt/source.list добавил: deb http://debian.pengutronix.de/debian/ sid main contrib non-free согласно инструкции. Ранее думал, что родным компилятором будет собираться другой компилятор с утилитами из исходников. Если рассматривать toolchain, что я указал... это он? Спасибо заранее. |
01.02.2017, 17:22 | #11 |
Уволен из Сегнетикс
Регистрация: Nov 2015
Адрес: CПб/ВЛГ
Сообщения: 0
Благодарил(а): 0 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: C/C++
Я рекомендую вам, прежде всего, достать машину с виндой, запустить под ней настроенную ВМ из нашего архива и запустить хотя бы один проект из примеров. Как только получится - можно будет двигаться дальше.
Вы сейчас задаёте вопросы, и оно вроде и можно на них все ответить, но потом последуют другие. Поэтому лучше вам пройти этот путь самостоятельно, он не трудный. __________________ В сегнетиксе не работаю с самого начала 2019 года. |
02.02.2017, 09:43 | #12 | |
Member
Регистрация: Jul 2016
Сообщения: 33
Благодарил(а): 1 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: C/C++
Доброго времени суток!
Цитата:
00:00:17.845 ERROR [COM]: aRC=VBOX_E_INVALID_VM_STATE (0x80bb0002) aIID={1968b7d3-e3bf-4ceb-99e0-cb7c913317bb} aComponent={Console} aText={Invalid machine state: PoweredOff (must be Running, Paused or Stuck)}, preserve=false Драйверы для ноута установлены не все... Обязательно прямо сейчас ей(машине) иметь Console? Последний раз редактировалось oiv_1968, 02.02.2017 в 10:08 |
|
02.02.2017, 10:08 | #13 |
Member
Регистрация: Jul 2016
Сообщения: 33
Благодарил(а): 1 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: C/C++
Прошу прощения - выбрал в виртуальной машине адаптацию не под Ubuntu а Ubuntu 64 и всё стало нормально.
Ещё раз простите!!! |
02.02.2017, 10:54 | #14 |
Уволен из Сегнетикс
Регистрация: Nov 2015
Адрес: CПб/ВЛГ
Сообщения: 0
Благодарил(а): 0 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: C/C++
Каким бы замечательным не был дэбиан, лично у меня на ноутбуке на другом логическом диске стоит винда и мультизагрузка. Т.к. иногда вообще никак не отвертеться от специального оборудования, которое можно конфигурировать только из под чистых окошек. Да, противно, но это единственный приемлемый вариант, когда иначе с оборудованием сложно подружиться.
Общая ситуация так обстоит: тулчейн можно собрать и на реальном линуксе, и даже настроить всё можно. Вот только лоджик из под линукса не стабильно работает, как показывает практика. __________________ В сегнетиксе не работаю с самого начала 2019 года. |
02.02.2017, 11:54 | #15 |
Member
Регистрация: Jul 2016
Сообщения: 33
Благодарил(а): 1 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: C/C++
Всё шоколадно в принципе! Всё компилится! Посмотрел вот Makefile:
INCPATH = -I/usr/share/qt4/mkspecs/qws/linux-2Gimyprg-g++ -I. -I/usr/include/qt4 -I. -I. Тоесть путь к бинутилитам... точнее к самому компилятору для компиляции в реальной машине надо указать: /opt/OSELAS.Toolchain-2016.06.1/arm-v5te-linux-gnueabi/gcc-5.4.0-glibc-2.23-binutils-2.26-kernel-4.6-sanitized/bin/arm-v5te-linux-gnueabi-gcc По аналогии как я делал с MOXA: PREFIXPATH=/usr/local/arm-linux/bin CC=$(PREFIXPATH)/arm-linux-gcc Я правильно понял, если делать самодельный Makefile? Заранее Спасибо! Простите, что отвлекаю! И ещё... там с настройках QtCreator для витруальной машины увидел: в Инструменты/Параметры/Сборка и запуск/Комплекты/2Gi(по умолчанию)/Тип устройства/Обычное Linux устройство Я понимаю, что это для нормальной работы(компиляции). Но если правильно понимаю будут доступны и другие применения (для других устройств - не SMH-2Gi). Это так же мне доступно??? |
02.02.2017, 11:59 | #16 |
Уволен из Сегнетикс
Регистрация: Nov 2015
Адрес: CПб/ВЛГ
Сообщения: 0
Благодарил(а): 0 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: C/C++
Для контроллера Trim5 почти всё то же самое, там только процессор другой, но принципы все те же и лоджик тоже поддерживает shmem.
__________________ В сегнетиксе не работаю с самого начала 2019 года. |
02.02.2017, 12:05 | #17 | |
Member
Регистрация: Jul 2016
Сообщения: 33
Благодарил(а): 1 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: C/C++
Цитата:
|
|
02.02.2017, 12:13 | #18 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 117
Благодарил(а): 15 раз(а)
Поблагодарили:
660 раз(а) в 604 сообщениях
|
Ответ: C/C++
Цитата:
Лично я что-то держу в виртуалках, что-то в параллельно установленных системах. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
02.02.2017, 12:13 | #19 |
Member
Регистрация: Jul 2016
Сообщения: 33
Благодарил(а): 1 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: C/C++
В принципе вопрос снят! Если не считать расшаренной памяти... пока механизм не понятен. Буду читать исходники из примеров. Возможно наткнусь на что-нибудь... или кто-то подскажет. Но моя задача в цехе что-то откомпилировать и запустить ну что-то типа "Привет" в SSH сессии... чисто для проверки пригодности компилятора для реальной машины (не виртуальной).
Спасибо!!! |
02.02.2017, 13:05 | #20 | |
Member
Регистрация: Jul 2016
Сообщения: 33
Благодарил(а): 1 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: C/C++
Цитата:
WinXP+Keil+Jlink(USB) - отлично; WinXP+Step7+USB-SETIAL - отлично; WinXP+CodeSys+USB-SERIAL - отлично; WinXP+VisualStudio2005(2010)+Ethernet(вообще сетевой мост) - отлично. Возможно USB-Mastorage - на скорость не смотрел Но это чисто моё мнение. Извините. |
|
02.02.2017, 14:20 | #21 |
Member
Регистрация: Jul 2016
Сообщения: 33
Благодарил(а): 1 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: C/C++
Простите, ещё раз отвлеку!
На виртуальной машине понятно, что всё настроено и работает. Вчера установил toolchain на реальную машину, собрал проект (громко очень - тест). Откомпилировал... Специально для того чтобы по ssh сессии его закинуть в устройство и запустить. Должно только вывести в консоли одно слово "test" с переводом строки. Понятное дело откомпилил для ARM и проверить возможности нет в связи с временной недоступности устройства... точно для этого устройства откомпилировал или нет? Может в Makefile что-то не сделал. Вот Makefile по моему шаблону: Код:
########################### # Simple Generic Makefile # ########################### #CC=terminal-gcc #CC=gcc PREFIXPATH=/opt/OSELAS.Toolchain-2016.06.1/arm-v5te-linux-gnueabi/gcc-5.4.0-glibc-2.23-binutils-2.26-kernel-4.6-sanitized/bin CC=$(PREFIXPATH)/arm-v5te-linux-gnueabi-gcc #PREFIXPATH=/usr/local/arm-linux/bin #CC=$(PREFIXPATH)/arm-linux-gcc #STRIP=$(PREFIXPATH)/arm-linux-strip #NAME=proxy CFLAGS=-c -Wall LDFLAGS=-lpthread #SOURCES=*.c SOURCES=$(shell ls *.cpp) OBJECTS=$(SOURCES:.cpp=.o) EXECUTABLE=tdemo all: $(SOURCES) $(EXECUTABLE) $(EXECUTABLE): $(OBJECTS) $(CC) $(LDFLAGS) $(OBJECTS) -o $@ .cpp.o: $(CC) $(CFLAGS) $< -o $@ install: install -m 0755 $(EXECUTABLE) $(HOME)/local/bin clean: rm -rf *o $(EXECUTABLE) Собственно архив прилагается. |