Toolchain/ru
From Openmoko
(→Создаем пробный проект) |
(→Установка новых библиотек) |
||
Line 115: | Line 115: | ||
==Установка новых библиотек== | ==Установка новых библиотек== | ||
− | Openmoko toolchain | + | В Openmoko toolchain по умолчанию отсутствуют многие библиотеки. Однако, с его помощью вы можете скачать и установить библиотеки, которые уже существуют в репозитарии Openmoko. (По умолчанию обращение происходит к [http://downloads.openmoko.org/repository/testing/ Тестовому Репозитарию].) |
− | * | + | *Перед тем как скачивать библиотеки, необходимо изменить некоторые переменные окружения. |
− | + | . /usr/local/openmoko/arm/environment-setup | |
− | * | + | *Во-первых, обновите базу данных opkg (Обратите внимание на необходимость использования псевдонима '''opkg-target''' вместо '''opkg''') |
opkg-target update | opkg-target update | ||
− | + | *Во-вторых, выберите какой из пакетов вам необходим. Для примера возьмем edje. Если вы хотите разрабатывать проект, который использует edje из Enlightenment, то вы можете использовать '''opkg-target list''' для того чтобы вывести на экране список всех пакетов, которые можно установить. Конечно жн, команда '''grep''' сильно облегчит задачу. (Помните, вам нужно установить еще и -dev пакет а не только libedje.) | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
opkg-target list |grep edje-dev | opkg-target list |grep edje-dev | ||
− | * | + | *В третьих, проинсталлируйте все что нужно |
opkg-target install libedje-dev | opkg-target install libedje-dev | ||
− | * | + | |
+ | *В четвертых, приготовьте чашечку кофе и запаситесь терпением. | ||
==Создаем пробный проект== | ==Создаем пробный проект== |
Revision as of 16:24, 20 October 2008
![]() |
Languages: |
English • العربية • Български • Česky • Dansk • Deutsch • Esperanto • Eesti • Español • فارسی • Suomi • Français • עברית • Magyar • Italiano • 한국어 • Nederlands • Norsk (bokmål) • Polski • Português • Română • Русский • Svenska • Slovenčina • Українська • 中文(中国大陆) • 中文(台灣) • Euskara • Català |
Contents |
Введение
A toolchain это набор инструментов необходимых для создания кода. Для Openmoko, мы предлагаем различные варианты для следующих целей использования:
- (a) Разработка одиночных приложений
- Для этого, мы можете использовать подготовленный toolchain из Openmoko проекта. На этой странице вы можете найти рецепт как начать с этим toolchain и пошагам собрать ваш проекти запустить на нужном устройстве. (You might have heard about OpenEmbedded, однако разработчик приложений , вы should не можете использовать OpenEmbedded.)
- (b) Системный интегратор и настройщик дистрибутива
- Для этой задачи, вы должны использовать OpenEmbedded с сборкой этого на вашем кросс-компиляторе during the bootstrapping/build процесс. Системный интегратор и настройщик дистрибутива не должен использовать эту страницу.
Основы использования toolchain
Что необходимо
You should be reasonably familiar with Linux and its command line tools, have an x86-compatible computer with at least 1G of free disk space. You should have experience with compiling programs from source using your local compiler. The remainder of this document will also assume you have write access in your home directory (~) and /usr/local/ (becoming root if needed). If any of this is not the case, please call your local administrator for help.
Last but not least you should have a working setup that allows you to compile native software packages using the autotools build system (the triade of ./configure, make, make install).
Частичный список необходимых пакетов -- пожалуйста добавьте если нехватает:
- Для большинства версий Linux вам необходимо установить следующие пакеты
- autoconf, automake
- binutils, gcc, gcc-c++
- libtool
- ccache
- intltool
- Для Ubuntu 8.04 ( Предыдущая версия не поддерживает libmokoui2 ) необходимы пакеты:
sudo apt-get install gcc g++ autoconf automake binutils libtool libglib2.0-dev \ ccache libxrender-dev intltool libmokoui2-dev libgconf2-dev mtools fakeroot alien check
- Для Ubuntu 8.10 так же будут нужны дополнительные пакеты:
sudo apt-get install uboot-mkimage
- For Fedora-Core the following is required, while logged in as root:
yum install gcc gcc-c++ autoconf automake binutils libtool glib2-devel \ ccache libXrender-devel intltool GConf2-devel mtools gettext-devel
Fedora-Core does not appear to have libmokoui2 available.
Скачивание и установка
-= 2008.9=- черновик
There is a fresh meta-toolchain.
# checkout the source code $cd /tmp $svn checkout http://om-assassin.googlecode.com/svn/trunk assassin $cd assassin
# Build ! $./autogen.sh --host=arm-angstrom-linux-gnueabi $ file src/assassin src/assassin: ELF 32-bit LSB executable, ARM, version 1 (SYSV), for GNU/Linux 2.6.14, dynamically linked (uses shared libs), not stripped
if you got some message when do configure, like this
No package 'edje' found
you can try "opkg-target list |grep edje |grep dev" to find out what package you should install.
NOTE: If you wish to improve an existing Openmoko application and you are running Debian or Ubuntu i386 (тоесть можете установить с .deb), you may wish to skip the below and instead use:
Openmoko application development in 5 minutes by Andreas Dalsgaard. (based on the 2007.2 stack) |
Подготовленный toolchains можно скачать с downloads.openmoko.org:
- Создание папки где будут исходники:
mkdir ~/sources cd ~/sources
- В зависимости от вашего процессора(x86_64 или i686) скачиваем пакет с настройками:
wget http://downloads.openmoko.org/toolchains/openmoko-x86_64-arm-linux-gnueabi-toolchain.tar.bz2 или wget http://downloads.openmoko.org/toolchains/openmoko-i686-arm-linux-gnueabi-toolchain.tar.bz2
NOTE: Часть людей имеют проблемы с toolchain сборка 20080521. Если есть ошибки, то попробуйте другие версии, |
Далее, вы должны это распаковать это в вашу файловую систему. Этот toolchain не переносимый, и должен быть распакован строго в /usr/local/openmoko/. Теперь вы можете получить следующии опции:
- Распаковать напрямую имея права рута, используйте команду "su" вначале(или префикс "sudo" перед командой tar для пользователей Debian/Ubuntu):
cd / tar -xjvf ~/sources/openmoko-XYZ-arm-linux-gnueabi-toolchain.tar.bz2
- На системах основанных на Debian(например Ubuntu), вы может использовать alien(+fakeroot) для простого создания easy-to-uninstall пакета из текущего .tar.bz2:
bunzip2 openmoko-*-arm-linux-gnueabi-toolchain.tar.bz2 gzip openmoko-*-arm-linux-gnueabi-toolchain.tar fakeroot alien -d openmoko-*-arm-linux-gnueabi-toolchain.tar.gz sudo dpkg -i openmoko_*-arm-linux-gnueabi-toolchain*.deb
- Готовый toolchain это для x86_64 или i686. Если вы хотите, you could build it on your own with OE:
bitbake meta-toolchain-openmoko
В конце, каждый раз когда вы будете использовать этот toolchain, Вам енобходимо настроить переменные окружения, чтобы инструменты были найдены. The toolchain provides a script to do that, so the only thing you need to do is to source it. Note that if you are not using a "sh" or "bash" shell (check with "echo $SHELL") that you need to start "sh" or "bash" first.
. /usr/local/openmoko/arm/setup-env
- At least, you should add /usr/local/openmoko/arm/bin to your $PATH variable, otherwise the next steps won't work (om-conf and make).
export PATH=$PATH:/usr/local/openmoko/arm/bin
Note: This is will only last for your current session. Add it to your shell startup scripts to make it permenant (~/.bashrc for instance).
Установка новых библиотек
В Openmoko toolchain по умолчанию отсутствуют многие библиотеки. Однако, с его помощью вы можете скачать и установить библиотеки, которые уже существуют в репозитарии Openmoko. (По умолчанию обращение происходит к Тестовому Репозитарию.)
- Перед тем как скачивать библиотеки, необходимо изменить некоторые переменные окружения.
. /usr/local/openmoko/arm/environment-setup
- Во-первых, обновите базу данных opkg (Обратите внимание на необходимость использования псевдонима opkg-target вместо opkg)
opkg-target update
- Во-вторых, выберите какой из пакетов вам необходим. Для примера возьмем edje. Если вы хотите разрабатывать проект, который использует edje из Enlightenment, то вы можете использовать opkg-target list для того чтобы вывести на экране список всех пакетов, которые можно установить. Конечно жн, команда grep сильно облегчит задачу. (Помните, вам нужно установить еще и -dev пакет а не только libedje.)
opkg-target list |grep edje-dev
- В третьих, проинсталлируйте все что нужно
opkg-target install libedje-dev
- В четвертых, приготовьте чашечку кофе и запаситесь терпением.
Создаем пробный проект
В целевом каталоге (в этом примере ~/) необходимо проделать следующие действия:
- Скопировать предварительно скачанные исходники пробного проекта:
cp -r /usr/local/openmoko/source/openmoko-sample2 ~/
- Не забыть установить правильные переменные openmoko-окружения (опять же, в "sh" или "bash"):
. /usr/local/openmoko/arm/setup-env
- Создать сборочную конфигурацию для нашего приложения. Это действие, одновременно, проверяет все ли необходимые библиотеки, утилиты и т.д. доступны в вашей системе. Если это не срабатывает, смотрите указания по поводу необходимых пакетов в разделе "#Что необходимо" выше.
om-conf openmoko-sample2
- По желанию, на данном этапе вы можете внести изменения в исходный код в openmoko-sample2/src. Перед следующим шагом, перейдите в каталог с примером.
cd openmoko-sample2
- Если вы используете старую версию toolchain, вам может понадобиться создать makefile при помощи "./autogen.sh". В противном случае, чтобы собрать приложение из исходного кода, просто наберите:
make
- Если есть ошибки (например "You need to install gnome-common from the GNOME CVS") устраните их. Смотрите также раздел "Troubleshooting" в конце этой страницы для ознакомления с известными проблемами.
Если вы хотите оставить данный проект в системе для последующего использования в качестве, например, разделяемой библиотеки, вы можете выполнить следующие шаги, которые установят его по соответствующим путям с заданным конфигурационным префиксом.
om-conf --prefix=/usr/local/openmoko openmoko-sample2 cd openmoko-sample2 make install
Как из пробного проекта создать свой собственный
Чтобы собрать собственный проект используя файлы из openmoko-sample2, в них нужно внести некоторые изменения:
- скопируйте исходный код пробного проекта, который вы скачали
cp -r /usr/local/openmoko/source/openmoko-sample2 ~/
- дайте каталогу имя вашего проекта (в этом примере: your-project-name) и удалите старые файлы с исходным текстом
mv openmoko-sample2 your-project-name cd your-project-name cd src rm *.c
- скопируйте ваши исходники (в этом примере: your-sources) в каталог src/
cp your-sources . cd ..
- теперь в основном каталоге отредактируйте autogen.sh, исправив в нем следующие строки
PKG_NAME="your-project-name"
- отредактируйте configure.ac, исправив в нем следующие строки ('main.c' должен быть главным файлом вашего проекта)
AC_INIT(your-project-name, 0.0.1, http://www.openmoko.org/) AC_CONFIG_SRCDIR(src/main.c)
- перейдите в каталог data/ и дайте этим файлам имя вашего проекта
cd data mv openmoko-sample.png your-project-name.png mv openmoko-sample.desktop your-project-name.desktop
- отредактируйте Makefile.am в каталоге data/, исправив в нем следующие строки
dist_desktop_DATA = your-project-name.desktop dist_appicon_DATA = your-project-name.png
- отредактируйте Makefile.in в каталоге data/, исправив в нем следующие строки
dist_desktop_DATA = your-project-name.desktop dist_appicon_DATA = your-project-name.png
- отредактируйте your-project-name.desktop, исправив в нем следующие строки
Name=your-project-name Encoding=UTF-8 Version=0.0.1 Type=Application Exec=your-project-name
- и добавьте в него такую строку
Icon=your-project-name
- перейдите в каталог src/
cd .. cd src
- отредактируйте Makefile.am, исправив в нем следующие строки
bin_PROGRAMS = your-project-name your_project_name_SOURCES = \ main.c your_project_name_LDADD = @DEPENDENCIES_LIBS@
- убедитесь в том, что вместо main.c подставлены все ваши .c и .h файлы, а все символы '-' в именах переменных заменены на '_'
Packaging your application
We have included a script to make an ipkg out of your application. Note that this is not needed to test your application on the Neo (for that you can just scp the resulting binary and data over), however it's very handy if you want to distribute your application to others.
om-make-ipkg openmoko-sample2
Now you got openmoko-sample2_0.1_armv4t.ipk , you can `scp' it to your Neo and install it:
scp openmoko-sample2_0.1_armv4t.ipk root@192.168.0.202: ssh root@192.168.0.202 opkg install openmoko-sample2_0.1_armv4t.ipk
Note that while you can redistribute the generated ipkg, be aware that this is a bare-bones ipk that contains no further information, i.e. you will lack library dependencies. See below how to fix this.
You can also supply the version number, a description, and an author / contacts string in a control file:
om-make-ipkg myapp myapp_control
A template of myapp_control:
Package: $appname Version: 0.1 Description: package built by openmoko toolchain Section: openmoko/applications Priority: optional Maintainer: $USER Architecture: armv4t Homepage: http://www.openmoko.org/ Depends: Source: ${SRC}
Что делать дальше
Использование внешнего toolchain - это простой способ сборки приложений для вашего Neo. Если вы уже ознакомились с этой процедурой, возможно вы захотите разобраться с
- Использованием Qemu для тестирования приложений в режиме эмуляции
- Пользователи Ubuntu возможно предпочтут обратиться к Automatic emulation in Ubuntu/ru
- Использованием host-based development/ru для повышения вашей продуктивности
- Использованием OpenEmbedded/ru для адаптации образа дистрибутива к вашим специфическим нуждам.
Advanced topics
Building Openmoko Kernel from git repo using Toolchain
git clone git://git.openmoko.org/git/kernel.git linux-2.6 cd linux-2.6 git checkout -b mystable origin/stable cp defconfig-gta02 .config ./build
Will fail with error message "arm-angstrom-linux-gnueabi-ld: unrecognized option '-Wl,-rpath-link,/usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/lib'" until /usr/local/openmoko/arm/setup-env is modified. LDFLAGS should be changed from:
export LDFLAGS="-L${OMTOOL_DIR}/arm/arm-angstrom-linux-gnueabi/lib -Wl,-rpath-link,${OMTOOL_DIR}/arm/arm-angstrom-linux-gnueabi/lib -Wl,-O1"
to:
export LDFLAGS="-L${OMTOOL_DIR}/arm/arm-angstrom-linux-gnueabi/lib -rpath-link ${OMTOOL_DIR}/arm/arm-angstrom-linux-gnueabi/lib -O1"
I also had to change the 'build' script to hardcode the path to the compiler.
Использование библиотек из toolchain
Добавьте необходимые библиотеки к полю _LDADD в src/Makefile.am, например:
openmoko_sample2_LDADD = @DEPENDENCIES_LIBS@ -lmokogsmd2
Не забудьте выполнить om-conf еще раз после добавления.
Установка дополнительных библиотек для использования с toolchain
Рано или поздно вам захочется откомпилировать приложение с зависящее от чего-то, чего нет в готовом toolchain, например от каких-то малоизвестных библиотек.
В этом случае не стесняйтесь просить включения дополнительных библиотек в следующий релиз Openmoko toolchain. Ну а пока новый релиз не вышел, вы можете расширить уже инсталлированный toolchain следующим образом. Предположим, вам необходима библиотека liburiparse.
cd ~/source wget http://downloads.sourceforge.net/uriparser/uriparser-0.6.0.tar.bz2 tar xjf uriparser-0.6.0.tar.bz2 cd uriparser-0.6.0 ./configure --host=arm-angstrom-linux-gnueabi \ --prefix=/usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/usr make make install
Вот и все.
Getting your application packaged by OE
If you have written a cool application which you want to share with others, the best way to do that is to
- upload your application source code to a public location
- submit a BitBake recipe to OpenEmbedded, preferably via the OpenEmbedded bugtracker.
See also Customizing the Openmoko Distribution.
Troubleshooting
- Some Versions of the Toolchain have corrupt .la files. If you compile an application using the Toolchain and you receive a '/space/fic/openmoko-daily/neo1973/work/armv4t-angstrom-linux-gnueabi/pango-1.18.3-r0/pango-1.18.3/pango/libpangoft2-1.0.la' error, you are affected. To fix that you should go to your "/usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/usr/lib" directory and open the affected .la files and change "/space/fic..." to "/usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/usr/lib". You have to fix more than one .la file. For the pango error you have to change "libpangocairo-1.0.la", but there are more corrupt .la files.
Attached is a beta fix for the .la problem. Untar the .tar.bz2 as root, and execute the following bash script as root:
#!/bin/sh DIR=/usr/local/openmoko/arm for la in `find $DIR -iname \*.la`; do dependency_libs= . $la for lib in $dependency_libs ; do delib=`echo $lib | grep -E .la$` if [ -z $delib ] ; then echo -n elif [ -f $delib ]; then echo -n else basedelib=`basename $delib` replacedelibs=`find $DIR -iname $basedelib` found=0 for replacedelib in $replacedelibs ; do if [ $replacedelib == $delib ]; then found=1 fi done if [ $found -gt 0 ] ; then echo -n else sed_delib=`echo $delib | sed 's/\//\\\\\//g'` sed_replacedelib=`echo $replacedelib | sed 's/\//\\\\\//g'` # A bit slow, we could chain expressions for speed. :) cp $la $la.old cat $la | sed "s/$sed_delib/$sed_replacedelib/g" > $la.new mv $la.new $la rm $la.old fi fi done done
- Please use the Openmoko-Devel mailing list.