ЗАО «ЗЭО»
Техническая поддержка пользователей => ОС Linux, U-Boot => Тема начата: kapa77 от 24 Мая, 2010, 03:11:55
-
Здравствуйте!
Потихоньку разбираюсь с Тионом и Qt. Накопилось пару вопросов, в которые хотелось бы внести ясность:
1) После компилиции приложения и переносе его на Тион, что еще необходимо установить или настроить, чтобы оно запустилось?
2) Что необходимо сделать в Тионе и при сборке Qt, чтобы была возможность работы с тачскрином и с помощью мыши? Насколько я понял, при сборке нужно подключать как-то библиотеку tslib. Я прав?
Спасибо!
-
> работы с тачскрином и с помощью мыши?
tslib/qt-mouse-tslib и qt-mouse-pc
> что еще необходимо установить или настроить, чтобы оно запустилось?
export TSLIB_TSDEVICE=/dev/misc/ep93xx_ts
(сейчас делается в /etc/profile)
./my-qt-prorg -qws
Это в том случае, если всё правильно.
-
Т.е никакие Qt-ные библиотеки встраивать не надо в Тион?
При сборке Qt я использовал опцию -static.
А еще еще видел, что вроде бы нужно устанавливать переменные окружения, типа
export QWS_MOUSE_PROTO=TPanel:/dev/misc/ep93xx_ts
export QWS_MOUSE_PROTO=IntelliMouse:/dev/input/mice
Или это лишнее?
-
Кому как.
-
Собрал у себя на виртуальной машине в Kubuntu 9.10 библиотеку Qt Embedded 4.6.2
./configure -prefix /home/kapa/Qt -embedded arm -xplatform qws/linux-arm-g++ -v -qvfb -little-endian
-depths 8,16,24 -no-gfx-qvfb -no-gfx-multiscreen -qt-gfx-linuxfb -qt-gif -qt-zlib -qt-libjpeg -qt-libpng -qt-freetype
-no-webkit -no-cups -no-javascript-jit -no-script
Использую компилятор arm-linux-gcc-4.1.1-920t.tar.bz2
Затем собрал простенькое приложение. Залил его на флешку.
Скопировал всю папку Qt на флешку.
Включил Тион-Про. Вставил флешку.
Для отладки, к тиону через переходник подключен обычный 19-дюймовый VGA-монитор.
export QTDIR=/mnt/flash/Qt
export LD_LIBRARY_PATH=$QTDIR/lib
export QWS_DISPLAY=LinuxFb
export QWS_SW_CURSOR=0
export QWS_MOUSE_PROTO=IntelliMouse:/dev/input/mice
/mnt/flash/App/app -qws
Думает пару секунд и выкидывает "Segmentation fault"
Подскажите, пожалуйста, в чем может быть проблема?!
-
1. Приведите лог сборки вашей программы.
2. Исходный код программы.
-
Думает пару секунд и выкидывает "Segmentation fault"
Подскажите, пожалуйста, в чем может быть проблема?!
segfault - это скорее всего неявные ошибки в программе.
Соберите QT 4.6.2 под хост-системой и отладьте приложение под ней.
Если все работает - собирайте для Тиона.
ЗЫ: После того, как наши програмеры отладятся на хосте
собираю примерно так (правда QT 4.5.2 - но это не важно):
#!/bin/bash
/home/faa/CRUS/dev/build/qt-embedded-linux-opensource-src-4.5.2/bin/qmake \
-spec /home/faa/CRUS/dev/build/qt-embedded-linux-opensource-src-4.5.2/mkspecs/qws/linux-arm-g++ \
-unix \
-o Makefile.arm proga.pro
make -f Makefile.arm clean
make -f Makefile.arm
Далее кладем proga на nfs и проверяем.
-
1. Приведите лог сборки вашей программы.
2. Исходный код программы.
Исходный код
#include <QApplication>
#include <QLabel>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QLabel *label = new QLabel("Hello Qt!");
label->show();
return app.exec();
}
Лог
Running build steps for project Hello...
Starting: /home/kapa/Qt-Embedded-arm-2/bin/qmake /home/kapa/Documents/Projects/Hello/Hello.pro -spec /home/kapa/Qt-Embedded-arm-2/mkspecs/qws/linux-arm-g++ -r CONFIG+=debug
Exited with code 0.
Starting: /usr/bin/make -w
make: Entering directory `/home/kapa/Documents/Projects/Hello'
arm-linux-g++ -c -pipe -g -Wall -W -D_REENTRANT -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED -I../../../Qt-Embedded-arm-2/mkspecs/qws/linux-arm-g++ -I. -I../../../Qt-Embedded-arm-2/include/QtCore -I../../../Qt-Embedded-arm-2/include/QtNetwork -I../../../Qt-Embedded-arm-2/include/QtGui -I../../../Qt-Embedded-arm-2/include -I. -I. -o hello.o hello.cpp
arm-linux-g++ -Wl,-rpath,/home/kapa/Qt-Embedded-arm-2/lib -o Hello hello.o -L/home/kapa/Qt-Embedded-arm-2/lib -lQtGui -L/home/kapa/Qt-Embedded-arm-2/lib -lQtNetwork -lQtCore -lpthread
make: Leaving directory `/home/kapa/Documents/Projects/Hello'
Exited with code 0.
А здесь не может быть проблема в версии компилятора? Может для данного Тиона нужно использовать другой компилятор?
-
segfault - это скорее всего неявные ошибки в программе.
Соберите QT 4.6.2 под хост-системой и отладьте приложение под ней.
Если все работает - собирайте для Тиона.
Ну я уже пробовал собирать под хост системой - все в порядке-собирается, запускается.
Потом собираю под АРМ. Увы, не пробовал запустить с помощью виртуального фреймбуфера, так как не удается его скомпилировать.
-
А здесь не может быть проблема в версии компилятора? Может для данного Тиона нужно использовать другой компилятор?
1. На Тион-Про библиотеки той-же версии, что и в cross-компиляторе и Qt?
2. Если собирать со -static ошибка такая же?
-
Без -static, попробуйте -ldl
-
1. На Тион-Про библиотеки той-же версии, что и в cross-компиляторе и Qt?
НА счет библиотек в кросс-компиляторе я не понял. Это как узнать?
После того, как я собрал Qt Embedded, я скопировал всю папку Qt на флешку. При этом подпапка lib копировалась не полностью, так как кидал ошибку, что-то типа не может создать symlink на ряд библиотек, в том числе libQtGui.so.4. В итоге, папку lib я скопировал на флешку из исходной папки (в которую разархивировал скаченный архив Qt).
Затем на Тионе:
export QTDIR=/mnt/flash/Qt
export LD_LIBRARY_PATH=$QTDIR/lib
2. Если собирать со -static ошибка такая же?
да, ошибка такая же.
Без -static, попробуйте -ldl
это где такую опцию указывать? при запуске прогрммы на Тионе??
/mnt/flash/App # ./app -ldl
та же ошибка
-
> это где такую опцию указывать? при запуске прогрммы на Тионе??
> /mnt/flash/App # ./app -ldl
Нет, при сборке.
На Тион-Про есть strace? Сделайте так
strace ./app -qws 2>&1 > out.log
Полученные log.out прведите здесь.
> ошибку, что-то типа не может создать symlink на ряд библиотек
На USB-Flash делайте файловую систему ext2 или ext3.
Ваша программа работает на QT из Buildroot, соотв. и комплятор/библиотеки из Buildroot.
Если нужно QT4, я бы использовал Buildroot.
-
Если нужно QT4, я бы использовал Buildroot.
QT4 к crater тоже прикручивается легко ftp://ftp.ntcsm.ru/pub/tion9315/qtembed.mk (ftp://ftp.ntcsm.ru/pub/tion9315/qtembed.mk).
Ну и config.in-ы подправить надо.
-
Пока не пробовал использовать Buildroot.
Для начала меня смущает то, что не удается запустить файл, собранный со -static. Насколько я понимаю, при сборке Qt со -static, и последующем билде программы, исполняемому файлу больше ничего не нужно на Тионе? Я прав?
Не может ли все-таки быть, что проблема связана с неправильной установкой переменных окружения??
Я делаю так:
export QTDIR=/mnt/flash/Qt
export LD_LIBRARY_PATH=$QTDIR/lib
export QWS_DISPLAY=LinuxFb
export QWS_SW_CURSOR=0
export QWS_MOUSE_PROTO=IntelliMouse:/dev/input/mice
Без первых двух строк, когда статическое приложение.
-
Лог strace где?
-
Лог strace где?
> исполняемому файлу больше ничего не нужно на Тионе? Я прав?
И при --static тоже лог.
-
К сожалению, strace нету. Поробую поставить и собрать лог
-
strace есть в этом образе КФС
http://www.zao-zeo.ru/media/files/rootfs/ep93xx/rootfs_crater_svn819mod_tion-pro.jffs2
-
Т.е. вы предлагаете переустановить Linux на Тион? Я просто никогда такое не делал, так что не могли бы вы чуть пояснить порядок?
Как я понял из документации, мне необходимо поднять TFTP-сервер, с которого впоследствии будут загружены ядро Linux и КФС. Тогда я ядро возьму здесь http://www.zao-zeo.ru/media/files/linux/2.6.20/image/uImage-2.6.20.4_tion_svn278_eabi ?
А образ КФС взять предложенный вами выше (http://www.zao-zeo.ru/media/files/rootfs/ep93xx/rootfs_crater_svn819mod_tion-pro.jffs2)???
Или с этими файлами нужно еще какие то манипуляции произвести?
А Crater-ом, значит, я могу собирать собственные образы ядра и КФС, если мне вдруг понадобится?
Согласно пункту 3.1 "Руководства по программному освоению Тиона" нужно загрузить образ скрипта urefl-linux. Подскажите пожалуйста, где его можно взять?
-
> вы предлагаете переустановить Linux на Тион?
Это ради strace, поэтому достаточно только КФС. Или я позже отправлю вам на e-mail только strace, вы его сможете скопировать в вашу текушую КФС и он, надеюсь, запуститься.
> А Crater-ом, значит, я могу собирать собственные образы ядра и КФС, если мне вдруг понадобится?
Если вас интересует Qt4, то на Crater вас, пожалуй, ничего не держит. Используйте сразу Buildroot и ядро с EABI.
> Согласно пункту 3.1 "Руководства по программному освоению Тиона" нужно загрузить образ скрипта urefl-linux. Подскажите пожалуйста, где его можно взять?
Не то, чтобы _нужно_, но из них понятен порядок действий.
Ссылка на архив внизу страницы http://www.zao-zeo.ru/dokuwiki/doku.php/u-boot
-
Это ради strace, поэтому достаточно только КФС. Или я позже отправлю вам на e-mail только strace, вы его сможете скопировать в вашу текушую КФС и он, надеюсь, запуститься
Да, будьте добры! Так будет проще.
И все же, чтоб я понимал - если я захочу перезалить КФС, то этот файл (http://www.zao-zeo.ru/media/files/rootfs/ep93xx/rootfs_crater_svn819mod_tion-pro.jffs2) уже является готовым для заливки образом КФС?
Если вас интересует Qt4, то на Crater вас, пожалуй, ничего не держит. Используйте сразу Buildroot и ядро с EABI.
Хорошо. Посмотрю, попробую.
-
> И все же, чтоб я понимал - если я захочу перезалить КФС, то этот файл
> (http://www.zao-zeo.ru/media/files/rootfs/ep93xx/rootfs_crater_svn819mod_tion-pro.jffs2) уже является готовым для заливки образом КФС?
Это образ файловой системы JFFS2 с размером стираемого блока соответствующим Flash в Тион-Про (и Тион). Обрабатывать его mkimage'ом смысла нет и делать этого не нужно.
Он записывается в соответствии с
http://zao-zeo.ru/dokuwiki/doku.php/linux#flash
-
Спасибо. Получил strace. Но что-то не получается вывести все в лог.
Делаю # strace ./undo -qws 2>&1 out.log
Файл создается, но пустой. А все выводится на экран.
Как я понял, при запуске программы, помимо Qt-ных библиотек, программа ищет другие либы, которые я нашел в папке lib крос-компилятора на хост-машине. Я их скопировал на флешку, добавил пути в LD_LIBRARY_PATH, но все равно чего-то не хватает.
-
strace ./undo -qws 2>&1 >out.log
-
Прошу прощения, я описался. На самом деле так и запускал, как вы написали, но не помогло. В итоге сделал иначе:
# strace -o HelloStatic.Log ./HelloStatic -qws
Для начала, этот файл HelloStatic, собранный в Qt 4.6.2 с опцией static.
Собранный лог в аттачменте
-
Попробуйте другую версию Qt (в Buildroot 2010.03 -- Qt 4.5.2)
http://bugreports.qt.nokia.com/browse/QTBUG-8365?page=com.atlassian.jira.plugin.system.issuetabpanels%3Achangehistory-tabpanel
-
Да, видимо проблема действительно была связана с версией 4.6.2.
В итоге, скачал qt-embedded-linux-opensource-src-4.5.2
Сконфигурировал с опцией static
./configure -prefix /mnt/usbflash/Qt-4.5.2/Embedded-Arm-Static -embedded arm -xplatform qws/linux-arm-g++ -D__ARM_ARCH_4T__ -depths 8,16,24 -qt-zlib -qt-libjpeg -qt-libpng -qt-freetype -little-endian -no-gfx-qvfb -no-gfx-multiscreen -qt-gfx-linuxfb -no-webkit -no-cups -nomake examples -static -v
Пришлось ставить по такому пути /mnt/usbflash/Qt-4.5.2/Embedded-Arm-Static , т.к. при запуске на Тионе приложение ищет папку fonts по пути указанному в опции -prefix. Потом я записываю папку Qt-4.5.2 на флешку, которую монтирую на Тионе к /mnt/usbflash.
Далее, собираю пример undo из папки demos
# /mnt/usbflash/Qt-4.5.2/Embedded-Arm-Static/bin/qmake ./undo.pro -r -spec /mnt/usbflash/Qt-4.5.2/Embedded-Arm-Static/mkspec/qws/linux-arm-g++/
# make
Выставляю переменные окружения на Тионе
export QWS_DISPLAY=LinuxFb
export QWS_MOUSE_PROTO=IntelluMouse:/dev/input/mice
Затем записанное на флешку приложение зупаскаю на Тионе
# ./undo -qws
Приложение запустилось. Большое спасибо за оказанную помощь!
Осталось переконфигурировать Qt для поддержки тач скрина и потестировать с сенсорным монитором.