Установка и настройка OpenEmbedded

OpenEmbedded - система сборки, которую использует Variscite, используемая для установки дополнительных средств разработки, пакетов, приложений и библиотек.

Дальнейшее описание на примере модуля VAR-SOM-OM37, но подойдет также для VAR-SOM-AM35, VAR-SOM-OM35.

Установка OpenEmbedded

Сперва нужно прописать на рабочей машине в $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

  • VARISCITE_CD - корень диска
  • VARISCITE_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

Использовать OpenEmbedded достаточно просто, нужно перейти в $OEBASE/build и выполнить там:

bitbake -v <имя-пакета>

BitBake скачает все необходимые исходники, скомплирует их и в итоге создаст один или несколько *.ipk файлов, которые можно с помощью SCP залить на модуль и установить их там.

При самом первом запуске BitBake будет работать очень долго, где-то полдня, т.к ему нужно будет скачать и скомпилировать все базовые пакеты, далее, по мере необходимости, можно вызывать:

bitbake -v <имя-пакета>

и пакеты будут создаваться быстрее.

К сожалению, просто запустить bitbake и уйти не получится, в процессе работы могут происходить ошибки, их будет не так много, но их придётся исправлять «руками», возможны 2 типа ошибок:

  • Не качается архив с исходниками, т.к сервер в оффлайне. В этом случае нужно нажать ctrl + c, посмотреть какой архив BitBake не смог скачать, скачать его самостоятельно из какого-нибудь другого источника, скопировать в каталог $OEBASE/build/my-sources и перезапустить BitBake.
  • Не совпадает MD5 или SHA256 контрольная сумма. Это случается когда maintainer исходников немного изменяет содержимое архива и не увеличивает минорную версию, в этом случае нужно самому пересчитать контольную сумму архива, обновить соответствующий *.bb файл и перезапустить BitBake.

Например, если 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%, значит всё нормально, что-то чекаутится, нужно просто подождать.

Пример использования OpenEmbedded

Допустим мы хотим поставить на модуле 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 на рабочей машине можно собирать софт прямо в /nfs/variscite и запускать с модуля без лишних действий.

Полезные ссылки

howto/openembedded.txt · Последние изменения: 2015/05/29 14:45 (внешнее изменение)
 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki