OpenEmbedded: Часть 1. Установка
- установка |
- openembedded |
- embedded linux |
- debian |
- bitbake |
- arm
Этим материалом я хочу начать цикл статей посвященный работе с OpenEmbedded.
OpenEmbedded, это фреймворк для сборки Embedded Linux. Как утверждают на официальном веб-сайте, OpenEmbedded обеспечивает лучшее в своем классе окружение для кросс-компиляции. Фреймворк позволяет создавать завершенные Linux дистрибутивы для встраиваемых систем.
Работать я буду на компьютере в следующей конфигурации:
- AMD Athlon 64 X2 4000+
- 1G RAM
- 30G HDD
- Debian 5.0.8 (lenny) частично SID и даже Testing
- Linux Kernel 2.6.32-5-686
- XFCE Desktop
Для начала желательно проверить наличие необходимых пакетов и установить отсутствующие http://openembedded.org/index.php/Required_software. Если все пакеты на месте, то можно приступать. Я буду ставить OpenEmbedded в каталог отличный от того что описан в руководстве, просто мне больше нравится другое название для этого каталога.
mkdir -p ~/my-distr/build/conf cd my-distr/
Установка bitbake
Далее нам необходимо установить главную утилиту bitbake, с помощью которой производится сборка дистрибутива или отдельных пакетов. Скачиваем с официального сайта последнюю версию и распаковываем ее в каталог который мы создали ранее и где будет производиться наша сборка. На момент написания я использовал bitbake-1.10.2.
После распаковки нужно переименовать каталог bitbake-1.10.2 в bitbake.
Получение openembedded из репозитория
Затем нам нужно скачать openembedded
git clone git://git.openembedded.net/openembedded
Но тут меня постигла неудача, git никак не хотел завершить клонирование репозитория, по-этому пришлось руками скачать архив с сайта http://cgit.openembedded.org/cgit.cgi/openembedded/snapshot/openembedded-c8e377aebf7ab50d7af9cb7cbd4f17e4dda58d86.tar.gz (94.8 Мб)
Далее распаковываем архив в каталог ~/my-distr/openembedded.
Создание локальной конфигурации
Теперь нам надо создать файл локальной конфигурации
$ cd ~/my-distr/ $ cp openembedded/conf/local.conf.sample build/conf/local.conf
Открываем build/conf/local.conf в редакторе и правим некоторые строки
DL_DIR = "${HOME}/my-distr/downloads" BBFILES := "${HOME}/my-distr/openembedded/recipes/*/*.bb ${HOME}/my-distr/build/recipes/*/*.bb" MACHINE = "x86" DISTRO = "angstrom-2010.x" IMAGE_FSTYPES = "jffs2 tar.gz"
DL_DIR - указывает путь к каталогу в котором будут храниться скачанные исходники из которых в последствии будут собираться пакеты.
Как видите, я указал 2 каталога для поиска .bb файлов в переменной BBFILES, это сделано потому что в дальнейшем, я планирую делать собственные рецепты для приложений и сами приложения которые будут включаться в мой дистрибутив. Если Вы не планируете включать в дистрибутив собственные приложения, то можно прописать только один путь к стандартным рецептам openembedded.
Переменная MACHINE пока что использована x86, потому что предполагается что нас пока нет SDK для кросс-компиляции. Она описывает нашу аппаратную платформу и, соответственно кросс- или нативный компилятор который должен быть использован при сборке. Описания некоторых платформ вы можете найти в каталоге 'openembedded/conf/machine'.
Переменная DISTRO обозначает некий дистрибутив, в дальнейшем мне нужно будет создать свой собственный дистрибутив и как-то его назвать.Описания некоторых дистрибутивов вы можете найти в каталоге 'openembedded/conf/distro'.
IMAGE_FSTYPES - здесь можно перечислить форматы файлов в которые будет упакован образ файловой системы rootfs. В примере указан тип jffs2 - это файловая система для записи на NAND Flash. Полезный формат tar.gz может использоваться для контроля содержимого rootfs до записи. В файле будет содержаться дерево файловой системы и его можно просмотреть обычным архиватором, чего не скажешь о jffs2.
Еще в конце файла нужно удалить или закомментировать последнюю строку.
REMOVE_THIS_LINE
Настройка окружения
$ export BBPATH=~/my-distr/build:~/my-distr/openembedded $ export PATH=~/my-distr/bitbake/bin:$PATH
Эти комманды необходимо запускать всякий раз когда вы открываете терминал для работы с bitbake, т.е. для сборки дистрибутива, по-этому их можно прописать в ~/.bashrc, тогда всё будет происходить автоматически при открытии окна терминала или написать небольшой скрипт и запускать его перед началом работы. Скрипт, если Вы пойдете по этому пути, надо запускать следующим образом:
source <путь к вашему скрипту>.sh
или
. <путь к вашему скрипту>.sh
Да да, там точка, пробел.
Пробный запуск
Теперь мы можем попробовать собрать какой-нибудь пакет:
~/my-distr$ bitbake nano NOTE: Handling BitBake files: - (780/7318) [1 %]
Решение проблем
Когда я запустил сборку указанного выше пакета, то получил такое сообщение:
FATAL: 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: Please install following missing utilities: texi2html,cvs,svn,gawk,chrpath
Ничего страшного, я просто не установил часть необходимых пакетов, эти пакеты были перечислены в последней строке (svn имеется в виду пакет subversion). После доустановки сборка началась.
~/my-distr$ bitbake nano NOTE: Handling BitBake files: - (7318/7318) [100 %] Parsing of 7318 .bb files complete (6892 cached, 426 parsed). 7612 targets, 341 skipped, 0 masked, 0 errors. Build Configuration: BB_VERSION = "1.10.2" METADATA_BRANCH = "<unknown>" METADATA_REVISION = "<unknown>" TARGET_ARCH = "i486" TARGET_OS = "linux" MACHINE = "x86" DISTRO = "angstrom" DISTRO_VERSION = "2010.7-test-20110221" NOTE: Resolving any missing task queue dependencies NOTE: Preparing runqueue NOTE: Executing runqueue NOTE: Running task 16 of 734 (ID: 305, virtual:native:/home/d400/my-distr/openembedded/recipes/linux-libc-headers/linux-libc-headers_2.6.31.bb, do_fetch) FATAL: linux-libc-headers-native-2.6.31: http_://kernel.org/pub/linux/kernel/v2.6/linux-2.6.31.tar.bz2 cannot check archive integrity ERROR: Error in executing python function in: /home/d400/my-distr/openembedded/recipes/linux-libc-headers/linux-libc-headers_2.6.31.bb ERROR: Exception:<type 'exceptions.SystemExit'> Message:1 ERROR: Printing the environment of the function ERROR: Function base_do_fetch failed ERROR: TaskFailed event exception, aborting ERROR: Build of virtual:native:/home/d400/my-distr/openembedded/recipes/linux-libc-headers/linux-libc-headers_2.6.31.bb do_fetch failed NOTE: package linux-libc-headers-native-2.6.31-r6: task do_fetch: Started ERROR: Task 305 (virtual:native:/home/d400/my-distr/openembedded/recipes/linux-libc-headers/linux-libc-headers_2.6.31.bb, do_fetch) failed with 256 ERROR: 'virtual:native:/home/d400/my-distr/openembedded/recipes/linux-libc-headers/linux-libc-headers_2.6.31.bb' failed NOTE: The checksums for '/home/d400/my-distr/downloads/linux-2.6.31.tar.bz2' did not match. Expected MD5: '84c077a37684e4cbfa67b18154390d8a' and Got: '5f812cca015679c602155b64ae5f839b' Expected SHA256: '0acd83f7b85db7ee18c2b0b7505e1ba6fd722c36f49a8870a831c851660e3512' and Got: '725b43d92c922f907040ffdbae04f08ac8df420e22779df85f9c228d250336f4' NOTE: Your checksums: SRC_URI[md5sum] = "5f812cca015679c602155b64ae5f839b" SRC_URI[sha256sum] = "725b43d92c922f907040ffdbae04f08ac8df420e22779df85f9c228d250336f4" FATAL: linux-libc-headers-native-2.6.31: http_://kernel.org/pub/linux/kernel/v2.6/linux-2.6.31.tar.bz2 cannot check archive integrity ERROR: 'virtual:native:/home/d400/my-distr/openembedded/recipes/linux-libc-headers/linux-libc-headers_2.6.31.bb' failed
Если возникают трудности со скачиванием пакетов как в примере выше, вы можете сами их скачать браузером и положить в каталог который мы указали в конфигурации, т.е. 'my-distr/downloads', ссылки на скачивание есть в описании ошибок FATAL, например:
FATAL: linux-libc-headers-native-2.6.31: http_://kernel.org/pub/linux/kernel/v2.6/linux-2.6.31.tar.bz2 cannot check archive integrity
Если доступ в интернет у Вас организован через прокси, то нужно раскомментировать и отредактировать переменные 'http_proxy' и 'ftp_proxy' в файле '/etc/wgetrc' или '~/wgetrc'. Но лично у меня есть патологические проблемы работы ftp через наш корпоративный прокси, причем проблемы только с доступом к ftp.gnu.org, этот FTP я не могу даже через баузер открыть. По-этому для решения этих проблем я исправил переменную
GNU_MIRROR = "http://ftp.gnu.org/gnu"
в файле '/my-distr/openembedded/conf/bitbake.conf'. Правда в некоторых рецептах встречаются прямые ссылки на ftp://ftp.gnu.org, так что либо нужно везде исправить подстроку 'ftp://ftp.gnu.org/gnu' на '${GNU_MIRROR}', иногда встречаются пути 'ftp://ftp.gnu.org/pub' их я просто менял на 'http://ftp.gnu.org/pub', либо просто руками скачать нужные пакеты как я писал выше. Пакеты скачиваются только один раз, т.е. если необходимый пакет уже есть в downloads, то он не будет скачиваться повторно, так что сами выбирайте как поступить в этом случае.
Еще одна частая проблема, которая может возникнуть у пользователей Ubuntu, на этом дистрибутиве ссылка '/bin/sh' указывает на dash, а должна указывать на bash, так что сперва проверьте что всё настроено как надо и, при необходимости, исправьте.
~/my-distr$ ls -l /bin/sh lrwxrwxrwx 1 root root 4 Sep 9 14:23 /bin/sh -> bash
Заключение
При первом запуске сборка идет довольно долгое время, счет идет на часы, потому я не стал на этом этапе дожидаться окончания процесса, потому что в дальнейшем я буду работать с архитектурой ARM.
Чтобы очистить файлы, которые использовались для сборки пакета надо выполнить команду:
~/my-distr$ bitbake -cclean nano
Правда при сборке у нас создался каталог 'tmp' довольно приличного размера, это распакованные пакеты. На этом этапе их тоже можно удалить.
В следующей части я планирую осветить вопросы создания собственного Software Development Kit (SDK).
- блог пользователя GDI
- 45689 просмотров
Новые записи в блогах
- Устранение дребезга контактов на основе вертикальных счетчиков
- Диагностика Imprecise Bus Faults в микроконтроллерах Cortex-M3/M4/M4F
- Self-powered камера
- Фоновый модулятор: беспроводная связь из ничего (перевод)
- Texas Instruments Analog Applications Journal SLYT612 "Снижение искажений в аналоговых КМОП ключах" (перевод)
- USB MSD. Часть 6. Команды SCSI (перевод)
- USB MSD. Часть 3. USB класс накопителей данных (перевод)
- Texas Instruments Application Report SBAA042 "Кодовые схемы, используемые в аналогово-цифровых преобразователях" (перевод)
- 10 принципов правильного интерфейса
- Релиз SDK на русский микропроцессор КРОЛИК
Комментарии
Установка ОЕ
Добрый день.
А как вы обошли проблему с установкой
У меня не было этой проблемы,
У меня не было этой проблемы, потому что установлен 32 разрядный дистрибутив.
о возможности фреймворка
Пожалуйста объясните, при помощи openenbedded и bitbake возможна ли сборка десктопного дистрибьютива Линукс. Или для этих целей есть иные средства?
Спасибо.
Openembedded, конечно заточен
Openembedded, конечно заточен под сборку дистрибутивов встраиваемых систем, но, думаю, что и для десктопа можно собрать дистрибутив. В частности в этой статье тестовая сборка производится под архитектуру x86, т.е., как раз под десктоп. Но, повозиться придется, как впрочем и со специально созданным для этого фреймворкам и сам процесс сборки будет происходить медленнее, т.к. Openembedded сперва собирает toolchain, а уже потом этим toolchain-ом собирает дистрибутив. Это позволяет не зависеть от версии компилятора и библиотек, которые уже установлены на build-машине, но это уже другой вопрос :).
Отправить комментарий