Базовый образ как точка старта.

Надеюсь, вам удалось собрать и запустить 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. Если вы все сделали правильно то в окне вы увидите следующее:
openembedded base-image

Для входа в систему введите пользователя root и нажмите enter. После чего вы попадаете в базовую систему. Можно изучать и играться. А в следующий раз я расскажу как ее запустить на реальном железе.

Рубрика: Практика | Теги: , , , , комментариев 14 »

комментариев 14 к “Базовый образ как точка старта.”

  1. dimafon

    Уважаемый Администратор сайта OpenEmbedded.ru!

    Не знаю как к Вам обратиться, поэтому обращаюсь здесь.

    Б О Л Ь Ш О Е Вам спасибо за Ваши статьи!!! Они очень помогли мне.

    Передо мной стоит следующая задача: на Linux машине скомпилировать GUI аппликацию (типа «Hello World!») для ARM9 и запустить на целевой машине (ARM9). Для этих целей хочу использовать GTK.
    Не подскажете ли Вы как скомпилировать GTK библиотеки для ARM9??

    Мой адрес: dima.development@gmail.com

  2. norguhtar

    bitbake gtk+ после настройки окружения :)

  3. fp

    Когда будет продолжение? И ещё один вопрос как установить какое ни будь приложение в готовую систему?

  4. norguhtar

    Скоро. Там как раз будет описание того как это все запустить на реальном железе, установка приложений чуть дальше будет.

  5. dem

    При сборки у меня возникла проблема с 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.

  6. Cthutq

    Не получается собрать 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

    что делаю не так?

  7. Cthutq

    Забыл написать? что дистрибутив собрался и отлично работает. Я просто хотел собрать какой нибудь пакет отдельно. Решил собрать mc:
    export BBPATH=»$HOME/openemb/build:$HOME/openemb/openembedded»
    export PATH=»$PATH:$HOME/openemb/bitbake/bin»
    bitbake mc

  8. de1phi

    Kernel panic — not syncing :VFS: Unable to mount root fs on unknown-block (0,255)

  9. decodder

    А возможно ли использовать Qt, а не Gtk+? Что нужно для сборки?

  10. norguhtar

    Можно. Указывайте что вам нужен qt. Необходимые рецепты в репозитории есть.

  11. norguhtar

    Проверьте подхватился ли правильный конфиг ядра.

  12. Andrey

    скажите, а в OpenEmbedded встроена поддержка OpenGL? (собрал x11-image)

  13. norguhtar

    >cкажите, а в OpenEmbedded встроена поддержка OpenGL?
    Это зависит не от OpenEmbedded, а от платформы и есть ли поддержка GPU платформы в mesa.

  14. Alex

    Все собралось , грузится, но файловая система монтируется как read-only.


Прокоментировать



 

Наверх