====== Компиляция 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]] |