|
программирование at91sam9xeek |
|
|
|
Nov 8 2010, 14:44
|
Участник

Группа: Участник
Сообщений: 35
Регистрация: 8-11-10
Пользователь №: 60 727

|
есть плата 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, но я не верю что нельзя написать программу и не запустить на плате под линуксом, поэтому буду рад любым замечаниям что делаю не так, и рекомендациям по нахождению правильного пути.
|
|
|
|
|
Nov 8 2010, 22:13
|
Частый гость
 
Группа: Свой
Сообщений: 172
Регистрация: 5-08-06
Из: Владивосток
Пользователь №: 19 343

|
Цитата(sangre @ Nov 9 2010, 00:44)  на убунте установлен arm-linux-gnueabi А этот arm-linux-gnueabi - тот же, которым собраны ядро и рутфс на плате? Когда осваивал linux from scratch, нагугливал, что если glibc у кросскомпилятора и у системы-цели разной сборки (даже если версия одна и та же), то как раз чаще всего и будет незапускаемый код. Поэтому я бы посоветовал найти набор кросстулз на linux4sam. А если Вы хотите делать свою сборку кросстулз, то и рутфс и ядро придется пересобирать. Это, правда, не относится к пересборке gcc и binutils, только к пересборке glibc.
|
|
|
|
|
Nov 9 2010, 05:45
|
Участник

Группа: Участник
Сообщений: 35
Регистрация: 8-11-10
Пользователь №: 60 727

|
arm-linux-gnueabi это пакет установленный в убунте, уже после того как линукс был загружен в плату. на плате ангстром, который демонстративный на linux4sam. а перекомпилировывать ядро и фс наверно долгий процесс.... не хотелось так глубоко заседать, надеялся что лихим кавалерийским наскоком все поедет
|
|
|
|
|
Nov 13 2010, 09:23
|
Участник

Группа: Участник
Сообщений: 35
Регистрация: 8-11-10
Пользователь №: 60 727

|
а можно чуток поподробнее? как собиральсо ядро, как мир, как с загрузчиками, ссылки там, может свои комментарии? я сейчас штудирую LFS, долго уже мучаюсь но не получается. компилировал ядро, но оно не находит фс, при компиляции вроде вписывал ей, но не хочет его находить. листал OE, тоже вроде не все просто, но еще нужно не просто что бы все заработало, а что бы на большой машине писать и компилить, а на плате все это запускалось именно в линуксе.
|
|
|
|
|
Nov 15 2010, 05:30
|
Частый гость
 
Группа: Свой
Сообщений: 172
Регистрация: 5-08-06
Из: Владивосток
Пользователь №: 19 343

|
Ссылка с описанием была весьмя старой и уже мертва, прикладываю хтмл-файл, ориентируясь на который, я собирал LFS.
_______toolchain_____ARM__________Linux____AT91RM9200.htm ( 29.66 килобайт )
Кол-во скачиваний: 1610К слову, собирать glibc (не uclibc, а полновесный glibc) лучше с поддержкой потоков nptl, а не linuxthreads, т.к. последние были на заре линукса и сейчас активно выпиливаются. ИМХО, LFS хорош для ознакомления с системой, узнать, что и откуда у нее растет. Но параллельно посоветовал бы подготовить инструментарий, позволяющий работать. В этом смысле хорош Emdebian. Вроде были и еще проекты, предоставляющие не просто тулчейн с компиленным ядром и небольшим рутом, но полноценные дистры. Пока не интересовался этим.
|
|
|
|
|
Nov 15 2010, 06:10
|
Участник

Группа: Участник
Сообщений: 35
Регистрация: 8-11-10
Пользователь №: 60 727

|
благодарю, буду разбирать
|
|
|
|
|
Nov 15 2010, 14:42
|
Участник

Группа: Участник
Сообщений: 35
Регистрация: 8-11-10
Пользователь №: 60 727

|
в принципе ядро я собираю, но теперь проблема создать фс, с софтом на ней, и что бы ядро находило эту фс. ну и на машине собирать прогу а на плате что бы работала. собрал стандартное ядро и фс в ОЕ, получилось тоже что и на linux4sam, но что то это радости не принесло, не понятно как сделано и что сделано, как это использовать и как этим управлять
|
|
|
|
|
Nov 16 2010, 02:46
|
Частый гость
 
Группа: Свой
Сообщений: 172
Регистрация: 5-08-06
Из: Владивосток
Пользователь №: 19 343

|
У меня рабочей является такая конфигурация (подсмотрено в слакваре): ядро с вкомипленной в него инит рам фс - так ядро занимает больше места, зато не надо по отдельности прогружать ядро и инитрд и указывать ядру на инитрд. Главное, чтобы в инитрамфс был файл инит. у меня это скрипт, делающий все необходимые манипуляции. Также в инитрамфс запихан статически собранный бизибокс с минимумом необходимого для монтирования микросд карточки, на которой создан основной рут. После загрузки ядро запускает процесс инит с инитрамфс. Инит, отработав, меняет рут на примонтированную микросд карту, запуская инит там. Инит на микросд запускает всех демонов и стартует шелл, привязанный к 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-сервер на плате, чтобы сливать туда-оттуда разные файлы.
|
|
|
|
|
Nov 16 2010, 11:01
|
Участник

Группа: Участник
Сообщений: 35
Регистрация: 8-11-10
Пользователь №: 60 727

|
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, в обоих случаях примерно тоже самое. что хочет и почему не едет?
|
|
|
|
|
Nov 16 2010, 12:07
|
Частый гость
 
Группа: Свой
Сообщений: 172
Регистрация: 5-08-06
Из: Владивосток
Пользователь №: 19 343

|
Цитата(sangre @ Nov 16 2010, 21:01)  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 собранного, которого еще нет. Цитата и почему не едет? пЫва мало было  И еще раз - gcc собирается для кросс компиляции, т.е. соборанный им эльф на собирающей машине не запустится, а мэйк пробует сделать именно это, если мой телепатический модуль не сбойнул
|
|
|
|
|
Nov 16 2010, 13:11
|
Участник

Группа: Участник
Сообщений: 35
Регистрация: 8-11-10
Пользователь №: 60 727

|
думал что возможно надо попробовать make all-gcc make install-gcc но почему то так и не попробовал, пытался баловаться параметрами ./config нашел оригинал представленной здесь статьи на аглицком, и там как раз перед промежуточной установкой gcc капиталистический товарищ устанавливал заголовки glibc, я следуя этому попытался провернуть этот фокус, но что то тоже не поехало
что хочет glibc собранного, которого еще нет.
о, так поехало, вот подумал про это, а руками не запустил, бывает =)
|
|
|
|
|
Nov 16 2010, 14:58
|
Участник

Группа: Участник
Сообщений: 35
Регистрация: 8-11-10
Пользователь №: 60 727

|
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
|
|
|
|
|
Nov 16 2010, 21:50
|
Частый гость
 
Группа: Свой
Сообщений: 172
Регистрация: 5-08-06
Из: Владивосток
Пользователь №: 19 343

|
Цитата(sangre @ Nov 17 2010, 00:58)  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, а с этим флагом вываливается ошибка с ошибкой придется разбираться, но чуть позже, а флаг нужен, иначе при сборке мейк будет по-всякому тестировать собираемое, а как, если оно не запускается? есс-но будет тьма ошибок.
|
|
|
|
|
Nov 17 2010, 07:35
|
Участник

Группа: Участник
Сообщений: 35
Регистрация: 8-11-10
Пользователь №: 60 727

|
нда, невнимательно читал 6 пост, да еще надо вообще внимательнее смотреть в директории и ридми файлы. как прикрутить этот порт? просто распаковать? в инструкции пишет товарищ накатить патчи, это конечно хорошо, но для новичка затруднительно, как их накатывать? и еще, там есть три патча, порт, линукстридс и либидн. про линукстридс пишет надо просто распаковать, ну ладно, распаковал, как накатить патчи? гугл не помог, либо пользоваться не умею =(
про файлы типа тра-та-та.path вроде понятно, а вот про эти патчи не понятно
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|