Название: Сборка под ARM. Отправлено: Павел_F. от Март 25, 2010, 13:46 Изначальные данные:
Есть Windows 7 и настроенный Sourcery G++ Lite. Вполне успешно компилю проги написанные на с++ все пока замечательно. Есть мысль использовать в нашей железке Qt. Скачал по ссылке с офф сайта qt-everywhere-opensource-src-4.6.2.tar.gz как я понял у них сейчас один архив для всех. Ибо по другой ссылке для windows я скачал его же. Теперь, следую мануалу с офф сайта делаю: Иду в QtDir/mkspecs/qws/linux-arm-g++ и правлю в qmake.conf. Меняю по файлу *arm-linux-* на свои *arm-none-linux-gnueabi-* сделал себе батник: Код Запустил его. В появившейся консоли пишу configure -embedded arm -xplatform qws/linux-arm-g++. В ответ получаю: Unknown option arm Invalid option "qws/linux-arm-g++" for -xplatform Ну и далее перечисление возможных опций... Что я делаю не так? Уже два для гуглю и читаю все подряд. Нигде решения не нашел. Название: Re: Сборка под ARM. Отправлено: Rcus от Март 25, 2010, 17:09 Интересно :) если сырцы tools/configure соответствуют бинарнику то понятно почему оно так происходит (поиск по сообщениям сразу наводит на возможные точки сбоя), только разбираться с этим нет ни желания, ни возможности. Да отлаживаться проще в X11 среде с похожим набором библиотек и qvfb.
Название: Re: Сборка под ARM. Отправлено: Павел_F. от Март 25, 2010, 17:32 Никакой поиск меня никуда не привел. Задача стоит такая что нужно это наладить и для windows и для linux.
Ладно бы чего-то не хватало или не компилилось... Можно было разбираться. А тут даже не знаю куда податься. Опция должна быть а как бы нет... Название: Re: Сборка под ARM. Отправлено: Rcus от Март 25, 2010, 17:47 Хм... вопроизведу свой поиск.
Цитировать cd $QTDIR ls tools cd tools/configure ls /*хм... configureapp.cpp выглядит многообещающе*/ vim configureapp.cpp /Unknown option /*интересно - выглядит как окончание списка if .. else if .. */ /*попробуем промотать наверх... что-то там много, лучше поищем -embedded*/ /*так - с embedded понятно - аргумент не принимает*/ /*посмотрим что там с -xplatform...*/ /*интересно - как формируется mkspecs*/ /*ищем-ищем - оппа entryList по каталогу /mkspecs, а где второй уровень? А нету*/ /*Ну на нет и суда нет :q, ^D*/ Название: Re: Сборка под ARM. Отправлено: Павел_F. от Март 26, 2010, 15:12 Ковыряясь в исходниках configure... Сделал так:
1) Перетащил папку linux-arm-g++ из QtDir/mkspecs/qws в QtDir/mkspecs 2) В файле qplatformdefs.h заменил ../../ на ../ 3) В файле qmake.conf аналогично ../../ на ../ а также arm-linux на arm-none-linux-gnueabi 4) Запустил configure -arch arm -platform win32-g++ -xplatform linux-arm-g++ и еще кучка нужных мне аргументов Теперь имеем. Configure таки прошел нормально... Уже легче. Но на этапе выполнения make, если точнее пробовал и mingw32-make и cs-make от тулчейна, результат не меняеется, да и с чего бы он изменился. Говорит "test" не является внутренней или внешней командой, исполняемой программой или ... Вопрос: а откуда бы ее взять эту test?. Под линукс пробегала тут, было дело... Под виндой не видел ни разу. Название: Re: Сборка под ARM. Отправлено: Павел_F. от Март 26, 2010, 16:53 Мысль возникла сказать этим Qt что их инструкция Cross-Compiling Qt for Embedded Linux Applications (http://qt.nokia.com/doc/4.6/qt-embedded-crosscompiling.html) мягко говоря не работает... Да с английским тяжело у меня.
Название: Re: Сборка под ARM. Отправлено: Rcus от Март 26, 2010, 18:14 Не в инструкции все в порядке, обратите на направление разделителей в путях, наверное они не предполагали что кому-то захочется собирать Qt/QWS в чужой среде.
Название: Re: Сборка под ARM. Отправлено: Павел_F. от Март 31, 2010, 09:21 Решил не делать новую тему а продолжить в этой.
Теперь пытаюсь тоже самое сделать в linux. И так тот же тулчейн но под linux. Так же правлю mkspec/qws/linux-arm-g++ Конфигуре запускаю так ./configure -embedded arm -xplatform qws/linux-arm-g++ -fast -no-phonon -no-webkit -no-phonon-backend -static Оно успешно проходит, как оказалось виндовый и линуксовый конфигур отличаются как небо и земля даже по списку аргументов. Теперь командуем make... На нем ошибки g++ -c -O2 -march=armv5te -mtune=arm926ej-s -s -fno-exceptions -O2 -fPIC -Wall -W -DQT_BOOTSTRAPPED -DQT_LITE_UNICODE -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_NO_CODECS -DQT_NO_DATASTREAM -DQT_NO_GEOM_VARIANT -DQT_NO_LIBRARY -DQT_NO_QOBJECT -DQT_NO_STL -DQT_NO_SYSTEMLOCALE -DQT_NO_TEXTSTREAM -DQT_NO_THREAD -DQT_NO_UNICODETABLES -DQT_NO_USING_NAMESPACE -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -I../../../mkspecs/qws/linux-x86-g++ -I. -I../../../include -I../../../include/QtCore -I../../../include/QtXml -I../../3rdparty/zlib -o .obj/release-static-emb-arm/qisciicodec.o ../../corelib/codecs/qisciicodec.cpp ../../corelib/codecs/qisciicodec.cpp:1: ошибка: некорректное значение (armv5te) для ключа -march ../../corelib/codecs/qisciicodec.cpp:1: ошибка: некорректное значение (arm926ej-s) для ключа -mtune= С этим что делать? Гугл как-то не очень помогает... Название: Re: Сборка под ARM. Отправлено: Rcus от Март 31, 2010, 10:36 Хм... Я вообще собирал без ключа xplatform, ибо -embedded сам все ставит.
А не покаже $QTDIR/src/tools/bootstrap/Makefile? Qt пытается собрать кусок себя чтобы использовать в qmake/moc/..., но откуда-то выползают флаги для кросскомпилятора, что-то нездоровое в этом. Вы где их задали? Название: Re: Сборка под ARM. Отправлено: Павел_F. от Март 31, 2010, 11:12 А не покаже $QTDIR/src/tools/bootstrap/Makefile? В какое место ему смотреть? Я, конечно, могу и выложить... но он такого лошадиного размера, длинный оченьQt пытается собрать кусок себя чтобы использовать в qmake/moc/..., но откуда-то выползают флаги для кросскомпилятора, что-то нездоровое в этом. Вы где их задали? Нигде, все что я делал я описал выше.Сейчас попробую без xplatform. Название: Re: Сборка под ARM. Отправлено: Rcus от Март 31, 2010, 11:44 В какое место ему смотреть? Я, конечно, могу и выложить... но он такого лошадиного размера, длинный очень Собственно меня интересует секция ####### Compiler, tools and options, а именно - CXX, *FLAGS и DEFINES. Нигде, все что я делал я описал выше. Ага, такие вещи как "-mtune=arm926ej-s" сами по себе появляются... необязательно было задавать через флаги ./configure или mkspecs, возможно это переменные среды.Сейчас попробую без xplatform. Название: Re: Сборка под ARM. Отправлено: Павел_F. от Март 31, 2010, 12:08 Цитата: QtDir/src/tools/bootstrap/Makefile ####### Compiler, tools and options Вот он. И там они есть...CC = arm-none-linux-gnueabi-gcc CXX = g++ DEFINES = -DQT_BOOTSTRAPPED -DQT_LITE_UNICODE -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_NO_CODECS -DQT_NO_DATASTREAM -DQT_NO_GEOM_VARIANT -DQT_NO_LIBRARY -DQT_NO_QOBJECT -DQT_NO_STL -DQT_NO_SYSTEMLOCALE -DQT_NO_TEXTSTREAM -DQT_NO_THREAD -DQT_NO_UNICODETABLES -DQT_NO_USING_NAMESPACE -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE CFLAGS = -O2 -march=armv5te -mtune=arm926ej-s -s -fno-exceptions -O2 -fPIC -Wall -W $(DEFINES) CXXFLAGS = -O2 -march=armv5te -mtune=arm926ej-s -s -fno-exceptions -O2 -fPIC -Wall -W $(DEFINES) INCPATH = -I../../../mkspecs/qws/linux-x86-g++ -I. -I../../../include -I../../../include/QtCore -I../../../include/QtXml -I../../3rdparty/zlib AR = ar cqs RANLIB = QMAKE = /home/user/Qt/qt-src-4.6.2/bin/qmake TAR = tar -cf COMPRESS = gzip -9f COPY = cp -f SED = sed COPY_FILE = $(COPY) COPY_DIR = $(COPY) -r STRIP = strip INSTALL_FILE = install -m 644 -p INSTALL_DIR = $(COPY_DIR) INSTALL_PROGRAM = install -m 755 -p DEL_FILE = rm -f SYMLINK = ln -f -s DEL_DIR = rmdir MOVE = mv -f CHK_DIR_EXISTS= test -d MKDIR = mkdir -p Возможно что-то добавилось когда сам тулчейн настраивали, это делал не я, я ковыряюсь с Qt. Я имею ввиду переменные среды. В переменных среды, которые по env выводятся, есть строчка CFLAGS=-O2 -march=armv5te -mtune=arm926ej-s -s В .bashrc у пользователя нашел строку source /home/user/cross.env А уже в /home/user/cross.env есть строка export CFLAGS="-O2 -march=armv5te -mtune=arm926ej-s -s" Но раз оно там, значит, наверное, оно было нужно. Куда, что править? Название: Re: Сборка под ARM. Отправлено: Rcus от Март 31, 2010, 12:19 Для Autoconf это бывает нужно, а в случае смешанной сборки - мешает.
Название: Re: Сборка под ARM. Отправлено: Павел_F. от Март 31, 2010, 12:23 Если честно не понял... Но убрал эту строку с -march. make мне выдал:
Цитировать g++ -Wl,-rpath-link,/home/user/Qt/qt-src-4.6.2/lib -fno-exceptions -Wl,-O1 -Wl,-rpath,/usr/local/Trolltech/QtEmbedded-4.6.2-arm/lib -Wl,-rpath,/usr/local/Trolltech/QtEmbedded-4.6.2-arm/lib -o ../../../bin/moc release-static/moc.o release-static/preprocessor.o release-static/generator.o release-static/parser.o release-static/token.o release-static/main.o -L/home/user/Qt/qt-src-4.6.2/src/tools/bootstrap -lbootstrap Это что еще за фокусы? Сколько не сижу с Qt никогда проблем не было, а эта сборка для арм и сам арм меня уже достал.../usr/bin/ld: /home/user/Qt/qt-src-4.6.2/src/tools/bootstrap/libbootstrap.a(compress.o): Relocations in generic ELF (EM: 40) /home/user/Qt/qt-src-4.6.2/src/tools/bootstrap/libbootstrap.a: could not read symbols: File in wrong format Название: Re: Сборка под ARM. Отправлено: Rcus от Март 31, 2010, 13:24 /*Вдыхает- выдыхает*/
А мне ARM нравится. Компоновщик вам английским языком говорит что compress.o не в том формате. Смотрим в src/tools/boostrap/bootstrap.pro - да это же compress.c из zlib. И собирается он компилятором указанным в CC, из-за замещения переменными среды *.c были собраны кросскомпилятором. Название: Re: Сборка под ARM. Отправлено: Павел_F. от Март 31, 2010, 13:43 Аааагромное вам спасибо! Убрал из переменных окружения СС=...
Вроде собирается... ЗЫ: возможно я тоже скоро полюблю арм... Название: Re: Сборка под ARM. Отправлено: Павел_F. от Март 31, 2010, 16:16 Блин. Qt собралось, причем статически. Сваял пробный проект( CONFIG += static добавил чтоб статически сделать). Скопилил его тулчейном. Залил в железку. При попытке запустить железка говорит что не нашла динамическую либу libstdc++.so.6
Какого хрена ей не хватает??? У тулчейна эта либа есть, у линукса в железке тоже есть. Положил эту либу рядом с бинарником итог тот же. Что делать и почему вообще ее нужно если все статически собираю? Название: Re: Сборка под ARM. Отправлено: Павел_F. от Март 31, 2010, 16:32 С этим разобрался, вкомпилил ее статически.
Итого бинарник у меня получился почти 3 мегабайта. Что меня совсем не устраивает, у железки с памятью не густо. Его как -нибудь можно ужать побольше? Название: Re: Сборка под ARM. Отправлено: Rcus от Март 31, 2010, 17:12 3 мегабайта? Для графического приложения? Покажите qconfig, я тоже так хочу. У меня 5.6 при половине отключенных опций (но с svg)
Название: Re: Сборка под ARM. Отправлено: Павел_F. от Март 31, 2010, 18:44 Зачем графического? У меня ни Х сервера, ни экрана... Это только в перспективе появится. Итого 3 метра для консольного приложения. И все тот же вопрос... Как сделать меньше и возможно ли это?
Название: Re: Сборка под ARM. Отправлено: Rcus от Март 31, 2010, 19:18 А ну я уж испугался что что-то забыл выкинуть... С Qt поставляются несколько готовых конфигураций, например minimal отлкючает всё. Если стандартные конфигурации не подходят то можно собрать qconfig для X11 и вручную настроить.
UPD: и все же если нет экрана то зачем вообще там Qt нужен? Название: Re: Сборка под ARM. Отправлено: Павел_F. от Март 31, 2010, 19:29 UPD: и все же если нет экрана то зачем вообще там Qt нужен? Потому что железка растет... И в следующей версии экран будет. Х сервер уже в процессе становления. А думать об этом лучше уже сейчас а не когда он, экран этот, на голову упадет. Да и удобно это... не все разработчики linux знают, ценят. Проще их на Qt посадить чем переучивать на linux.Название: Re: Сборка под ARM. Отправлено: Rcus от Март 31, 2010, 19:44 А что за железка такая что ей даже без экрана требуется мощный микроконтроллер?
Название: Re: Сборка под ARM. Отправлено: Павел_F. от Март 31, 2010, 20:27 Ну... Это маленький такой типа сервачек... Есть куча устройств с разными интерфейсами. Все они подключены к этой железке. У железки есть Lan и Wifi. Подключается клиент по сети, запрашивает нужный ему интерфейс и в путь... устройство на другом конце в вашем распоряжении. Интерфейсов много... клиентов тоже не мало
Название: Re: Сборка под ARM. Отправлено: BRE от Март 31, 2010, 20:38 Ну... Это маленький такой типа сервачек... Есть куча устройств с разными интерфейсами. Все они подключены к этой железке. У железки есть Lan и Wifi. Подключается клиент по сети, запрашивает нужный ему интерфейс и в путь... устройство на другом конце в вашем распоряжении. Интерфейсов много... клиентов тоже не мало А для чего сервачку экран? Для чего туда тащить X?... да еще и с таким количеством сетевых интерфейсов. Сервер должен работать. Есть желание посмотреть его статусы - подключись клиентом и смотри (хочешь в текстовом режиме, хочешь в графическом). Какой-то вендовый подход... ;) Название: Re: Сборка под ARM. Отправлено: Павел_F. от Март 31, 2010, 20:53 Не все так просто. Это я сказал зачем ему хороший проц. Не всегда и не ко всему можно подключится клиентом. Задача сильно специфическая и всю ее рассказывать бессмысленно. Да что тут объяснять... вон, в качестве примера, возьмите МФУ сетевой, хороший, офисный... У них и сервера уже давно внутри и экраны. причем и то и то им нужно в принципе.
Название: Re: Сборка под ARM. Отправлено: whirlwind от Март 31, 2010, 21:17 на всякий случай напомню, что Qt for Embedded Linux графику может показывать и без X сервера
|