Приветствую Вас Гость | RSS

Воскресенье, 05.05.2024, 21:03
Главная » 2010 » Июнь » 7 » Компиляция нативных приложений под E6/A1200
17:18
Компиляция нативных приложений под E6/A1200
Данный FAQ предназначен для людей, имеющих хотя-бы минимальный опыт общения с консолью *nix. И хотя он заточен на cygwin, с минимальной адаптацией и прикладыванием головы должен подойти и для unix-систем.

Что нам понадобится:
1. Cygwin
2. EZX CrossTool (в AllIn1.zip)
3. Header-файлы qte+модификации мои и donga (в AllIn1.zip)
4. dev-ezx для сборки moc.exe (в AllIn1.zip)
5. Tmake
6. Спека для TMake под нашу платформу (в AllIn1.zip)

Порядок установки:
1. Устанавливаем Cygwin. Выбираем типичную установку. Внимание! Следующие пакеты необходимо отметить вручную:
- gcc-core
- gcc-g++
- byacc
- diffutils
- flex
- make
- patchutils
- perl
- wget
2. В среде cygwin-а создаем каталог "/opt/cross".
3. Распаковываем ezx-crosstool-0.5.tar.bz2 куда угодно. Подправляем файл build.sh, меняем строку
Цитата
RESULT_TOP=$CROSSTOOL_DIR/gcc-arm-iwmmxt

на
Цитата
RESULT_TOP=/opt/cross/gcc-arm-iwmmxt
Из cygwin-а запускаем build.sh. Наберитесь терпения и готовность выкачать из сетки порядка 76 Мб. После запуска скачивание и сборка проходят автоматически. Если во время работы произошла ошибка - см. пункт 1. Пока компилится crosstool можно перейти к шагам 4-6.
4. Распаковываем tmake-1.8.tar.gz в /opt/cross, переименовываем каталог tmake-1.8 в tmake. В каталог /opt/cross/tmake/lib распаковываем tmakespec-linux-ezx-g++.tar.gz
5. Распаковываем dev-ezx-0.2.0.tgz в любой каталог, идем в dev-ezx-0.2.0/moc и делаем make. Создаем каталог /opt/cross/dev-ezx и 3 подкаталога в нем: bin, lib, include. В первый кидаем собраный moc.exe из dev-ezx-0.2.0/moc, во второй копируем все файлы из каталога /usr/lib телефона. В третий - распаковываем содержимое dev-ezx-include.tgz либо см. внизу поста.
6. Открываем ваш ".bash_proflie" (который находится в домашнем каталоге - /home/username) и дописываем в конец файла:
Цитата
export ARM_DEV_DIR=/opt/cross/gcc-arm-iwmmxt/gcc-3.3.6-glibc-2.3.2/arm-linux
export QTDIR=/opt/cross/dev-ezx
export TMAKEPATH=/opt/cross/tmake/lib/linux-ezx-g++

export PATH=$PATH:/opt/cross/tmake/bin:/opt/cross/gcc-arm-iwmmxt/gcc-3.3.6-glibc-2.3.2/arm-linux/bin

Когда crosstool соберется - окружение готово. Идем в каталог hellomoto (что в архиве) и выполняем в нем
Код
progen -o hellomoto.pro && tmake hellomoto.pro -o Makefile
. Эта команда создаст Makefile для проекта. Теперь исполняем make и копируем бинарник на телефон, запускаем
Код
. /home/native/.profile
./hellomoto

Запустилось? Поздравляю!

При написании программ можно ориентироваться на QT 2.3 reference doc и копать заголовочные файлы. Кроме того можно подглядывать в библиотеки следующим образом:
Код
arm-linux-objdump -T --demangle libezxappbase.so

и дополнять заголовочные файлы откопанными структурами.

Очень надеюсь, что мой FAQ будет полезен (надеюсь, ничего не забыл.. ;) и в скором времени список нативных приложений существенно увеличится.

Добавлено позже:
Вместо include, описанного в п. 5 лучше использовать:

include от qt-embedded-2.3.8 + патч.
include/ezx.

Взято отсюда: http://forum.motofan.ru/index.php?showtopic=127899

Просмотров: 847 | Добавил: intell | Рейтинг: 0.0/0
Всего комментариев: 4
4 intell  
0
http://doc.trolltech.com/2.3/index.html - документация qt 2.3

3 intell  
0
Ещё страничка с готовыми нативными приложениями: http://forum.motofan.ru/index.php?showtopic=137280

2 intell  
0
moto-e6-sdk
Лежит здесь: http://code.google.com/p/moto-e6-sdk/downloads/list
Вдруг когда-нибудь пригодится. Там же лежит cygwin_osdev_2009.iso, видимо можно пользоваться.

1 intell  
0
Делал всё по инструкции, не запустилось:
user@computer /cygdrive/j/intell/AllIn1/hellomoto
$ make
arm-linux-g++ -c -pipe -DQWS -fno-exceptions -fno-rtti -Wall -W -O2 -mcpu=iwmmxt
-mtune=iwmmxt -DNO_DEBUG -I/opt/cross/gcc-arm-iwmmxt/gcc-3.3.6-glibc-2.3.2/arm-
/include/ezx -o main.o main.cpp
main.cpp:1:26: zapplication.h: No such file or directory
main.cpp:2:25: zmainwidget.h: No such file or directory
main.cpp:3:25: zmessagebox.h: No such file or directory
main.cpp: In function `int main(int, char**)':
main.cpp:9: error: `ZApplication' undeclared (first use this function)
main.cpp:9: error: (Each undeclared identifier is reported only once for each
function it appears in.)
main.cpp:9: error: `app' undeclared (first use this function)
main.cpp:9: error: syntax error before `(' token
main.cpp:10: error: `ZMainWidget' undeclared (first use this function)
main.cpp:10: error: `wdt' undeclared (first use this function)
main.cpp:10: error: syntax error before `(' token
main.cpp:12: error: `ZMessageBox' undeclared (first use this function)
main.cpp:12: error: syntax error before `::' token
main.cpp:6: warning: unused parameter `int argc'
main.cpp:6: warning: unused parameter `char**argv'
main.cpp:18:2: warning: no newline at end of file
make: *** [main.o] Error 1

Может потому что вместо ".bash_proflie" создал файл ".bash_profile".
Чтоб всё заработало, просто вручную выполнил все команды export из шестого пункта:

user@computer /cygdrive/j/intell/AllIn1/hellomoto
$ export ARM_DEV_DIR=/opt/cross/gcc-arm-iwmmxt/gcc-3.3.6-glibc-2.3.2/arm-linux

user@computer /cygdrive/j/intell/AllIn1/hellomoto
$ export QTDIR=/opt/cross/dev-ezx

user@computer /cygdrive/j/intell/AllIn1/hellomoto
$ export TMAKEPATH=/opt/cross/tmake/lib/linux-ezx-g++

user@computer /cygdrive/j/intell/AllIn1/hellomoto
$ export PATH=$PATH:/opt/cross/tmake/bin:/opt/cross/gcc-arm-iwmmxt/gcc-3.3.6-gl
ibc-2.3.2/arm-linux/bin

user@computer /cygdrive/j/intell/AllIn1/hellomoto
$ make
arm-linux-g++ -c -pipe -DQWS -fno-exceptions -fno-rtti -Wall -W -O2 -mcpu=iwmmxt
-mtune=iwmmxt -DNO_DEBUG -I/opt/cross/gcc-arm-iwmmxt/gcc-3.3.6-glibc-2.3.2/arm-
linux/include -I/opt/cross/dev-ezx/include -I/opt/cross/dev-ezx/include/ezx -o m
ain.o main.cpp
main.cpp: In function `int main(int, char**)':
main.cpp:9: warning: unused variable `ZApplication*app'
main.cpp:7: warning: `int result' might be used uninitialized in this function
main.cpp:18:2: warning: no newline at end of file
arm-linux-g++ -Wl,-rpath-link,/opt/cross/dev-ezx/lib/ezx/lib,-rpath-link,/opt/cr
oss/dev-ezx/lib/ezx/lib/inputmethods -o hellomoto main.o -L/opt/cross/gcc-arm-
iwmmxt/gcc-3.3.6-glibc-2.3.2/arm-linux/lib -L/opt/cross/dev-ezx/lib -L/opt/cross
/dev-ezx/lib/ezx/lib -ldl -lqte-mt -lpthread -lezxappbase -lezxappsdk -lezxopenw
indow -lipp-miscGen -lipp-jp -lezxjpeg -lezxpm

Получился файлик hellomoto, который спокойно запустился на телефоне через econsole под прошивкой gizmoto 59 laverne


Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]