sangre 0 8 ноября, 2010 Опубликовано 8 ноября, 2010 · Жалоба есть плата at91sam9xeek, на ней установлен линукс, взятый с linux4sam, своя операционка - ubuntu 10.10 i386, задача для начала простая - написать hello world для платы. собственно привет мир написан, на убунте установлен arm-linux-gnueabi, еще собарил кросс компиляторы по известным схемам из нета. дальше, привет мир компилируется командой arm-linux-gnueabi-gcc, переписываю его на плату, запускаю из под рута, и тут он говорит что illegal instruction, это в одном случае, если при gcc указать ключ static, если без ключа, то segmentation fault. ежели компилировать кросс компилятором который собирал сам по известным схемам, то и компилить не хочет, сначала ему не хватало файла crti.o, потом crtbegin.o, после засовывания этих файлов в директорию с сишником он стал писать что cant find -lgcc, что это такое гугл не помог. я не работал с at91sam9, но я не верю что нельзя написать программу и не запустить на плате под линуксом, поэтому буду рад любым замечаниям что делаю не так, и рекомендациям по нахождению правильного пути. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
leen 0 8 ноября, 2010 Опубликовано 8 ноября, 2010 · Жалоба на убунте установлен arm-linux-gnueabi А этот arm-linux-gnueabi - тот же, которым собраны ядро и рутфс на плате? Когда осваивал linux from scratch, нагугливал, что если glibc у кросскомпилятора и у системы-цели разной сборки (даже если версия одна и та же), то как раз чаще всего и будет незапускаемый код. Поэтому я бы посоветовал найти набор кросстулз на linux4sam. А если Вы хотите делать свою сборку кросстулз, то и рутфс и ядро придется пересобирать. Это, правда, не относится к пересборке gcc и binutils, только к пересборке glibc. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sangre 0 9 ноября, 2010 Опубликовано 9 ноября, 2010 · Жалоба arm-linux-gnueabi это пакет установленный в убунте, уже после того как линукс был загружен в плату. на плате ангстром, который демонстративный на linux4sam. а перекомпилировывать ядро и фс наверно долгий процесс.... не хотелось так глубоко заседать, надеялся что лихим кавалерийским наскоком все поедет Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
leen 0 12 ноября, 2010 Опубликовано 12 ноября, 2010 · Жалоба У меня получилось запустить плату, собрав из исходников и glibc, и gcc, и ядро, и мир. Долго это было и сложно. Сейчас гляжу в сторону emdebian, у них вроде есть и тулчейны, и собранные пакеты под армы. Но еще не пробовал - придет плата, запущу - отпишусь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sangre 0 13 ноября, 2010 Опубликовано 13 ноября, 2010 · Жалоба а можно чуток поподробнее? как собиральсо ядро, как мир, как с загрузчиками, ссылки там, может свои комментарии? я сейчас штудирую LFS, долго уже мучаюсь но не получается. компилировал ядро, но оно не находит фс, при компиляции вроде вписывал ей, но не хочет его находить. листал OE, тоже вроде не все просто, но еще нужно не просто что бы все заработало, а что бы на большой машине писать и компилить, а на плате все это запускалось именно в линуксе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
leen 0 15 ноября, 2010 Опубликовано 15 ноября, 2010 · Жалоба Ссылка с описанием была весьмя старой и уже мертва, прикладываю хтмл-файл, ориентируясь на который, я собирал LFS. _______toolchain_____ARM__________Linux____AT91RM9200.htm К слову, собирать glibc (не uclibc, а полновесный glibc) лучше с поддержкой потоков nptl, а не linuxthreads, т.к. последние были на заре линукса и сейчас активно выпиливаются. ИМХО, LFS хорош для ознакомления с системой, узнать, что и откуда у нее растет. Но параллельно посоветовал бы подготовить инструментарий, позволяющий работать. В этом смысле хорош Emdebian. Вроде были и еще проекты, предоставляющие не просто тулчейн с компиленным ядром и небольшим рутом, но полноценные дистры. Пока не интересовался этим. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sangre 0 15 ноября, 2010 Опубликовано 15 ноября, 2010 · Жалоба благодарю, буду разбирать Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sangre 0 15 ноября, 2010 Опубликовано 15 ноября, 2010 · Жалоба в принципе ядро я собираю, но теперь проблема создать фс, с софтом на ней, и что бы ядро находило эту фс. ну и на машине собирать прогу а на плате что бы работала. собрал стандартное ядро и фс в ОЕ, получилось тоже что и на linux4sam, но что то это радости не принесло, не понятно как сделано и что сделано, как это использовать и как этим управлять Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
leen 0 16 ноября, 2010 Опубликовано 16 ноября, 2010 · Жалоба У меня рабочей является такая конфигурация (подсмотрено в слакваре): ядро с вкомипленной в него инит рам фс - так ядро занимает больше места, зато не надо по отдельности прогружать ядро и инитрд и указывать ядру на инитрд. Главное, чтобы в инитрамфс был файл инит. у меня это скрипт, делающий все необходимые манипуляции. Также в инитрамфс запихан статически собранный бизибокс с минимумом необходимого для монтирования микросд карточки, на которой создан основной рут. После загрузки ядро запускает процесс инит с инитрамфс. Инит, отработав, меняет рут на примонтированную микросд карту, запуская инит там. Инит на микросд запускает всех демонов и стартует шелл, привязанный к DBGU порту (/dev/ttyS0). Ну а из демонов - syslogd, sshd, mdev (вместо неповоротливого и прожорливого udev, входит в комплект бизибокса). Инит от инитрамфс. #!/bin/sh echo in initramfs echo # mount system fs mount /proc mount /sys mount /tmp mount /dev/pts mount /dev # get new devices echo /bin/mdev > /proc/sys/kernel/hotplug usleep 100000 mdev -s # find SD/MMC card # support work wuth mmcblk and mmcblk0p1 only if [ -r /dev/mmcblk0p1 ]; then # huge devices with partitions mount /dev/mmcblk0p1 /mmc elif [ -r /dev/mmcblk0 ]; then # little devices (my first 256 MB microSD) mount /dev/mmcblk0 /mmc else echo "no SD/MMC card found!" /bin/sh --login #start shell fi echo outting initramfs exec switch_root /mmc /linuxrc Может, профессионалы и фыркнут, но у меня работает - мне хватает. P.S. еще мне показалось удобным поднять ftp-сервер на плате, чтобы сливать туда-оттуда разные файлы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sangre 0 16 ноября, 2010 Опубликовано 16 ноября, 2010 · Жалоба petrovs@petrovs:~/arm/src/linux$ make include/linux/version.h make: arm-linux-gcc: Команда не найдена CHK include/linux/version.h UPD include/linux/version.h почемуто это все что он делает на этом шаге, нормально так? или мало? хз использую дистрибутив linux-2.6.33, с linux4sam, оттудаже и патч для этого ядра. и еще, в /linux/include нет каталога asm-arm, нормально или нет? при попытке скомпилировать gcc в первый раз выдает . . . checking for --enable-version-specific-runtime-libs... no checking whether to enable maintainer-specific portions of Makefiles... no checking for arm-linux-gcc... /home/petrovs/arm/src/build/gcc-4.5.1-stage1/./gcc/xgcc -B/home/petrovs/arm/src/build/gcc-4.5.1-stage1/./gcc/ -B/home/petrovs/arm/arm-linux/bin/ -B/home/petrovs/arm/arm-linux/lib/ -isystem /home/petrovs/arm/arm-linux/include -isystem /home/petrovs/arm/arm-linux/sys-include checking for C compiler default output file name... configure: error: in `/home/petrovs/arm/src/build/gcc-4.5.1-stage1/arm-linux/libmudflap': configure: error: C compiler cannot create executables See `config.log' for more details. make[1]: *** [configure-target-libmudflap] Ошибка 1 make[1]: Выход из каталога `/home/petrovs/arm/src/build/gcc-4.5.1-stage1' make: *** [all] Ошибка 2 не очень понятная ошибка, побовал версии gcc 4.3.5 и 4.5.1, в обоих случаях примерно тоже самое. что хочет и почему не едет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
leen 0 16 ноября, 2010 Опубликовано 16 ноября, 2010 · Жалоба petrovs@petrovs:~/arm/src/linux$ make include/linux/version.h make: arm-linux-gcc: Команда не найдена CHK include/linux/version.h UPD include/linux/version.h почемуто это все что он делает на этом шаге, нормально так? или мало? хз Да, нормально. использую дистрибутив linux-2.6.33, с linux4sam, оттудаже и патч для этого ядра. и еще, в /linux/include нет каталога asm-arm, нормально или нет? заглянул в ванильное 2.6.33.6 - там тоже нет, когда появляется - не помню. В используемом 2.6.29.6 - есть, похоже эти папки появляются уже после сборки самого ядра. при попытке скомпилировать gcc в первый раз выдает checking for --enable-version-specific-runtime-libs... no хз что это, надо гуглить configure: error: in `/home/petrovs/arm/src/build/gcc-4.5.1-stage1/arm-linux/libmudflap': configure: error: C compiler cannot create executables See `config.log' for more details. make[1]: *** [configure-target-libmudflap] Ошибка 1 Мдя. Мой грех. Забыл, как сам накувыркался с этим маном. В общем, там такое дело - сначала выкуривается gcc cross compiling c gcc.gnu.org, затем собирается и устанавливается цель all-gcc: make all-gcc make install-gcc что хочетglibc собранного, которого еще нет. и почему не едет?пЫва мало было :beer: И еще раз - gcc собирается для кросс компиляции, т.е. соборанный им эльф на собирающей машине не запустится, а мэйк пробует сделать именно это, если мой телепатический модуль не сбойнул:) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sangre 0 16 ноября, 2010 Опубликовано 16 ноября, 2010 · Жалоба думал что возможно надо попробовать make all-gcc make install-gcc но почему то так и не попробовал, пытался баловаться параметрами ./config нашел оригинал представленной здесь статьи на аглицком, и там как раз перед промежуточной установкой gcc капиталистический товарищ устанавливал заголовки glibc, я следуя этому попытался провернуть этот фокус, но что то тоже не поехало что хочет glibc собранного, которого еще нет. о, так поехало, вот подумал про это, а руками не запустил, бывает =) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sangre 0 16 ноября, 2010 Опубликовано 16 ноября, 2010 · Жалоба petrovs@petrovs:~/arm/src/build/glibc-2.11.2$ BUILD_CC=gcc CC=${CROSS_COMPILE}gcc AR=${CROSS_COMPILE}ar RANLIB=${CROSS_COMPILE}ranlib AS=${CROSS_COMPILE}as LD=${CROSS_COMPILE}ld ../../glibc-2.11.2/./configure --prefix=/usr --build=i686-unknown-linux --host=arm-linux --target=arm-linux --without-fp --without-__thread --enable-add-ons=linuxthreads --with-headers=${SYSROOT}/usr/include 2>&1 | tee configure.out checking build system type... i686-unknown-linux-gnu checking host system type... arm-unknown-linux-gnu checking for arm-linux-gcc... arm-linux-gcc checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether arm-linux-gcc accepts -g... yes checking for arm-linux-gcc option to accept ISO C89... unsupported checking for gcc... gcc checking how to run the C preprocessor... arm-linux-gcc -E checking for arm-linux-g++... no checking for arm-linux-c++... no checking for arm-linux-gpp... no checking for arm-linux-aCC... no checking for arm-linux-CC... no checking for arm-linux-cxx... no checking for arm-linux-cc++... no checking for arm-linux-cl.exe... no checking for arm-linux-FCC... no checking for arm-linux-KCC... no checking for arm-linux-RCC... no checking for arm-linux-xlC_r... no checking for arm-linux-xlC... no checking for g++... g++ configure: WARNING: using cross tools not prefixed with host triplet checking whether we are using the GNU C++ compiler... yes checking whether g++ accepts -g... yes configure: running configure fragment for add-on linuxthreads checking sysdep dirs... configure: error: The arm is not supported. неожиданное сообщение, что делать? BUILD_CC=gcc CC=${CROSS_COMPILE}gcc AR=${CROSS_COMPILE}ar RANLIB=${CROSS_COMPILE}ranlib AS=${CROSS_COMPILE}as LD=${CROSS_COMPILE}ld ../../glibc-2.11.2/./configure --prefix=${SYSROOT}/usr --build=i686-unknown-linux --target=arm-linux --without-fp --without-__thread --enable-add-ons=linuxthreads --with-headers=${SYSROOT}/usr/include 2>&1 | tee configure.out здесь убрал параметр --host=arm-linux, не знаю верно ли это решение, если верить http://www.gnu.org/software/hello/manual/a...cifying%20Names и моему к сожалению скудному познанию аглицкого, то вроде как так и должно быть причем пробежал без варнингов но и ничего не сделал, а предложил поставить флаг --disable-sanity-checks, а с этим флагом вываливается ошибка . . . configure: error: gcc must provide the <cpuid.h> header Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
leen 0 16 ноября, 2010 Опубликовано 16 ноября, 2010 · Жалоба configure: running configure fragment for add-on linuxthreads checking sysdep dirs... configure: error: The arm is not supported. неожиданное сообщение, что делать? А что я выше говорил про линукстредс? Пост 6. Кроме того, если брал сырцы у гну, наверно видел файлы glibc-ports-xxx? Так вот сама глибц - под x86, а под арм ее ориентирует (добавляет платформозависимые куски) именно порт. И не факт, что самую свежую версию уже портировали. а предложил поставить флаг --disable-sanity-checks, а с этим флагом вываливается ошибкас ошибкой придется разбираться, но чуть позже, а флаг нужен, иначе при сборке мейк будет по-всякому тестировать собираемое, а как, если оно не запускается? есс-но будет тьма ошибок. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sangre 0 17 ноября, 2010 Опубликовано 17 ноября, 2010 · Жалоба нда, невнимательно читал 6 пост, да еще надо вообще внимательнее смотреть в директории и ридми файлы. как прикрутить этот порт? просто распаковать? в инструкции пишет товарищ накатить патчи, это конечно хорошо, но для новичка затруднительно, как их накатывать? и еще, там есть три патча, порт, линукстридс и либидн. про линукстридс пишет надо просто распаковать, ну ладно, распаковал, как накатить патчи? гугл не помог, либо пользоваться не умею =( про файлы типа тра-та-та.path вроде понятно, а вот про эти патчи не понятно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться