====== Инструкция по сборке 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