Перейти к содержанию
    

"Hello, world!" под Olimex SAM9-L9260

Пробую работать с Linux на ARM9. После компиляции с помощью тулчейна от codesourcery (поставляется с платой) простейшего проекта "Hello, world!" (делаю все, как в pdf) получаю executable-файл. Копирую его через SSH в /home директорию борды. меняю права на "777" Не запускается. Пишет: "cannot execute binary file"

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пишет: "cannot execute binary file"
Либо бинарник неподдерживаемого формата (надо включать поддержку в ядре и перекомпилировать), либо вообще собран для другого процессора (хостового)... Покажите как компилировали, что вызывали и так далее... Если текста много, то воспользуйтесь http://pastebin.com

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Либо бинарник неподдерживаемого формата (надо включать поддержку в ядре и перекомпилировать),

Ядро перекомпиливал для поддержки стандарта EABI с возможностью запуска программ, использующих старый ABI

либо вообще собран для другого процессора (хостового)...

При просмотре откомпиленного бинарника в заголовке четко видно:

ELF, 32 bit LSB executable, ARM, version 1 (SYSV), dynamically linked, for GNU/Linux 2.6.14 not stripped

Т.е. тулчейн тот.

 

Покопавшись в дополнительных PDF от Codesourcery, выяснил, что либы, по-умолчкнию находящиеся в системе, для скомпиленных бинарников не подходят. А ошибка, вышеописанная мною, может возникать не только при неправильно скомпиленных executables, а и при:

 

" Note that if you specify an incorrect path for --dynamic-linker, the common failure mode

seen when running your application on the target is similar to

> ./hello

./hello: No such file or directory

"

(кстати, такая ошибка вылетала именно при запуске таким способом: ./hello

При запуске-же sh hello появлялось уведомление о невозможности запустить бинарник)

 

Поэтому по их совету скопировал либы из .../arm-none-linux-gnueabi/libc в ФС борды (но не в root-dir (/), а в /home с сохранением путей).

Линкую проект с использованием ключей:

 

-Wl,-rpath=sysroot/lib:sysroot/usr/lib \

-Wl,--dynamic-linker=sysroot/lib/ld-linux.so.3

(где sysroot - путь к скопированным либам. В моем случае - /home/arm-none-linux-gnueabi/libc)

 

После таких манипуляций получаю ошибку "Illegal instruction"

 

Пока все...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ядро перекомпиливал для поддержки стандарта EABI с возможностью запуска программ, использующих старый ABI

...

Ясно... Если нет соответствующих "либ", то работать, если не ошибаюсь, не должно... Какой дистрибутив Вы используете? (могу порекомендовать http://wiki.openembedded.net/index.php/Main_Page - вся система будет с одинаковым типом библиотек)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

имел дело с этой платой от Olimex. если не ошибаюсь, они не дают в комплекте исходники файловой системы. на мой взгляд правильный путь - собрать фс самому. это всегда хорошо. заодно не будет никакой проблемы несовместимости компилятора с библиотеками.

я собирал ядро - с сайта atmel (тулчейн от atmel), фс - от http://buildroot.uclibc.org/ (тулчейн от buildroot)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я собирал ядро - с сайта atmel (тулчейн от atmel), фс - от http://buildroot.uclibc.org/ (тулчейн от buildroot)
Каковы возможности этого buildroot? Например, с помощью http://www.openembedded.org можно одной командой разом собрать кросскомпилятор, все библиотеки, программы, и при этом оно само скачает исходники, упакует их в пакеты скомпилированное, сконфигурирует, сгенерирует файловую систему, одной строчкой в конфиге выбираешь libc или uclibc, упакует ее в разные форматы и типы ФС, само отработает зависимости пакетов, само ядро соберет, и так далее... Надо привыкать к лучшему... :rolleyes: ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Каковы возможности этого buildroot?

Возможностей в buildroot не меньше чем у openembedded, разве что две команды нужно а не одну :)

само отработает зависимости пакетов

весьма кстати сомнительный плюс.. и вообще если все вышеперчисленное плюсы - не проще готовые бинарники скачать ?

Надо привыкать к лучшему...

лучшее - враг хорошего. тормозит при сборке безбожно, тоже самое на buildroot собирается если не на порядки то в разы быстрей - точно. к тому же как я понял топикстартеру на 9260 gpe, opie и вообще графика не особо интересны...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

весьма кстати сомнительный плюс.. и вообще если все вышеперчисленное плюсы - не проще готовые бинарники скачать ?
Можно и бинарники, но речь идет о пакетах, которые устанавливаются при формировании файловой системы. Таким образом, система получается без пакетного менеджера, и это экономит много места, и при этом зависимости программ сама сборочная среда все-таки отслеживает. В последствии можно доустановить пакетный менеджер и эти же пакеты применить для установки... Buildroot такое может (если да, то надо будет изучить)? :)
лучшее - враг хорошего. тормозит при сборке безбожно, тоже самое на buildroot собирается если не на порядки то в разы быстрей - точно. к тому же как я понял топикстартеру на 9260 gpe, opie и вообще графика не особо интересны...
OpenEmbedded на питоне написана, поэтому так медленно. Однако, разработчики рекомендуют установить http://psyco.sourceforge.net/introduction.html "Think of Psyco as a kind of just-in-time (JIT) compiler" (есть в любом дистрибутиве) - скорость обработки реально повышается в разы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно и бинарники, но речь идет о пакетах, которые устанавливаются при формировании файловой системы. Таким образом, система получается без пакетного менеджера, и это экономит много места, и при этом зависимости программ сама сборочная среда все-таки отслеживает. В последствии можно доустановить пакетный менеджер и эти же пакеты применить для установки... Buildroot такое может (если да, то надо будет изучить)? :)OpenEmbedded на питоне написана, поэтому так медленно. Однако, разработчики рекомендуют установить http://psyco.sourceforge.net/introduction.html "Think of Psyco as a kind of just-in-time (JIT) compiler" (есть в любом дистрибутиве) - скорость обработки реально повышается в разы.

Лично мне вышеописанное не нужно, на момент сборки корневой фс я достаточно четко представляю что мне в будущей системе нужно и собираю только то что мне действительно нужно, впоследствии если что -то упустил создать новую фс с тем что уже собрано дело секунд десяти + новый пакет. по тому что вы описываете я как раз и говорю - сомнительные плюсы, зачем это все собирать самому ? есть ангстром, дебиан, рэдхат, есть например такая штука

http://amethyst.openembedded.net/~koen/narcissus/

есть проект T2 - похож чем-то на ОЕ - такой же неторопливый :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...