====== Инструкция по сборке Angstrom Linux для ME-MS1000 на Linux машине ====== За основу взяты инструкции с [[http://www.linux4sam.org/twiki/bin/view/Linux4SAM/OpenEmbeddedAngstrom|Linux4SAM]] Процедура сборки Angstrom Linux проверена на машинах: * Gentoo от 2008-02 * Fedora Core 7 === Утилиты необходимые для сборки === * Python (версии 2.4.0 или более поздней), а также возможно ряд файлов которые иногда включают в пакет с питоном иногда нет, если сборка bitbake не удалась попробуйте поставить пакет python-dev или python-devel, в завимости от дистрибутива название может отличаться * GNU Patch (версии 2.5.9 или более поздней) * GNU m4 * GNU make (Версии 3.80 или более поздней) * Psyco JIT компилятор рекомендуется для ускорения сборки * ccache * perl (нужна версия новее 5.0, скорее всего >=5.6.2 подойдет) * diffstat * bitbake ([[http://prdownload.berlios.de/bitbake/bitbake-1.8.6.tar.gz|bitbake]] должна быть версии 1.8.6, именно с этой версией тестировалась сборка) * wget * curl * ftp * cvs * subversion * git * md5sum * sha256sum * tar * bzip2 * gzip * unzip * Docbook DTDs и DSSSL stylesheets * sgmltools, called "sgmltools-lite" too * docbook-utils * Texinfo версии выше 4.4 * texi2html * GNU sed 4.x * Bison * bc * mktemp * help2man Для более подробных сведений, касательно вашего дистрибутива Linux, на котором выполняется сборка, обратитесь к [[http://wiki.openembedded.net/index.php/OEandYourDistro|странице]]. ===== Установка необходимых утилит в Fedora Core 7 ===== su -c "yum install python m4 make wget curl ftp cvs subversion \ tar bzip2 gzip unzip python-psyco ccache perl texinfo texi2html diffstat \ openjade docbook-style-dsssl docbook-style-xsl docbook-dtds docbook-utils \ sed bison bc glibc-devel gcc binutils pcre pcre-devel git quilt groff \ linuxdoc-tools patch linuxdoc-tools gcc gcc-c++ help2man perl-ExtUtils-MakeMaker" ===== Установка необходимых утилит в Debian и Ubuntu ===== apt-get install ccache sed wget cvs subversion git-core \ coreutils unzip texi2html texinfo libsdl1.2-dev docbook-utils \ gawk python-pysqlite2 diffstat help2man ===== Файлы необходимые для сборки ===== * создайте директорию скажем $HOME/oe и (cd $HOME/oe), путь до этой директории в дальнейшем будем обозначать $OE * скачайте любой срез базы репозитория OpenEmbedded [[http://wiki.openembedded.net/snapshots/OE.mtn.bz2]] * создайте директорию $OE/stuff и перейдите в нее * распакуйте срез базы OE.mtn.bz2 bunzip2 OE.mtn.bz2 * выполните команду: mtn --db=OE.mtn db migrate * далее выполните команду mtn --db=OE.mtn checkout -r aa44d626baaae40ee498aea453176a8aea90d9fc --branch=org.openembedded.dev для получния нужной ревизии OpenEmbedded * Скачайте и примените патч для me-ms1000 [[http://www.mentorel.com/downloads/sbc-9263/oe_angstrom_at91-me-ms1000xxx.diff.gz]] cd $OE/stuff/org.openembedded.dev zcat ../oe_angstrom_at91-me-ms1000xxx.diff.gz | patch -p0 cd .. ===== Переменные окружения ===== **Для Gentoo**: проверьте установленна ли переменная окружения **LINGUAS**, если сборка завершиться с ошибкой не могу скопировать, найти и т.п., файл c расширением "mo", попробуйте собирать с unset LINGUAS перед этим удалив из stamps маркеры относящиеся к несобравщемуся пакету. Распакуйте bitbake в директорию $OE/stuff, затем создайте символьную ссылку на директорию с bitbake: ln -s bitbake-1.8.6 bitbake Создайте скрипт env-oe.sh со следующим содержанием #!/bin/sh OE_DIR=/stuff export PATH=${OE_DIR}/bitbake/bin:$PATH export BBPATH=${OE_DIR}/build:${OE_DIR}/org.openembedded.dev Запустите скрипт, чтобы считать переменные окружения: source ./env-oe.sh ===== Сборка ===== Отредактируйте $OE/org.openembedded.dev/conf/local.conf следующим образом: 1) поправьте переменные: BBFILES - где искать bb файлы, обычно это $OE/org.openembedded.dev/packages/*/*.bb DL_DIR - куда скачивать архивы с исходниками (не обязательно) 2) На многопроцессорных системах можно ускорить сборки образов, включив параллельную сборку: PARALLEL_MAKE = "-j4" BB_NUMBER_THREADS = "8" //Эти параметры нужно настроить под конкретную производительность, иначе ОС перестанет реагировать на ваши действия.// Попробуйте сначала собрать минимальное количество пакетов: bitbake angstrom-minimal-image Если все собралось удачно запустите сборку образа linux с графическим интерфейсом: bitbake angstrom-x11-image-demo ===== Возможные ошибки при сборке ===== * binutils не собираются Ошибка: missing makeinfo Решение: установите texinfo версии выше 4.4 * coreutils не собираются Ошибка: в логе ошибок упоминается что futimens уже объявлена, и имеет другую сигнатуру Решение: патч Index: coreutils-5.3.0/lib/utimens.c =================================================================== --- coreutils-5.3.0.orig/lib/utimens.c +++ coreutils-5.3.0/lib/utimens.c @@ -55,7 +55,7 @@ struct utimbuf If TIMESPEC is null, set the time stamps to the current time. */ int -futimens (int fd ATTRIBUTE_UNUSED, +my_futimens (int fd ATTRIBUTE_UNUSED, char const *file, struct timespec const timespec[2]) { /* There's currently no interface to set file timestamps with @@ -117,5 +117,5 @@ futimens (int fd ATTRIBUTE_UNUSED, int utimens (char const *file, struct timespec const timespec[2]) { - return futimens (-1, file, timespec); + return my_futimens (-1, file, timespec); } Index: coreutils-5.3.0/lib/utimens.h =================================================================== --- coreutils-5.3.0.orig/lib/utimens.h +++ coreutils-5.3.0/lib/utimens.h @@ -1,3 +1,3 @@ #include "timespec.h" -int futimens (int, char const *, struct timespec const [2]); +int my_futimens (int, char const *, struct timespec const [2]); int utimens (char const *, struct timespec const [2]); Index: coreutils-5.3.0/src/touch.c =================================================================== --- coreutils-5.3.0.orig/src/touch.c +++ coreutils-5.3.0/src/touch.c @@ -191,7 +191,7 @@ touch (const char *file) t = timespec; } - ok = (futimens (fd, file, t) == 0); + ok = (my_futimens (fd, file, t) == 0); if (fd != -1) ok &= (close (fd) == 0); * ncurses-5.4 не собирается (воспроизводится на **Fedora Core 7**) Ошибка: tic: symbol lookup error: tic: undefined symbol: _nc_check_termtype Решение: Необходимо правильно установить значение переменной окружения LD_LIBRARY_PATH, чтобы включить библиотеки libncurses*.so.* для i686. Сами библиотеки находятся тут: $OE/stuff/tmp/staging/i686-linux/lib Для этого правим файл run_tic.sh в директории $OE/stuff/tmp/work/armv5te-angstrom-linux-gnueabi/ncurses-5.4-r8/ncurses-5.4/misc/ находим строки и добавляем "export LD_LIBRARY_PATH=..." как написано: export PATH SHLIB="sh $srcdir/shlib" else # Cross-compiling, so don't set PATH or run shlib. SHLIB= fi export LD_LIBRARY_PATH=/stuff/tmp/staging/i686-linux/lib # * rxvt-unicode-7.9 не собирается (воспроизводится на **Fedora Core 7**) Ошибка: tic: symbol lookup error: tic: undefined symbol: _nc_check_termtype Решение: Необходимо исправить файл: $OE/stuff/tmp/work/armv5te-angstrom-linux-gnueabi/rxvt-unicode-7.9-r0/rxvt-unicode-7.9/doc/Makefile Для этого в блоке **install** надо исправить последнюю строку, указав путь к библиотекам libncurses*.so.* для i686. Сами библиотеки находятся тут: $OE/stuff/tmp/staging/i686-linux/lib В Makefile заменяем строку #107: if test -x "/stuff/tmp/staging/i686-linux/bin/tic"; then if test -n "/stuff/tmp/staging/i686-linux/bin/tic"; then /stuff/tmp/staging/i686-linux/bin/tic etc/rxvt-unicode.terminfo; fi; fi на: if test -x "/stuff/tmp/staging/i686-linux/bin/tic"; then if test -n "/stuff/tmp/staging/i686-linux/bin/tic"; then export LD_LIBRARY_PATH=/stuff/tmp/staging/i686-linux/lib ; /stuff/tmp/staging/i686-linux/bin/tic etc/rxvt-unicode.terminfo; fi; fi