Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: BusyBox для чайника
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Linux
Огурцов
В общем, придумал я себе новую, весьма интересную задачу - разработку приложения "Hello world" для какого-нибудь 32-битного проца. К которой давно присматривался, но все никак не хватало смелости. Но надо же когда-то начинать). Поскольку знаний примерно ноль, процесс пойдет мучительно, на что не обращайте внимания.

Из каких-то смутных соображений выбран cygwin http://cygwin.com/ для среды разработки, macraigor http://www.macraigor.com/full_gnu.htm для компиляторов и отладчиков, и busybox http://busybox.net/ в качестве платформы для моего приложения, исходники которого я уже украл отсюда http://busybox.net/~landley/ols2006.

Конечно, м.б. есть более простой путь для любителя Windows, но я его пока не нашел. А пока все это скачивается-перекачивается, появилась первая затыка - cygwin не запускается, вываливается с сообщением "cygintl-8.dll не был найден". Cygwin с дефолтовыми установками сначала скачивался на локальный диск, а затем устанавливался. Сейчас решил перезалить полную версию - может быть это поможет.
?ELF
Цитата(Огурцов @ Oct 30 2008, 09:42) *
Конечно, м.б. есть более простой путь для любителя Windows, но я его пока не нашел.

Попробуйте связку Windows + QEMU (если планируете писать "Hello, World" не только для x86 платформ ) + Linux (на виртуальной машине под QEMU + BusyBox там же).

Или Windows + VirtualBox (или VMware Workstation или VMware Server) + Linux (на виртуальной машине + BusyBox там же).

---
С такими вещами, как busybox, по-моему, лучше разбираться и работать в их родной среде -- Linux --> *nix.
Может, поначалу, всё покажется сложным и непривычным.
Но "оно того стоит". smile.gif
Огурцов
"Hello, World" - только не для x86.
Линухи (пока) живут под VMware. В принципе, под qnXы, линуХы, etc есть отдельный диск. Если (вдруг) под линухом окажется так же удобно работать, как под win, может быть переберусь под него. Вопросы лицензионности win в даннном случае не критерий - все куплено.
Почитал про QEMU - возможно да, попробую. Пока нужно как-то запустить Cygwin.
На днях поставил несколько линухов, больше всего понравился ubuntu. Но GCC и иже с ним в ubuntu я не нашел.
Огурцов
Вот тут подсказали, что GCC в Ubuntu есть. Он и правда запускается, хотя файло я не нашел. Наверно так же, как и с пингом и трейсроутом - файло отсутствует, а пинговать можно. Шаманы.
Вот еще дали линку на IDE http://www.codeblocks.org/downloads/5 - судя по картинкам - то, что надо.
Огурцов
Не успеваю качать. Вот еще линка, должно быть интересная http://monodevelop.com/Main_Page - похоже система аля MS FrameWork+C#
mdmitry
Цитата(Огурцов @ Nov 2 2008, 05:06) *
Вот тут подсказали, что GCC в Ubuntu есть. Он и правда запускается, хотя файло я не нашел. Наверно так же, как и с пингом и трейсроутом - файло отсутствует, а пинговать можно. Шаманы.

Изучите содержимое каталогов:
/bin; /usr/bin; /sbin, есть еще интересные каталоги. Шаманство пройдет. Документация по GCC вполне достаточная для работы. Полезно прочитать руководство по make.
Для KDE среда разработки Kdevelop часто используется.
Огурцов
Против шаманства нужно было установить пакет build-essential.
Mono тоже с бубном устанавливался - на сайте в хелпе sudo apt-get install monodevelop, а в реале -
mono mono-gmcs mono-gac mono-utils monodevelop monodoc-browser monodevelop-nunit monodevelop-versioncontrol
Вот еще пара линков, как его ставить:
http://www.mono-project.com/Other_Download...cial_Packages_2
http://directhex.mfgames.com/hardy.html

Еще одно IDE: http://www.eclipse.org/ - вроде бы ничотак, но тормозит. И пока только жаба. Как подключить C++, а тем более дргие платформы еще не понял.

Другими словами, сейчас компилится и пущается _из под IDE_ GCC, C#, JAVA.
Но есть затыка. Как в линухе запускают приложения с консоли ? Т.е. получился, например, файл demo (тип исполняемый) в каталоге demo/bin/Debug с атрибутами -rwxr-xr-x 1 username username 7203 дата время. Какое нужно заклятие, чтобы он запустился ?
mdmitry
Цитата(Огурцов @ Nov 5 2008, 20:51) *
Еще одно IDE: http://www.eclipse.org/ - вроде бы ничотак, но тормозит. И пока только жаба. Как подключить C++, а тем более дргие платформы еще не понял.


Есть ветка GNU, Eclipse и др., где Eclipse обсуждается. Прикручивается любой компилятор с помощью makefile.

Цитата
Другими словами, сейчас компилится и пущается _из под IDE_ GCC, C#, JAVA.
Как в линухе запускают приложения с консоли ? Т.е. получился, например, файл demo (тип исполняемый) в каталоге demo/bin/Debug с атрибутами -rwxr-xr-x 1 username username 7203 дата время. Какое нужно заклятие, чтобы он запустился ?

Атрибуты файла можно выставить через makefile. В нем можно указать необходимые команды для обработки.

./demo - запуск из текущего каталога, но надо иметь права на запуск у пользователя.

В общем любая книга по Linux/Unix в помощь. (или RTFM smile.gif )
Огурцов
Цитата(mdmitry @ Nov 5 2008, 18:14) *
./demo - запуск из текущего каталога, но надо иметь права на запуск у пользователя.

О! Персональное спасибо! Буду сегодня спать спокойно - сабж заработал. Полдела сделано. Теперь начинается вторая половина - чтобы оно заработало на таргете.

Цитата(mdmitry @ Nov 5 2008, 18:14) *
В общем любая книга по Linux/Unix в помощь. (или RTFM smile.gif )

RTFM - как много в этом звуке...
Огурцов
Hello World в Cygwin
http://www.e-zine.excode.ru/online/2/cygwi...in_windows.html


Битва продолжается:
Цитата
$ ./gcc.exe hello_world.c -o hello_world.exe
gcc: error trying to exec 'cc1': execvp: No such file or directory

Вообще, cc1.exe есть, но в другой папке - нужно наверно как-то конфигурировать. В makefile`ах такого параметра (еще) не видел.
Огурцов
Интересный документик: cygwin/usr/local/info/configure.info Наихудшие опасения про иксы подтверждаются. Если не превзойдены.
mdmitry
Код

./gcc.exe hello_world.c -o hello_world.exe

Это не запуск make, это руками. "Штатное" использование make: make или make makefile и возможно указание цели запуска (make all; make clean и др.) Найдите в примерах makefile и отредактируйте под свою задачу. В Winavr есть хороший пример для сборки. О работе make были обсуждения в ветке про GNU tools.
andrew_b
Цитата(Огурцов @ Nov 11 2008, 00:51) *
Интересный документик: cygwin/usr/local/info/configure.info Наихудшие опасения про иксы подтверждаются. Если не превзойдены.
А что такое?
Огурцов
Чувствую себя полным дауном )


Цитата(mdmitry @ Nov 11 2008, 12:21) *
Это не запуск make, это руками.

Эт понятно. Не понятно, можно ли в makefile прописать пути или это нужно делать через configure ? Пока я вижу решение в лоб - выкинуть дефолтовый gcc&co и заменить на кросс.
Огурцов
Заменил оригинальные файлы на кроссовые - gcc уже работает. Не работает ld:
Цитата
ld: crti.o: No such file: No such file or directory

Интересно, что crti.o вообще нет никакого в cygwin, хотя поставил вроде бы весь. Нашел его в баунти-8.0.4, но он, вероятно, для i386. Нашел crti.S в uClibc, как собриать - не известно, под cygwin (уже?) не собирается.
mdmitry
Цитата(Огурцов @ Nov 12 2008, 13:18) *
Заменил оригинальные файлы на кроссовые - gcc уже работает. Не работает ld:

Интересно, что crti.o вообще нет никакого в cygwin, хотя поставил вроде бы весь. Нашел его в баунти-8.0.4, но он, вероятно, для i386. Нашел crti.S в uClibc, как собриать - не известно, под cygwin (уже?) не собирается.

Правильно устанавливать кросс-компилятор, а не менять.
Задачу проясните поподробнее. Например, 32-бит ARM9, для которого есть кросс-средства. Если просто под linux что-то писать, то логичнее под ним все и делать. Практически в любом дистрибутиве идут средства разработки для используемой платформы.
uClibc это системная библиотека, ориентированная на микроконтроллеры.
Rst7
Цитата
Нашел crti.S


Ооо, да, большая буква S smile.gif

Когда хелловорлд надоест и задумаете собрать ядро линуха для Вашего таргета под цигвином, будете весьма огорчены - изобретатели тамошнего (линухового) процесса сборки решили, что будет нифигово иметь файлы .S и .s - конечно, для винды (и цигвина) это один и тот же файл, и как следствие - ничего не собирается. Я понасиловал make-файл пару дней на предмет избавления от регистрозависимости да так и бросил.

Это так, информация к размышлению...
mdmitry
Цитата(Rst7 @ Nov 12 2008, 14:28) *
Когда хелловорлд надоест и задумаете собрать ядро линуха для Вашего таргета под цигвином, будете весьма огорчены - изобретатели тамошнего (линухового) процесса сборки решили, что будет нифигово иметь файлы .S и .s - конечно, для винды (и цигвина) это один и тот же файл, и как следствие - ничего не собирается. Я понасиловал make-файл пару дней на предмет избавления от регистрозависимости да так и бросил.

Это так, информация к размышлению...

Полностью присоединяюсь к высказыванию, опыт был печальный при переносе с win на linux в названиях заголовочных файлов из стандартной библиотеки.
amw
Цитата(Огурцов @ Nov 12 2008, 12:18) *
Заменил оригинальные файлы на кроссовые - gcc уже работает. Не работает ld:

Интересно, что crti.o вообще нет никакого в cygwin, хотя поставил вроде бы весь. Нашел его в баунти-8.0.4, но он, вероятно, для i386. Нашел crti.S в uClibc, как собриать - не известно, под cygwin (уже?) не собирается.

Боюсь, Вы вообще не туда копаете.
Для компиляции программы gcc нужны ВСЕ ЕГО части + GLIBC для той-же платформы (это как минимум)
Под чем компилировать - вопрос отдельный, но не забывайте, что cygwin - это ЭМУЛЯТОР unix environment и он, естественно хуже чем unix. В том числе и Linux.
Если хотите программу под Windows/Cygwin - используйте то, что идет в самом Cygwin. Часто в Cygwin идут еще и MinGW. Иногда они конфликтуют.
Если хотите программу под, скажем, ARM9 Linux, то Вам НУЖЕН ПОЛНЫЙ кросскомпилятор GCC + GLIBC для ЭТОЙ платформы.
Он как правило имеет имя arm-linux-gcc, или arm-unknown-linux-gcc, или arm-uclibc-linux-gcc и тп.
Вместо GLIBC можно использовать uClibc или newlib.
Файл crt0.o - это часть libc (glibc, uClibc, newlib). libc должна быть скомпилирована ТЕМ ЖЕ компилятором, которым Вы компилируете программу.

Так что возмите КРОСС-компилятор для ARM9 ПОЛНОСТЬЮ.
Не знаю, есть ли такие под cygwin.

crt0.S - исходник на ассемблере требующий препроцессинга.
crt0.s - исходник на ассемблере после препроцессинга. Получают его из crt0.S. Примерно так
Код
gcc -E crt0.S -o crt0.s

В cygwin у Вас будут с этим проблемы. Часто неразрешимие. Потому как компилятор по регистру буквы (S или s) решает что с ним делать. На мелких проектах с малым количеством таких файлов можно долго и нудно править Makefile. На большых (с большим количеством таких файлов) - все равно не удастся отследить все проблемы.

Раз у Вас есть Linux в VMWare, то рекомендую там все и делать. Разумеется кросскомпиляторов в Ubuntu нет. Только родные.
Обычно в Linux компиляторы, и прочие программы нужные программисту не ставятся по умолчанию. Нужно доставить пакеты. Особенно пакеты в имени которых есть -dev. Это Development пакет, то есть содержищий заголовочные файлы, библиотеки с отладочной инфой, файлы crt0.o smile.gif и пр. нужное для компиляции.
vshemm
Кросскомпилятор ARM под цигвином есть: http://www.gnuarm.com/files.html
А тут описывается как его собирать: http://www.gnuarm.com/support.html
Rst7
Цитата
Кросскомпилятор ARM под цигвином есть


Да гцц собирается. Ядро - хрен.
Огурцов
Цитата(mdmitry @ Nov 12 2008, 10:47) *
Правильно устанавливать кросс-компилятор, а не менять.
Задачу проясните поподробнее. Например, 32-бит ARM9, для которого есть кросс-средства.

Ну да, согласен. Только это типа "хорошо быть богатым и здоровым".
Кросстулзов уже перепробавал. В частности, под Cygwin ставил Macraigor GNU Tools Suite for ARM. Но работает пока лишь так, как я написал выше.

Цитата(mdmitry @ Nov 12 2008, 10:47) *
Если просто под linux что-то писать, то логичнее под ним все и делать

Если бы. Таргет - в сабже. Писать что либо под ним в принципе нельзя. Или в лучшем случае это будет еще один круг в обход непосредственной цели - писать программу.

Как вариант "полноценного" линуса - баунти 8.04, под виртуальной машиной. Может, конечно, есть что-то и лучше, но этот первый и единственный, который поставился и работает так, как я от него ожидал.


Цитата(Rst7 @ Nov 12 2008, 11:28) *
Ооо, да, большая буква S

Да, грабельки. Жаль, но cygwin был бы более удобен, т.к. у него файловая система доступна через win, а значит доступны все привычные тулзы.


Цитата(amw @ Nov 12 2008, 12:32) *
Боюсь, Вы вообще не туда копаете.

Ага. Пока я не знаю, куда копать, поэтому копаю во все стороны.

Цитата(amw @ Nov 12 2008, 12:32) *
Код
gcc -E crt0.S -o crt0.s

Работает )


Цитата(vshemm @ Nov 12 2008, 14:23) *

О, да, наверно весьма полезный линк.
Огурцов
Цитата(vshemm @ Nov 12 2008, 14:23) *
Кросскомпилятор ARM под цигвином есть: http://www.gnuarm.com/files.html

Правильный компилер - поставился и скомпилил с полпинка, с нескольких пинков связал. yeah.gif

Сейчас вопрос с MIPSом. Если нечто подобно-рабочее для MIPSа ? С Macraigor`ом, как я понял, не все в порядке - вероятно, нужно его настраивать неподеццки.
У меня есть какой-то кросстулз, но там все файлы типа elf (внутри файла). Реально ли их запустить под тем же cygwin ?
amw
Цитата(Огурцов @ Nov 13 2008, 00:13) *
Если бы. Таргет - в сабже.

В саббже нет таргета. там только есть слово BusyBox. А это не платформа. Это всего лиш просто программа. Можно его скомпилить для любой (почти) платформы.
Цитата(Огурцов @ Nov 13 2008, 09:29) *
Правильный компилер - поставился и скомпилил с полпинка, с нескольких пинков связал. yeah.gif

Сейчас вопрос с MIPSом. Если нечто подобно-рабочее для MIPSа ? С Macraigor`ом, как я понял, не все в порядке - вероятно, нужно его настраивать неподеццки.

Если у Вас таки MIPS платформа (и как я понимаю это MIPS Linux) то Вам может стоит посмотреть тут?
MIPS SDE Lite. http://www.mips.com/products/software-tools/ Пользуюсь немного. Это mips-elf таргет - для "софта без ОС".
И тут само собой. http://www.linux-mips.org/wiki/Main_Page
Для mips-linux мы используем собранный производителем процессора компилятор (текущий gcc-4.2) под Linux host.
Cygwin не пользуем.
Цитата
У меня есть какой-то кросстулз, но там все файлы типа elf (внутри файла). Реально ли их запустить под тем же cygwin ?

Нет. Cygwin эмулирует ТОЛЬКО окружение. Бинарная платформа PE (exe файлы, внутри MZ smile.gif ) Это скорее всего под Линукс host.
Огурцов
Цитата(amw @ Nov 13 2008, 20:16) *
В саббже нет таргета. там только есть слово BusyBox.

Это (не?)переводимая игра слов. В общем, BusyBox - ключевое слово, а платформы - пока нет. Или так: а платформы пока нет. Ищу, в общем.

Цитата(amw @ Nov 13 2008, 20:16) *
Если у Вас таки MIPS платформа (и как я понимаю это MIPS Linux) то Вам может стоит посмотреть тут?

Да, и я что-то даже качал. Но спасибо, что напомнили, в ворохе ссылок - попробую по второму кругу.
VDV
кто-нибудь пробовал отправить сообщение через sendmail в busybox-е?

пишу строку (отправить с одного ящика на mail.ru на другой там же)
cat email.txt | sendmail -w 20 -S smtp.mail.ru -f from@mail.ru -aulogin -appass to@mail.ru

или
<email.txt sendmail -w 20 -S smtp.mail.ru -f from@mail.ru -aulogin -appass to@mail.ru

в файле email.txt написано
test email

ни в какую не хочет слать.
сниффером вижу, коннект есть, логин проходит, а дальше не шлются данные.
залез в исходник посмотреть, все равно не понимаю, чего ему не хватает....

версия: busybox 14.3
судя по коду должен передать поля To, затем послать DATA, затем поток stdin, пока не кончится

Цитата
> 2009/11/17 11:12:54.714149 length=6 from=0 to=5
NOOP\r
< 2009/11/17 11:12:54.733175 length=51 from=0 to=50
220 mail.ru ESMTP Tue, 17 Nov 2009 21:12:54 +0300\r
< 2009/11/17 11:12:54.737410 length=8 from=51 to=58
250 OK\r
> 2009/11/17 11:12:54.741252 length=11 from=6 to=16
EHLO none\r
< 2009/11/17 11:12:54.765051 length=118 from=59 to=176
250-mx75.mail.ru Hello none [195.131.192.186]\r
250-SIZE 31457280\r
250-8BITMIME\r
250-AUTH PLAIN LOGIN\r
250 PIPELINING\r
> 2009/11/17 11:12:54.773122 length=12 from=17 to=28
AUTH LOGIN\r
< 2009/11/17 11:12:54.796860 length=18 from=177 to=194
334 ...\r
> 2009/11/17 11:12:54.800690 length=10 from=29 to=38
....\r
< 2009/11/17 11:12:54.824892 length=18 from=195 to=212
334 ....\r
> 2009/11/17 11:12:54.828494 length=14 from=39 to=52
....\r
< 2009/11/17 11:12:54.861185 length=30 from=213 to=242
235 Authentication succeeded\r
> 2009/11/17 11:12:54.865406 length=26 from=53 to=78
MAIL FROM:<from@mail.ru>\r
< 2009/11/17 11:12:54.888926 length=8 from=243 to=250
250 OK\r
> 2009/11/17 11:12:54.900589 length=3 from=79 to=81
.\r
< 2009/11/17 11:12:54.924854 length=26 from=251 to=276
500 unrecognized command\r
sendmail: . failed
alpha:/ # < 2009/11/17 11:12:54.953403 length=40 from=277 to=316
421 mx75.mail.ru lost input connection\r
VDV
разобрался все-таки!

#!/bin/sh

cat << EOF | sendmail -w 20 -S smtp.server.adr:port -f from@mail.addr -auLOGIN -apPASS to@mail.addr

my message
EOF

Логин и пароль вводятся после -au и -ap без пробела.
Перед сообщением обязательна пустая строка!
После EOF обязателен перевод строки!
dronT78
Попробуйте Tiny Core Linux под x86 с блекджеком и шлюхами BusyBox и "менеджером пакетов". Полученный опыт должен портироваться под любую архитектуру.
DRUID3
Цитата(dronT78 @ Dec 31 2009, 13:53) *
Попробуйте Tiny Core Linux под x86 с

Блин... как-то раньше мимо него проходил. Дистрибутив - супер! Ничего лишнего, как говорится... Вот только ядро они не правильное выбрали... Хотя сколько там его пересобирать... За напоминание о том что есть такой дистр - спасибо!!!

Цитата(dronT78 @ Dec 31 2009, 13:53) *
блекджеком и шлюхами

Бендер? biggrin.gif (не Остап)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.