|
|
  |
Linux начинающему |
|
|
|
Aug 22 2013, 17:59
|
Профессионал
    
Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439

|
Цитата(berkl @ Jun 27 2013, 11:26)  Виртуальную машину поставить не самая трудная задача, могу и на старенький комп поставить UBuntu в качестве основной операционки. Мне всё ж не понятно обязателено ли софт под линуксовую плату пишется на компе из под Линукса? Если да то почему, просто хочу понять. Если например, мы имеем дело с FreeRTOS, то нет разницы на чем установлена среда Eclipse c компилятором GCC- Линукс, Винда - неважно. Но как дело доходит до Линуксового девайса, так всё, только на Линуксе, если под Линукс. Спасибо всем, кто откликается на мои дурацкие вопросы  ! Линукс среда имеет конфигурацию, которая учитывается при компилировании. Например пути к инклудам и библиотекам. Но если влом поставить виртуальную машину, то поставьте Cygwin и через его терминал и в его конфигурации все будет как на Линуксе. Кстати множество пакетов на Винде работают под Cygwin. Цитата(andrewlekar @ Jun 27 2013, 11:53)  В общем да, обязательно ставить линукс для разработки. Винда, увы, не слишком для этого приспособлена: нет пакетного менеджера, нет мейка, нет стандартных линуксовых путей, нет баша. Почти весь опенсорс заточен под сборку мейком как минимум. Можно использовать cygwin или mingw, но это как секс в гамаке и линукс для разработчика - это практически стандарт. Cygwin имеет все это. При установке надо выбрать нужные пакеты. А если не выбрали не беда. Потом запустить сетап апликацию (ты же самую что и для установки) и довыбрать все необходимое. Цитата(sasamy @ Aug 7 2013, 11:02)  Я бы как раз с TI связываться не стал - SDK, особенно драйверы ядра Linux левой ногой писаны. Из мощных процессоров на ARM у Freescale серия i.mx6 - лучше нее ничего не встретишь на рынке , а для мелочевки есть Vybrid - тут скорость и фичастость ядра Linux + реалтайм MQX в одном флаконе http://www.freescale.com/webapp/sps/site/p....jsp?code=VF6xxРаньше они использовали LTIB в качестве BSP, сейчас вовремя одумались и перешли на Yocto, собственно Arago у TI - те же я-ца только в профиль. А мне TI больше нравится чем Freescale. Да и документация у них понятнее. Кстати Cortex A9 они раньше сделали чем Freescale iMX6X. -------------
Сообщение отредактировал Tarbal - Aug 22 2013, 17:48
|
|
|
|
|
Aug 27 2013, 11:56
|
Частый гость
 
Группа: Участник
Сообщений: 123
Регистрация: 22-03-10
Пользователь №: 56 115

|
Здравия, Поставил Убунту и на неё Eclipse CDT+gcc, ковыряюсь потихоньку. Решил для начала запустить Модбас клиента поверх TCP. Надёргал из своего старого проекта под ПИК имплементацию клиента. Запустил, чё та работает. Но не понятная вещь возникает. Клиент (он же мой комп) зачем то дублирует ACK'и и свою же команду. Это зачем он ? В скриншоте видно, чёрные строчки. Запускал с ModbusPoll Master, под Виндой, там всё хорошо. Кстати, где можно взять готовую модбасную тестилку под Убунту? Решил пока посмотреть в Интернете халявные библиотеки Модбаса под Линукс. Приглянулась вот эта http://libmodbus.org/ Но как её скрестить с моим Eclips'ом? Документация там, есть, но явно расчитана на уверенного линуксоида http://libmodbus.org/site_media/html/libmodbus.html . Непонятно также что значит Stable release is libmodbus v3.0.4 (2013-05-08) и Development release is libmodbus v3.1.0 (2012-06-22), вот здесь http://libmodbus.org/download/. Мне та какой релиз надо ? И дальше там ссылки на релизы под разные дистрибутивы Линукса, в том числе и под мою Убунту http://packages.ubuntu.com/search?keywords=libmodbus. Там ваще ничего не понятно. Если кто имел дело с этой либой дайте ссылочку плз почитать, ну или на пальцах объясните с какого краю подступится к ней. Заранее благодарен. Цитата(Tarbal @ Aug 22 2013, 20:59)  А мне TI больше нравится чем Freescale. Да и документация у них понятнее. Кстати Cortex A9 они раньше сделали чем Freescale iMX6X.
------------- А вот скажите, нафига мне документация на контроллер, если я к нему обращаюсь через библиотеки, драйвера Линукса?
Эскизы прикрепленных изображений
|
|
|
|
|
Aug 27 2013, 13:16
|
Профессионал
    
Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439

|
--- Цитата(A. Fig Lee @ Aug 27 2013, 16:07)  Stable надо брать. Там баги исправлены. Во втором случае версию с большим номером, которая -dev (в верхней половине).
Это дело распаковывается, там должен быть файл README, может быть INSTALL. Их читать.
Традиционный путь компиляции подобных вещей на Унихах: $./configure $make $sudo make install
configure может иметь опции, надо запускать ./configure --help все опции напечатает Все верно. Однако зачастую при компиляции на стадии ./configure появляются сообщения об ошибках. Мол отсутствует пакет. В большинстве случаев это стандартная библиотека. В таком случае надо поступить следующим образом: допустим отсутствует библиотека bison. apt-cache search bison изучите список программ и установите то, что подходит при помощи команды sudo apt-get install имя_из_списка_предыдущей_команды По мере поступления проблем спрашивайте.
Сообщение отредактировал Tarbal - Aug 27 2013, 13:15
|
|
|
|
|
Aug 28 2013, 06:54
|

Частый гость
 
Группа: Участник
Сообщений: 136
Регистрация: 7-01-09
Из: Нефтеюганск
Пользователь №: 42 967

|
Цитата(A. Fig Lee @ Aug 27 2013, 18:07)  Традиционный путь компиляции подобных вещей на Унихах: $./configure $make $sudo make install И всего за пять минут настроенная система превращается в тыкву слакварь. Если даже не хочется разбираться с тем, как создавать пакеты для своего дистрибутива, то есть ведь ещё и checkinstall
--------------------
С уважением, Алексей Шапошников.
|
|
|
|
|
Aug 28 2013, 09:47
|
Частый гость
 
Группа: Участник
Сообщений: 123
Регистрация: 22-03-10
Пользователь №: 56 115

|
Цитата(Tarbal @ Aug 27 2013, 16:16)  ---
Все верно. Однако зачастую при компиляции на стадии ./configure появляются сообщения об ошибках. Мол отсутствует пакет. В большинстве случаев это стандартная библиотека. В таком случае надо поступить следующим образом: допустим отсутствует библиотека bison. apt-cache search bison
изучите список программ и установите то, что подходит при помощи команды sudo apt-get install имя_из_списка_предыдущей_команды
По мере поступления проблем спрашивайте. Спасибо за поддержку Да, есть Readme, либа встала, была только маленькая заминка, надо было доставить autogen в убунту. Есть там готовые примеры, которые предлагают откомпилировать из коммандной строки. Попробовал - получилось. Но вот из Эклипса компильнуть не получается. Линкер не видит библиотечные функции, хотя в modbus.h они присутствуют. Почему не видит ? Собственно тестовый проектик: Код #include <modbus/modbus-rtu.h> #include <modbus/modbus.h>
#include "unit-test.h"
int main(void) { modbus_t *mb; uint16_t tab_reg[32];
mb = modbus_new_tcp("127.0.0.1", 1502); modbus_connect(mb);
/* Read 5 registers from the address 0 */ modbus_read_registers(mb, 0, 5, tab_reg);
modbus_close(mb); modbus_free(mb);
while(1); } Ошибки: "undefined reference to `modbus_new_tcp' " " undefined reference to `modbus_connect' " " undefined reference to `modbus_read_registers' " "undefined reference to `modbus_close' " "undefined reference to `modbus_free' " С уважением.
|
|
|
|
|
Aug 28 2013, 11:44
|

Частый гость
 
Группа: Участник
Сообщений: 136
Регистрация: 7-01-09
Из: Нефтеюганск
Пользователь №: 42 967

|
Цитата(berkl @ Aug 27 2013, 17:56)  Непонятно также что значит Stable release is libmodbus v3.0.4 (2013-05-08) и Development release is libmodbus v3.1.0 (2012-06-22), вот здесь http://libmodbus.org/download/. Мне та какой релиз надо ? Да, кстати: Код ╭─alexey@warrawoona ~ ╰─$ apt-cache search modbus collectd-core - statistics collection and monitoring daemon (core system) libmodbus-dev - development files for the Modbus protocol library libmodbus5 - library for the Modbus protocol python-pymodbus - full Modbus protocol implementation Это debian unstable, в убунте эта библиотека тоже никуда не делась
--------------------
С уважением, Алексей Шапошников.
|
|
|
|
|
Aug 28 2013, 13:01
|
Частый гость
 
Группа: Участник
Сообщений: 123
Регистрация: 22-03-10
Пользователь №: 56 115

|
Цитата(mdmitry @ Aug 28 2013, 15:12)  Скорее всего Вы не указали в Eclipse пути к библиотекам, не входящим в тулчейн. По работе с Eclipse есть отдельный разрел в форуме. IMHO, лучше использовать makefile и при работе с Eclipse. Можно выбрать соответстующий вид проекта и собирать как в Eclipse, так и из командной строки. У Вас, судя по всему, уже есть необходимый makefile из примера. Путь к библиотеке есть, на скриншоте видно gcc обращается к libmodbus.so по прописанному пути, но не находит в ней нужных для компиляции функций  . В makefile соваться неумелыми ручками пока не охота, пускай Эклипс с ним возится. Пока...
Эскизы прикрепленных изображений
|
|
|
|
|
Aug 29 2013, 07:20
|
Частый гость
 
Группа: Участник
Сообщений: 123
Регистрация: 22-03-10
Пользователь №: 56 115

|
Допускаю, что не компилируется в Эклипсе из-за того что ему не дал необходимые опции компилятора и компоновщика. Взял команду "gcc ....." из библиотечного примера и переделал под себя. Компилируется. Вот собственно команда: gcc mb_test.c -o mbtest `pkg-config --libs --cflags libmodbus`Здесь видно, что компилятор берет информацию о местонахождении библиотеки libmodbus и её заголовочных файлов из libmodbus.pc файла, он в папке /usr/local/lib. Также в .pc файле мы найдем дополнительные опции компилятора и компоновщика. вот содержимое моего .pc файла: prefix=/usr/local exec_prefix=${prefix} libdir=${exec_prefix}/lib includedir=${prefix}/include Name: modbus Description: Modbus library Version: 3.0.4 Libs: -L${libdir} -lmodbus Cflags: -I${includedir}/modbus Теперь поправьте меня если я не прав. Понятно, что моему эклипсу содержимое файла libmodbus.pc никто не показывал, поэтому путь к библиотеке мы указываем в настройках проекта (Project-> Properies-> Paths and Symbols-> Library Paths-> "/usr/local/lib"), а заголовочный файл указываем в исходнике ( #include <modbus/modbus.h> ). Но остаются дополнительные опции компилятора и линкера, они должны быть тоже прописаны в настройках эклипса. Если я прав, то вопрос: как это сделать в этом, конкретном примере ? Вопрос может не совсем к этой ветке относится, но заново объяснять проблему в другой ветке будет не правильно, наверное. Спасибо Update. Скомпилировалось. В опциях линкера надо указывать не только путь к либам (-L) но и собственно названия используемых библиотек (-l). Намучился по глупости, но зато поумнел трохи Всем Спасибо !!!
Сообщение отредактировал berkl - Aug 29 2013, 07:53
|
|
|
|
|
Sep 13 2013, 06:36
|
Частый гость
 
Группа: Участник
Сообщений: 123
Регистрация: 22-03-10
Пользователь №: 56 115

|
Цитата(A. Fig Lee @ Aug 27 2013, 16:07)  Это дело распаковывается, там должен быть файл README, может быть INSTALL. Их читать.
Традиционный путь компиляции подобных вещей на Унихах: $./configure $make $sudo make install
configure может иметь опции, надо запускать ./configure --help все опции напечатает Именно это описано в README. А если надо собрать эту же библиотеку, но для использования в приложениях под какой-нибудь ARM ? Как тогда её собирать, устанавливать ?
|
|
|
|
|
Sep 13 2013, 11:45
|

Знающий
   
Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467

|
Цитата(berkl @ Sep 13 2013, 02:36)  Именно это описано в README. А если надо собрать эту же библиотеку, но для использования в приложениях под какой-нибудь ARM ? Как тогда её собирать, устанавливать ? А "под какой нибудь АРМ" с налета может не получится. Надо иметь кросс компайлер (например, CodeSourcery) и компилить против тех херед файлов и библиотек, которые будут на этой системе. Не факт что там теже хедеры, например. Но если чето широкораспостраненное, то если запустить ./configure --help Напечатает переменные, среди коих --target --build --host вот они и определяют чего куда где и для кого строить. Икзампл: ../../../binutils-2.23/configure --target=arm-none-eabi- --prefix=$HOME/bin --enable-interwork --enable-multilib
Сообщение отредактировал A. Fig Lee - Sep 13 2013, 12:21
--------------------
Верить нельзя никому, даже себе. Мне - можно.
|
|
|
|
|
Sep 13 2013, 12:12
|
Профессионал
    
Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439

|
Цитата(berkl @ Sep 13 2013, 10:36)  Именно это описано в README. А если надо собрать эту же библиотеку, но для использования в приложениях под какой-нибудь ARM ? Как тогда её собирать, устанавливать ? Можно воспользоваться сервисом http://www.timesys.com/Раньше они компилировали бесплатно. Не знаю если они делают это бесплатно до сих пор. Eсли у вас нету toolchain, где все уже настроено, то будет непросто. Во первых вам нужно установить кросс компилятор от Code Sourcery http://www.mentor.com/embedded-software/so...s/lite-edition/Tам будет префикс типа arm-none-linux-gnueabi- ко всем необходимым программам. У меня они называются вот так: arm-none-linux-gnueabi-addr2line arm-none-linux-gnueabi-ar arm-none-linux-gnueabi-as arm-none-linux-gnueabi-c++ arm-none-linux-gnueabi-cc arm-none-linux-gnueabi-c++filt arm-none-linux-gnueabi-cpp arm-none-linux-gnueabi-ct-ng.config arm-none-linux-gnueabi-g++ arm-none-linux-gnueabi-gcc arm-none-linux-gnueabi-gcc-4.4.4 arm-none-linux-gnueabi-gccbug arm-none-linux-gnueabi-gcov arm-none-linux-gnueabi-gdb arm-none-linux-gnueabi-gprof arm-none-linux-gnueabi-ld arm-none-linux-gnueabi-ldd arm-none-linux-gnueabi-nm arm-none-linux-gnueabi-objcopy arm-none-linux-gnueabi-objdump arm-none-linux-gnueabi-populate arm-none-linux-gnueabi-ranlib arm-none-linux-gnueabi-readelf arm-none-linux-gnueabi-run arm-none-linux-gnueabi-size arm-none-linux-gnueabi-strings arm-none-linux-gnueabi-strip Во вторых, надо будет установить все необходимые библиотеки под ARM в какую-нибудь директорию. В третьих создать директорию для установки результатов компиляции И наконец в четвертых вместо ./configure вы будете вынуждены указать параметры, описывающие все вышеназванные детали. Скрипт configure имеет необходимые ключи для указания вышеперечисленного. Возможно что-то надо указать через environment variables. Теперь, когда вам известно что надо делать, можно найти детали в интернете. Спасибо A. Fig Lee напомнил, что еще инклюды надо поставить.
Сообщение отредактировал Tarbal - Sep 13 2013, 12:07
|
|
|
|
|
Sep 19 2013, 09:42
|
Частый гость
 
Группа: Участник
Сообщений: 123
Регистрация: 22-03-10
Пользователь №: 56 115

|
Цитата(A. Fig Lee @ Sep 13 2013, 15:45)  А "под какой нибудь АРМ" с налета может не получится.
./configure --help
Напечатает переменные, среди коих --target --build --host вот они и определяют чего куда где и для кого строить. Цитата(Tarbal @ Sep 13 2013, 16:12)  Eсли у вас нету toolchain, где все уже настроено, то будет непросто.
Во первых вам нужно установить кросс компилятор от Code Sourcery
Во вторых, надо будет установить все необходимые библиотеки под ARM в какую-нибудь директорию.
В третьих создать директорию для установки результатов компиляции И наконец в четвертых вместо ./configure вы будете вынуждены указать параметры, описывающие все вышеназванные детали. Скрипт configure имеет необходимые ключи для указания вышеперечисленного. Возможно что-то надо указать через environment variables. Toolchain для платы есть, но не от Code Sourcery. Это- fsl-linaro-toolchain , уже стоИт. 1. Запустил "./configure --help", в описании есть ключи: Цитата System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] Значит для ключа host мне надо указать имя компилятора. Для теста попробовал в терминале Цитата ./configure --host=/usr/bin/gcc В результате получил ошибки: Цитата dim@dim-System-Product-Name:~/temp/libmodbus-3.0.4$ ./configure --host=/usr/bin/gcc checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for /usr/bin/gcc-strip... no checking for strip... strip checking for a thread-safe mkdir -p... /bin/mkdir -p checking for gawk... no checking for mawk... mawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking build system type... i686-pc-linux-gnu checking host system type... Invalid configuration `/usr/bin/gcc': machine `/usr/bin/gcc' not recognized configure: error: /bin/bash ./config.sub /usr/bin/gcc failed dim@dim-System-Product-Name:~/temp/libmodbus-3.0.4$ Что её не устраивает ? 2. Что указывать надо для ключа build ? В приложении то что выдал --help Update: Нашел, для ключа host указывается не само имя компилятора а его префикс. Если само имя компилятора указывать, то надо прописывать руками и имя линкёра и всё остальное, а-ля СС=arm-xxxx-gcc, LD=arm-xxxxx-ld.... Открыл MakeFile, созданный скриптом configure по умолчанию.Там нашел Цитата host = i686-pc-linux-gnu попробовал запустить в терминале Цитата ./configure --host=i686-pc-linux-gnu Вроде получилось. Что такое префикс компилятора и как его узнать ?
Сообщение отредактировал berkl - Sep 19 2013, 12:01
|
|
|
|
|
  |
4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0
|
|
|