OpenEmbedded - система сборки, которую использует Variscite, используемая для установки дополнительных средств разработки, пакетов, приложений и библиотек.
Дальнейшее описание на примере модуля VAR-SOM-OM37, но подойдет также для VAR-SOM-AM35, VAR-SOM-OM35.
Сперва нужно прописать на рабочей машине в $HOME/.profile следующее:
export OEBASE="$HOME/varioe" export PATH="${PATH}:$OEBASE/bitbake/bin" export BBPATH="$OEBASE/build:$OEBASE/openembedded" export BB_ENV_EXTRAWHITE="OEBASE"
И перелогиниться, чтобы переменные окружения установились, затем выполнить:
mkdir -p $OEBASE/build/conf
и
cd $OEBASE wget http://download.berlios.de/bitbake/bitbake-1.10.2.tar.gz tar -xvzf bitbake-1.10.2.tar.gz mv bitbake-1.10.2 bitbake
Это установит BitBake - систему компиляции пакетов.
Далее нужно выполнить:
cd $OEBASE git clone git://git.openembedded.org/openembedded
Эта команда скачает сам OpenEmbedded.
Теперь нужно скопировать $OEBASE/openembedded/conf/local.conf.sample в $OEBASE/build/conf/local.conf
Теперь нам нужен Variscite CD или доступ к FTP-серверу.
Нам нужен файл $VARISCITE_CD/VAR-SOM-OM35_VAR-SOM-OM37_VAR-SOM-AM35/Software/2_6_37-Release1/OpenEmbedded/var-som-xx.patch
Далее, выполним:
cd $OEBASE/openembedded git branch var-som-om37 9e1aa4d02aed8ade9bbbc60ccab4aa58fe1bd2fd git checkout var-som-om37 git apply $VARISCITE_PATCH
Затем откроем $OEBASE/build/conf/local.conf и допишем в конец:
BBFILES = "${OEBASE}/openembedded/recipes/*/*.bb" DISTRO = "angstrom-2010.x" MACHINE = "var-som-om37"
также найдём строчку:
DL_DIR = "${HOME}/sources"
и заменим её на:
DL_DIR = "${OEBASE}/build/my-sources"
а также удалим строчки:
BBFILES := "${@bb.fatal('Edit your conf/local.conf: BBFILES')}"
и
REMOVE_THIS_LINE:="${@bb.fatal('Read the comments in your conf/local.conf')}"
Теперь удалим каталог:
$OEBASE/openembedded/recipes/cacao
Этот пакет содержит ошибки в .bb файлах и если его не удалить, то ничего не соберётся.
Теперь, нужно поставить инструменты, которые требует BitBake, в Ubuntu/Debian это можно сделать так:
sudo apt-get install diffstat texi2html cvs chrpath texinfo
Затем нужно выполнить:
sudo dpkg-reconfigure dash
И ответить - «no».
Использовать OpenEmbedded достаточно просто, нужно перейти в $OEBASE/build и выполнить там:
bitbake -v <имя-пакета>
BitBake скачает все необходимые исходники, скомплирует их и в итоге создаст один или несколько *.ipk файлов, которые можно с помощью SCP залить на модуль и установить их там.
При самом первом запуске BitBake будет работать очень долго, где-то полдня, т.к ему нужно будет скачать и скомпилировать все базовые пакеты, далее, по мере необходимости, можно вызывать:
bitbake -v <имя-пакета>
и пакеты будут создаваться быстрее.
К сожалению, просто запустить bitbake и уйти не получится, в процессе работы могут происходить ошибки, их будет не так много, но их придётся исправлять «руками», возможны 2 типа ошибок:
Например, если BitBake не качает pkg-config-0.23.tar.gz, нажимаем ctrl + c, качаем архив сами, кладём в:
$OEBASE/build/my-sources
и снова выполняем:
bitbake -v <имя-пакета>
Другой пример, если BitBake вылетает, потому что не совпадает контрольная сумма архива binutils-2.20.1.tar.bz2, то нужно выполнить:
cd $OEBASE/build/my-sources md5sum binutils-2.20.1.tar.bz2 sha256sum binutils-2.20.1.tar.bz2
Открыть файл ${OEBASE}/openembedded/recipes/binutils/binutils_2.20.1.bb и отредактировать строки:
SRC_URI[tarball.sha256sum] = "71d37c96451333c5c0b84b170169fdcb138bbb27397dc06281905d9717c8ed64" SRC_URI[tarball.md5sum] = "2b9dc8f2b7dbd5ec5992c6e29de0b764"
соответствующим образом и снова выполнить:
bitbake -v <имя-пакета>
Стоит учесть ещё и то, что некоторые исходники качаются не как .tar.gz/.tar.bz2, а просто делается svn/cvs/git checkout из соответствующего репозитория, иногда бывает так что этот checkout длится около часа, это не ошибка, это нормально, если вы видите что checkout «висит», то не стоит спешить делать ctrl + c, можно выполнить:
top
и посмотреть занят ли процессор, если процесс, скажем «git», жрёт под 100%, значит всё нормально, что-то чекаутится, нужно просто подождать.
Допустим мы хотим поставить на модуле mc (Midnight Commander) и nfsutils, чтобы можно было примонтировать NFS шару на нашей рабочей машине для удобства работы, для этого переходим в $OEBASE/build и выполняем сначала:
bitbake -v mc
затем:
bitbake -v nfs-utils
Исправляем все ошибки как описано выше и в итоге в каталоге $OEBASE/build/tmp/deploy/eglibc/ipk будет всё необходимое. Не нужно брать все пакеты, достаточно только те что необходимы для работы mc и nfs-utils, а именно:
libblkid1_2.18-r36.0.9_armv7a.ipk libc6_2.12-r21.8+svnr13230.9_armv7a.ipk libglib-2.0-0_2.28.5-r2.9_armv7a.ipk libncurses5_5.9-r1.9_armv7a.ipk libncursesw5_5.9-r1.9_armv7a.ipk libtinfo5_5.9-r1.9_armv7a.ipk libuuid1_2.18-r36.0.9_armv7a.ipk libwrap0_7.6-r6.9_armv7a.ipk mc_4.7.5-r7.0.9_armv7a.ipk mc-hilite_4.7.5-r7.0.9_all.ipk mc-skins_4.7.5-r7.0.9_armv7a.ipk ncurses_5.9-r1.9_armv7a.ipk ncurses-static_5.9-r1.9_armv7a.ipk ncurses-terminfo_5.9-r1.9_armv7a.ipk ncurses-terminfo-base_5.9-r1.9_armv7a.ipk nfs-utils_1.1.2-r9.9_armv7a.ipk nfs-utils-client_1.1.2-r9.9_armv7a.ipk portmap_6.0-r5.9_armv7a.ipk update-rc.d_0.7-r2.9_all.ipk
Далее, эти пакеты нужно залить на модуль, сделать это можно с помощью SCP, для начала нужно открыть терминал на модуле и выполнить там:
dropbear
Это запустит SSH сервер.
Все вышеперечисленные пакеты можно скинуть в один каталог, допустим в $HOME/variscite/packages и выполнить на рабочей машине:
scp -r $HOME/variscite/packages root@192.168.0.105:/home/root/.
После того как пакеты закачены на модуль их надо установить, для этого воспользуемся утилитой:
opkg
Но перед этим нужно создать каталог »/usr/lib/opkg», если его ещё не существует, иначе opkg будет выдавать ошибку:
Collected errors: * Could not obtain administrative lock
После этого нужно выполнить:
opkg install 1.ipk 2.ipk ...
И если все зависимости удовлетворены, то opkg установит пакеты, если нет, то он выдаст сообщение о том каких зависимостей не хватает. Для примера, описанного выше, можно перейти в каталог /home/root/packages и выполнить там:
opkg install libblkid1_2.18-r36.0.9_armv7a.ipk \ libc6_2.12-r21.8+svnr13230.9_armv7a.ipk \ libglib-2.0-0_2.28.5-r2.9_armv7a.ipk \ libncurses5_5.9-r1.9_armv7a.ipk \ libncursesw5_5.9-r1.9_armv7a.ipk \ libtinfo5_5.9-r1.9_armv7a.ipk \ libuuid1_2.18-r36.0.9_armv7a.ipk \ libwrap0_7.6-r6.9_armv7a.ipk \ mc_4.7.5-r7.0.9_armv7a.ipk \ mc-hilite_4.7.5-r7.0.9_all.ipk \ mc-skins_4.7.5-r7.0.9_armv7a.ipk \ ncurses_5.9-r1.9_armv7a.ipk \ ncurses-static_5.9-r1.9_armv7a.ipk \ ncurses-terminfo_5.9-r1.9_armv7a.ipk \ ncurses-terminfo-base_5.9-r1.9_armv7a.ipk \ nfs-utils_1.1.2-r9.9_armv7a.ipk \ nfs-utils-client_1.1.2-r9.9_armv7a.ipk \ portmap_6.0-r5.9_armv7a.ipk \ update-rc.d_0.7-r2.9_all.ipk
Теперь в консоли можно выполнить:
mc
И midnight commander запустится.
Для удобной работы можно смонтировать NFS.
О том, как это сделать написано здесь.
Смонтировав NFS на рабочей машине можно собирать софт прямо в /nfs/variscite и запускать с модуля без лишних действий.