====== Компиляция Angstrom Linux для BlueShark ======
Очень полезная документация для тех, кто хочет в совершенстве овладеть приемами работы с OpenEmbedded: [[http://docs.openembedded.ru/index.html]]
Процедура сборки Angstrom Linux проверена на машинах:
* **Ubuntu 9.10**
Для компиляции Angstrom Linux потребуется около 15ГБ свободного места на диске. Время компиляции сильно зависит от:
* Скорости Internet, т.к. все исходники выкачиваются с глобальных серверов
* Мощности процессора (рекомендуется иметь процессор не ниже Intel Core2 Duo 3ГГц)
* Объема оперативной памяти (рекомендуется 2ГБ)
//На одноядерном процессоре время компиляции может занимать сутки.//
=== Утилиты необходимые для сборки ===
* 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
===== Установка необходимых утилит в 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 python-psyco
====== Angstrom Linux stable ======
За основу взяты инструкции отсюда: [[http://www.angstrom-distribution.org/building-angstrom]]
===== Ядро 2.6.29 stable =====
В настоящее время в **стабильной** ветке компилируется именно ядро 2.6.29.
==== Создание окружения ====
Данные инструкции предполагают компиляцию Angstrom Linux в домашней директории пользователя, поэтому убедитесь, что ней достаточно места (не менее 6-15ГБ).
Войдите в домашнюю директорию пользователя:
# cd
Выполните следующие команды, которые скачивают хранилище файлов OpenEmbedded:
export OETREE="${HOME}/OE"
mkdir -p ${OETREE} && cd ${OETREE}
git clone git://git.openembedded.org/openembedded.git openembedded
cd openembedded
git checkout origin/stable/2009 -b stable/2009
Обновите локальную копию хранилища OE:
cd ${OETREE}/openembedded
git pull
==== Создание конфигурации ====
Сначала необходимо установить переменные окружения, для этого скачайте [[http://www.angstrom-distribution.org/files/source-me.txt|скрипт]] в директорию ${OETREE}.
Чтобы создать конфигурацию OE именно для Beagleboard (BlueShark) выполните следующие действия:
1) Создайте директорию для файла конфигурации local.conf для платформы
mkdir -p ${OETREE}/build/conf
2) Скопируйте пример конфигурации:
cp ${OETREE}/openembedded/contrib/angstrom/local.conf ${OETREE}/build/conf/
3) Добавьте в конец файла строку:
MACHINE="beagleboard"
==== Компиляция файловой системы ====
Вы можете не тратить несколько часов и взять готовую файловую систему отсюда [[http://mentorel.com/downloads/blueshark/]] и сразу же перейти к компиляции ядра.
Обратите внимание, что файловая система с меткой **stable** относится к стабильной, т.е. получена по инструкциям, использованным в этом разделе.
* Добавьте в конец файла "/etc/sysctl.conf" строку и перезагрузите Ubuntu:
vm.mmap_min_addr = 0
* Установите переменные окружения:
cd ${OETREE}
source source-me.txt
* Зайдите в директорию OE:
cd ${OETREE}/openembedded
* Убедитесь, что репозиторий OpenEmbedded имеет последние обновления
git pull --rebase
* Зайдите в директорию ${OETREE}/build, где будут хранится файлы:
cd ${OETREE}/build
* Начинайте компиляцию образа для работы через консоль
bitbake console-image
Чтобы собрать образ с поддержкой графического интерфейса наберите команду:
bitbake x11-image
**Если появилось следующее сообщение об ошибке:**
ERROR: Openembedded's config sanity checker detected a potential misconfiguration.
Either fix the cause of this error or at your own risk disable the checker (see sanity.conf).
Following is the list of potential problems / advisories:
Using dash as /bin/sh causes various subtle build problems, please use bash instead.
то нужно выполнить следующую команду, выбрав ответ "NO":
sudo dpkg-reconfigure dash
==== Результаты компиляции ====
По окончании работы утилиты bitbake вы должны увидеть следующую надпись:
NOTE: Tasks Summary: Attempted 2928 tasks of which 0 didn't need to be rerun and 0 failed.
Это означает, что в директории ${OETREE}/angstrom-dev/deploy/glibc/images/beagleboard находятся:\\
^ Имя ^ Размер ^
|[[http://mentorel.ru/downloads/blueshark/u-boot.bin|u-boot.bin]] | 193k |
|[[http://mentorel.ru/downloads/blueshark/uImage-2.6.29-r46-beagleboard.bin|uImage-2.6.29-r46-beagleboard.bin]] | 2.9M |
|[[http://mentorel.ru/downloads/blueshark/Angstrom-console-image-glibc-ipk-2009.X-stable-beagleboard.rootfs.tar.bz2|console-image-beagleboard.tar.bz2]] | 9.2M |
|[[http://mentorel.ru/downloads/blueshark/Angstrom-x11-image-glibc-ipk-2009.X-stable-beagleboard.rootfs.tar.bz2|x11-image-beagleboard.tar.bz2]] | 21.1M |
|[[http://mentorel.ru/downloads/blueshark/modules-2.6.29-r46-beagleboard.tgz|modules-2.6.29-r46-beagleboard.tgz]] | 7.1M |
|[[http://mentorel.ru/downloads/blueshark/Angstrom-Beagleboard-demo-image-glibc-ipk-2009.X-stable-20090612--beagleboard.rootfs.tar.bz2|Beagleboard-demo]]| 131M |
Из этих файлов нам подойдут только файловые системы с консольным интерфейсом (Angstrom-console-image..) и графическим интерфейсом (Angstrom-x11-image..). u-boot, ядро и модули для него нам не подходят, т.к. они обеспечат только функционал Beagleboard, для которого не предусмотрена поддержка сетевого контроллера LAN9221 (однако этот контроллер поддерживается в OpenEmbedded для модуля OVERO).
Далее скомпилируем ядро Linux для BlueShark.
===== Компиляция ядра 2.6.29 =====
//С этим ядром также работает файловая система [[http://mentorel.ru/downloads/blueshark/Angstrom-Beagleboard-demo-image-glibc-ipk-2009.X-stable-20090612--beagleboard.rootfs.tar.bz2|Beagleboard-demo]], где присутствуют Internet браузер и другое интересное ПО.//
Поддержка функций на платформе Atoll:
* Ethernet
* MMC1
//Обратите внимание, что все предыдущие действия приводят к компиляции кросс-компилятора GCC с патчами от OpenEmbedded. Применение именно собранного компилятора гарантирует 100% совместимость с файловой системой от OpenEmbedded и дает возможность использовать файловую систему от [[http://www.angstrom-distribution.org/demo/beagleboard/|Koen]] или [[http://www.angstrom-distribution.org/narcissus/|Narcissus]].//
Откройте файл $OETREE/build/conf/local.conf:
# Where to store sources
DL_DIR = "${HOME}/OE/downloads"
INHERIT += " rm_work "
# Make sure you have these installed
ASSUME_PROVIDED += "gdk-pixbuf-csource-native imagemagick-native librsvg-native"
.....
и выключите строку:
#INHERIT += " rm_work "
Ключ **rm_work** удаляет все промежуточные файлы при компиляции: исходные тексты, объекты и пр. Нам потребуются исходники ядра плюс весь необходимый набор патчей от OpenEmbedded. Можно, конечно, подготовить всё вручную, но проще и с наименьшими ошибками выполнить так.
Таким образом мы выключили удаление исходников при компиляции. Теперь пересоберем ядро для Beagleboard и, наконец, получим необходимое окружение для дальнейшей работы с ядром:
bitbake virtual/kernel -c clean; bitbake virtual/kernel
Теперь в директории "$OETREE/angstrom-dev/work/beagleboard-angstrom-linux-gnueabi/linux-omap-2.6.29-r46/git" находятся исходные тексты ядра 2.6.29 с уже примененными патчами для Beagleboard.
Добавим к ядру патчи для модуля BlueShark и отладочных плат Atoll. Для этого зайдите в директорию "$OETREE/angstrom-dev/work/beagleboard-angstrom-linux-gnueabi/linux-omap-2.6.29-r46/git", скачайте набор патчей [[http://mentorel.com/downloads/blueshark/blueshark-2.6.29.patches.tgz]] и распакуйте архив прямо в корень исходников ядра:
cd $OETREE/angstrom-dev/work/beagleboard-angstrom-linux-gnueabi/linux-omap-2.6.29-r46/git
wget http://mentorel.com/downloads/blueshark/blueshark-2.6.29.patches.tgz
tar xzf blueshark-2.6.29.patches.tgz
Теперь можно применить исправления для BlueShark:
quilt push -a
Скачаем файл конфигурации ядра:
wget http://mentorel.com/downloads/blueshark/defconfig-2.6.29
cp defconfig-2.6.29 .config
Чтобы настроить конфигурацию ядра используют команду:
make ARCH=arm CROSS_COMPILE=$OETREE/angstrom-dev/cross/armv7a/bin/arm-angstrom-linux-gnueabi- menuconfig
Компиляция ядра (обратите внимание на опцию -j2, в ней вы задаете кол-во ядер процессора на вашем компьютере):
make -j2 ARCH=arm CROSS_COMPILE=$OETREE/angstrom-dev/cross/armv7a/bin/arm-angstrom-linux-gnueabi- uImage
Компиляция модулей:
make -j2 ARCH=arm CROSS_COMPILE=$OETREE/angstrom-dev/cross/armv7a/bin/arm-angstrom-linux-gnueabi- modules
Установите модули в файловую систему на SD-карточке:
sudo make -j2 ARCH=arm CROSS_COMPILE=$OETREE/angstrom-dev/cross/armv7a/bin/arm-angstrom-linux-gnueabi- modules_install INSTALL_MOD_PATH=/media/rootfs
В результате получаем бинарник, который необходимо записать на SD-карту (партицию FAT32) и можно загружать платформы, основанные на модуле BlueShark.
^Скомпилированный uImage|
| [[http://mentorel.ru/downloads/blueshark/demo/uImage-2.6.29-r46-beagleboard.bin]] |
====== Angstrom Linux unstable ======
За основу взяты инструкции отсюда: [[http://wiki.openembedded.org/index.php/Getting_Started]]
Далее описаны действия, верные для всех версий ядра нестабильной ветки:
==== Создание окружения ====
Войдите в домашнюю директорию пользователя:
# cd
Выполните следующие команды, которые скачивают хранилище файлов OpenEmbedded:
export OETREE="${HOME}/OE"
mkdir -p ${OETREE} && cd ${OETREE}
git clone git://git.openembedded.org/openembedded
Обновите локальную копию хранилища OE:
cd ${OETREE}/openembedded
git pull
==== Установка bitbake ====
Лучше использовать локальную версию утилиты **bitbake**, чем устанавливать её в Linux.
cd ${OETREE}
wget http://download.berlios.de/bitbake/bitbake-1.8.18.tar.gz
tar xzf bitbake-1.8.18.tar.gz -C bitbake
==== Создание конфигурации ====
cd ${OETREE}
cp openembedded/conf/local.conf.sample build/conf/local.conf
Теперь необходимо исправить файл "build/conf/local.conf", добавив в него следющие строки:
BBFILES = "${HOME}/OE.dev/openembedded/recipes/*/*.bb"
DISTRO = "angstrom-2008.1"
MACHINE = "beagleboard"
Также, если у вашего ПК многоядерный процессор, то можно ускорить компиляцию, установив следующие параметры:
PARALLEL_MAKE = "-j 4"
BB_NUMBER_THREADS = "2"
Описания этих параметров вы найдете в файле "build/conf/local.conf".
//Внимание! Чтобы сократить количество расходуемого места на диске добавьте опцию://
INHERIT += "rm_work"
Также можете указать, где у вас находится хранилище пакетов или куда именно они будут скачены:
DL_DIR = "${HOME}/OE/downloads"
Сохраните файл "build/conf/local.conf".
==== Установка окружения ====
export BBPATH=$OETREE/build:$OETREE/openembedded
export PATH=$OETREE/bitbake/bin:$PATH
==== Компиляция файловой системы ====
Вы можете не тратить несколько часов и взять готовую файловую систему отсюда\\
[[http://www.angstrom-distribution.org/demo/beagleboard/Angstrom-Beagleboard-demo-image-glibc-ipk-2010.3-beagleboard.rootfs.tar.bz2]]
или
[[http://mentorel.com/downloads/blueshark/]] и сразу же перейти к компиляции ядра. Обратите внимание, что файловую систему **Beagleboard-demo** собрать самому практически нереально, т.к. требуется разрешить зависимости для очень многих пакетов. При этом используется ПО от Texas Instruments, поставляемое по соглашению. Использовать сборки от Beagleboard-сообщества намного проще и быстрее.
Зайдите в папку **build** и наберите команды:
* Компиляцию образа для работы через консоль
bitbake console-image
* Компиляция образа с поддержкой графического интерфейса наберите команду:
bitbake x11-image
//Внимание, компиляция обычно занимает несколько часов и не всегда завершается успешно, т.к. это **нестабильная** ветка.//
===== Ядро 2.6.32 unstable =====
==== Компиляция без среды OE ====
Ядро Linux 2.6.32-r78 можно скомпилировать без громоздкой системы OpenEmbedded. Для этого выполняют следующие шаги:
1) Скачивают исходники ядра 2.6.32-r78\\
[[http://mentorel.com/downloads/blueshark/git_arago-project.org.git.people.sriram.ti-psp-omap.git_a6bad4464f985fdd3bed72e1b82dcbfc004d7869.tar.gz]]
wget http://mentorel.com/downloads/blueshark/git_arago-project.org.git.people.sriram.ti-psp-omap.git_a6bad4464f985fdd3bed72e1b82dcbfc004d7869.tar.gz
2) Скачивают набор исправлений для платформы BlueShark+Atoll-Deluxe\\
[[http://mentorel.com/downloads/blueshark/blueshark-2.6.32-r78.patches.tgz]]
wget http://mentorel.com/downloads/blueshark/blueshark-2.6.32-r78.patches.tgz
3) Скачивают defconfig для ядра\\
[[http://mentorel.com/downloads/blueshark/defconfig-2.6.32-r78]]
wget http://mentorel.com/downloads/blueshark/defconfig-2.6.32-r78
4) Теперь необходимо распаковать все исходники:
tar xzf git_arago-project.org.git.people.sriram.ti-psp-omap.git_a6bad4464f985fdd3bed72e1b82dcbfc004d7869.tar.gz
cd git
tar xzf ../blueshark-2.6.32-r78.patches.tgz
5) Накладываем исправления для BlueShark:
quilt push -a
6) Настраиваем конфигурацию ядра:
cp ../defconfig-2.6.32-r78 .config
make ARCH=arm menuconfig
7) Собственно сама компиляция
make -j2 ARCH=arm CROSS_COMPILE=~/OE.dev/build/tmp/cross/armv7a/bin/arm-angstrom-linux-gnueabi- uImage
8) Модули можно скомпилировать с помощью команды
make -j2 ARCH=arm CROSS_COMPILE=~/OE.dev/build/tmp/cross/armv7a/bin/arm-angstrom-linux-gnueabi- modules
Либо использовать готовые, т.к. модули одинаковы для всех платформ одной архитектуры:\\
[[http://mentorel.com/downloads/blueshark/demo/modules-2.6.32-r78.tgz]]
wget http://mentorel.com/downloads/blueshark/demo/modules-2.6.32-r78.tgz
==== Компиляция в среде OE ====
Поддержка функций на платформе Atoll.\\
Есть поддержка всех функций, включая:
* Ethernet
* MMC1
* MMC2
Откройте файл $OETREE/build/conf/local.conf и выключите строку:
#INHERIT += " rm_work "
Ключ **rm_work** удаляет все промежуточные файлы при компиляции: исходные тексты, объекты и пр. Нам потребуются исходники ядра плюс весь необходимый набор патчей от OpenEmbedded. Можно, конечно, подготовить всё вручную, но проще и с наименьшими ошибками выполнить так.
Теперь пересоберем ядро для Beagleboard и, наконец, получим необходимое окружение для дальнейшей работы с ядром:
bitbake virtual/kernel -c clean; bitbake virtual/kernel
Теперь в директории "$OETREE/build/tmp/work/beagleboard-angstrom-linux-gnueabi/linux-omap-psp-2.6.32-r78+gitra6bad4464f985fdd3bed72e1b82dcbfc004d7869/git" находятся исходные тексты ядра 2.6.32 с уже примененными патчами для Beagleboard.
Добавим к ядру патчи для модуля BlueShark и отладочных плат Atoll. Для этого зайдите в директорию "$OETREE/build/tmp/work/beagleboard-angstrom-linux-gnueabi/linux-omap-psp-2.6.32-r78+gitra6bad4464f985fdd3bed72e1b82dcbfc004d7869/git", скачайте набор патчей [[http://mentorel.com/downloads/blueshark/blueshark-2.6.32-r78.patches.tgz]] и распакуйте архив прямо в корень исходников ядра:
cd $OETREE/build/tmp/work/beagleboard-angstrom-linux-gnueabi/linux-omap-psp-2.6.32-r78+gitra6bad4464f985fdd3bed72e1b82dcbfc004d7869/git
wget http://mentorel.com/downloads/blueshark/blueshark-2.6.32-r78.patches.tgz
tar xzf blueshark-2.6.32-r78.patches.tgz
Теперь можно применить исправления для BlueShark:
quilt push -a
Скачаем файл конфигурации ядра:
wget http://mentorel.com/downloads/blueshark/defconfig-2.6.32-r78
cp defconfig-2.6.32-r78 .config
Чтобы настроить конфигурацию ядра используют команду:
make ARCH=arm CROSS_COMPILE=$OETREE/build/tmp/cross/armv7a/bin/arm-angstrom-linux-gnueabi- menuconfig
Компиляция ядра (обратите внимание на опцию -j2, в ней вы задаете кол-во ядер процессора на вашем компьютере):
make -j2 ARCH=arm CROSS_COMPILE=$OETREE/build/tmp/cross/armv7a/bin/arm-angstrom-linux-gnueabi- uImage
Компиляция модулей:
make -j2 ARCH=arm CROSS_COMPILE=$OETREE/build/tmp/cross/armv7a/bin/arm-angstrom-linux-gnueabi- modules
Установите модули в файловую систему на SD-карточке:
sudo make -j2 ARCH=arm CROSS_COMPILE=$OETREE/angstrom-dev/cross/armv7a/bin/arm-angstrom-linux-gnueabi- modules_install INSTALL_MOD_PATH=/media/rootfs
В результате получаем бинарник, который необходимо записать на SD-карту (партицию FAT32) и можно загружать платформы, основанные на модуле BlueShark.
^Скомпилированный uImage|
| [[http://mentorel.ru/downloads/blueshark/demo/uImage-2.6.32-r78+gitra6bad4464f985fdd3bed72e1b82dcbfc004d7869-beagleboard.bin]] |