Базовый образ как точка старта.
Надеюсь, вам удалось собрать и запустить hello-world. В этот раз я опишу сборку и последущую загрузку минимального базового образа.
Но прежде чем перейти к сборке, давайте переключим репозиторий с ветки (brunch) разработки org.openembedded.dev на текущую стабильную ветку origin/stable/2009. Изменения в эту ветку вносятся только после обкатки их в org.openembedded.dev, поэтому ее использование дает более стабильные результаты, нежели использование ветки org.openembedded.dev. Переключение веток осуществляется следующей командой:
$ git checkout -b stable/2009 origin/stable/2009 |
После завершения команды каталог openembedded будет содержать стабильную ветку stable/2009.
Далее удаляем подкаталог tmp в каталоге ~/stuff/build:
$ rm -r ~/stuff/build/tmp |
Настраиваем переменные PATH и BBPATH так же как в Здраствуй, мир! Сборка.:
$ export PATH=${PATH}:${HOME}/stuff/bitbake/bin $ export BBPATH=${HOME}/stuff/build:${HOME}/stuff/openembedded |
Переходим в каталог ~/stuff/build, запускаем сборку:
$ cd ${HOME}/stuff/build $ bitbake base-image |
base-image является метапакетом, запускающим сборку необходимых пакетов и компоновку их в образ корневой файловой системы. Учтите, что выполнение будет идти довольно долго.
После завершения сборки в каталоге ~/stuff/build/tmp/deploy/glibc/images/x86 появятся скомпилированное ядро, архив с модулями к нему и образ корневой файловой системы в формате jffs2 и tar. У меня этот каталог содержит:
Angstrom-base-image-glibc-ipk-2009.X-test-20090522-x86.rootfs.jffs2 Angstrom-base-image-glibc-ipk-2009.X-test-20090522-x86.rootfs.tar Angstrom-base-image-glibc-ipk-2009.X-test-20090522-x86-testlab base-image-x86.jffs2 base-image-x86.tar bzImage-2.6.25.20-r2-x86.bin bzImage-x86.bin modules-2.6.25.20-r2-x86.tgz |
Для запуска системы потребуется два файла. Это образ корневой файловой системы в формате архива tar (Angstrom-base-image-glibc-ipk-2009.X-test-20090522-x86.rootfs.tar) и скомпилированное ядро (bzImage-2.6.25.20-r2-x86.bin). С ядром необходим проделать манипуляции аналогичные тем что производились в Здравствуй, мир! Запуск., а вот с образом корневой файловой системы прийдется повозиться.
Сначала удалите старую корневую файловую систему из каталога /var/lib/nfsroot и распакуйте туда новый образ. Теперь перейдите в каталог /var/lib/nfsroot/etc/default. В нем имеется файл udev следующего содержания:
# Default for /etc/init.d/udev # Comment this out to disable device cache DEVCACHE="/etc/dev.tar" |
Закоментируйте DEVCACHE (если этого не сделать, то udev при старте будет пытаться распаковать его на корневую файловую систему которая находится в режиме только чтение). Далее измените в /var/lib/nfsroot/etc/fstab расположение корневой файловой системы. Для этого строку вида:
rootfs / auto defaults 1 1 |
замените на:
192.168.1.100:/var/lib/nfsroot / nfs rw 0 0 |
Где 192.168.1.100 — это адрес вашего NFS сервера.
После того как вы завершили изменения, система почти готова к загрузке. Почему почти? Потому что хотя и указано, что корневая файловая система находится в режиме для записи, но реально при попытке загрузить систему она у вас будет бесконечно ожидать ответ от NFS сервера. Происходит это из-за того, что образ генерируемый base-image не включает в себя пакет nfs-utils, необходимый для работы с NFS сервером в режиме записи. Для исправления ситуации необходимо собрать этот пакет и установить в образ. Для сборки пакета выполняем следующие команды:
$ cd ~/stuff/build $ bitbake nfs-utils package-index |
В результате выполнения этих команд будет собран пакет nfs-utils и произведено переиндексирование репозитория пакетов. Далее требуется поставить собранный пакет.
Для этого копируем из каталога ~/stutff/build/tmp/deploy/glibc каталог ipk со всем содержимым в каталог /var/lib/nfsroot/media/card. Затем переходим в каталог /var/lib/nfsroot/etc/opkg.conf, удаляем там все подпадающие под маску *-feed.conf и создаем там файл local-feed.conf следующего содержания:
src/gz all file://media/card/ipk/all src/gz x86 file://media/card/ipk/x86 src/gz i486 file://media/card/ipk/i486 |
Приступаем к установке пакетов. Переходим в корневую файловую систему:
# chroot /var/lib/nfsroot /bin/sh |
Запускаем обновления списка пакетов из репозитория и установку nfs-utils:
# opkg-cl update # opkg-cl install task-base-nfs |
Думаю вы заметили что устанавливается не nfs-uitls, а task-base-nfs. Дело в том что пакет nfs-utils включает в себя сервер, а клиентская часть (portmap) вынесена в task-base-nfs.
После завершения установки выходим из корневой системы:
# exit |
Переходим к запуску. Запустите nfs сервер, а затем Virtual Box. Если вы все сделали правильно то в окне вы увидите следующее:
Для входа в систему введите пользователя root и нажмите enter. После чего вы попадаете в базовую систему. Можно изучать и играться. А в следующий раз я расскажу как ее запустить на реальном железе.
Рубрика: Практика | Теги: booting, diskless, openembedded, opkg, virtualbox комментариев 14 »
06/06/2009 21:16
Уважаемый Администратор сайта OpenEmbedded.ru!
Не знаю как к Вам обратиться, поэтому обращаюсь здесь.
Б О Л Ь Ш О Е Вам спасибо за Ваши статьи!!! Они очень помогли мне.
Передо мной стоит следующая задача: на Linux машине скомпилировать GUI аппликацию (типа «Hello World!») для ARM9 и запустить на целевой машине (ARM9). Для этих целей хочу использовать GTK.
Не подскажете ли Вы как скомпилировать GTK библиотеки для ARM9??
Мой адрес: dima.development@gmail.com
06/06/2009 21:29
bitbake gtk+ после настройки окружения :)
08/08/2009 18:02
Когда будет продолжение? И ещё один вопрос как установить какое ни будь приложение в готовую систему?
08/08/2009 18:19
Скоро. Там как раз будет описание того как это все запустить на реальном железе, установка приложений чуть дальше будет.
22/08/2009 21:49
При сборки у меня возникла проблема с pciutils:
ERROR: ‘/home/dem/work/openembedded/openembedded/recipes/pciutils/pciutils_3.1.2.bb’ failed
Решение, для интересующихся, ниже.
В логе было следующее:
NOTE: package pciutils-3.1.2-r2: task do_configure: Started
ERROR: Function do_configure failed
Configuring libpci for your system… crystal crystal crystal
Looking for access methods… Unfortunately, your OS is not supported by the PCI Library
ERROR: Function do_configure failed
Немного покопавшись выяснил, что скрипт lib/configure pciutils определяет тип системы по содержимому $HOST. Который у меня равен crystal. Данная проблема решается простым переопределением переменной окружения $HOST на linux.
13/12/2009 22:57
Не получается собрать mc, вот что выдает:
| FATAL: autoreconf execution failed.
NOTE: Task failed: /home/sergey/openemb/build/tmp/work/i486-angstrom-linux/mc-4.6.2-r2/temp/log.do_configure.12237
ERROR: TaskFailed event exception, aborting
ERROR: Build of /home/sergey/openemb/openembedded/recipes/mc/mc_4.6.2.bb do_configure failed
ERROR: Task 5 (/home/sergey/openemb/openembedded/recipes/mc/mc_4.6.2.bb, do_configure) failed
NOTE: Tasks Summary: Attempted 501 tasks of which 501 didn’t need to be rerun and 1 failed.
ERROR: ‘/home/sergey/openemb/openembedded/recipes/mc/mc_4.6.2.bb’ failed
что делаю не так?
13/12/2009 23:00
Забыл написать? что дистрибутив собрался и отлично работает. Я просто хотел собрать какой нибудь пакет отдельно. Решил собрать mc:
export BBPATH=»$HOME/openemb/build:$HOME/openemb/openembedded»
export PATH=»$PATH:$HOME/openemb/bitbake/bin»
bitbake mc
07/11/2010 21:18
Kernel panic — not syncing :VFS: Unable to mount root fs on unknown-block (0,255)
08/11/2010 17:15
А возможно ли использовать Qt, а не Gtk+? Что нужно для сборки?
08/11/2010 17:24
Можно. Указывайте что вам нужен qt. Необходимые рецепты в репозитории есть.
08/11/2010 17:24
Проверьте подхватился ли правильный конфиг ядра.
01/12/2010 14:38
скажите, а в OpenEmbedded встроена поддержка OpenGL? (собрал x11-image)
01/12/2010 16:10
>cкажите, а в OpenEmbedded встроена поддержка OpenGL?
Это зависит не от OpenEmbedded, а от платформы и есть ли поддержка GPU платформы в mesa.
15/05/2011 18:05
Все собралось , грузится, но файловая система монтируется как read-only.