Russian Qt Forum

Qt => Qt Embedded => Тема начата: Павел_F. от Март 25, 2010, 13:46



Название: Сборка под 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-*

сделал себе батник:
Код
Bash
set PATH=D:\SourceryG++Lite;%PATH%
set QMAKESPEC=win32-g++
cmd.exe
 
Запустил его. В появившейся консоли пишу 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.
Нигде, все что я делал я описал выше.
Сейчас попробую без xplatform.
Ага, такие вещи как "-mtune=arm926ej-s" сами по себе появляются... необязательно было задавать через флаги ./configure или mkspecs, возможно это переменные среды.


Название: 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
/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
Это что еще за фокусы? Сколько не сижу с Qt никогда проблем не было, а эта сборка для арм и сам арм меня уже достал...


Название: 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 сервера