Как собрать свою RootFS на базе Gentoo для кпк
There are no translations available

Прежде чем преступить я объясню некоторые понятия:

  • RootFS (рутфс) — это образ файловой системы который монтируется по месту /. Содержит необходимые программы для загрузки и работы ОС Linux, например: fsck, mount, modprobe, fdisk, ifconfig и другие.

  • ToolChain (тулчейн) — это набор программ, библиотек и кросс-компиляторов для сборки программ под конкретную платформу.

  • Gentoo — почему именно Gentoo? Потому что он у меня уже на ноутбуке :)

И так приступаем, начинаем со сборки тулчейна

Ставим генератор тулчейнов


$ emerge crossdev
$ crossdev --help
Usage: crossdev [options] --target TARGET

Options:
--b, --binutils ver Specify version of binutils to use
--g, --gcc ver Specify version of gcc to use
--k, --kernel ver Specify version of kernel headers to use
--l, --libc ver Specify version of libc to use
-S, --stable Use latest stable versions as default
-C, --clean target Uninstall specified target
-P, --portage opts Options to pass to emerge (see emerge(1))
--with[out]-headers Build C library headers before C compiler?
Stage Options:
-s0, --stage0 Build just binutils
-s1, --stage1 Also build a C compiler (no libc/C++)
-s2, --stage2 Also build kernel headers
-s3, --stage3 Also build the C library (no C++)
-s4, --stage4 Also build a C++ compiler [default]
Extra Fun (must be run after above stages):
--ex-only Skip the stage steps above
--ex-gcc Build extra gcc targets (gcj/ada/etc...)
--ex-gdb Build a cross gdb
--ex-insight Build a cross insight
Target (-t) takes a tuple ARCH-VENDOR-OS-LIBC; see 'crossdev -t help'

И так просим crossdev сгенерировать нам тулчейн для такой архитектуры armv5te-iwmmxt-linux-gnueabi, это значит программы собранные этим тулчейом будут работать на процессорах типа armv5te, операции с плавающей точкой будут выполняться через блок iwmmxt (на кпк с процессором PXA27x он есть :) ), работать на операционной системе Linux, в качестве стандартной C библиотеки будет использоваться glibc (gnu)


$ crossdev -t armv5te-iwmmxt-linux-gnueabi --b 2.18-r3 --g 4.1.2 --k 2.6.27-r2 --l 2.7-r2

Если у вас что то не собирается попробуйте другую версию и удалите старые результаты сборки /var/tmp/crossdev это может быть причиной ошибок.

После сборки в системе будут устанволенны такие пакеты


cross-armv5te-iwmmxt-linux-gnueabi/binutils-2.18-r3
cross-armv5te-iwmmxt-linux-gnueabi/gcc-4.3.2-r3
cross-armv5te-iwmmxt-linux-gnueabi/glibc-2.7-r2
cross-armv5te-iwmmxt-linux-gnueabi/linux-headers-2.6.27-r2

Теперь если вы часто пользуетесь emerge --depclean советую добавить в /var/lib/portage/world выполнением следующих команд:

$ echo cross-armv5te-iwmmxt-linux-gnueabi/binutils >> /var/lib/portage/world
$ echo cross-armv5te-iwmmxt-linux-gnueabi/gcc >> /var/lib/portage/world
$ echo cross-armv5te-iwmmxt-linux-gnueabi/glibc >> /var/lib/portage/world
$ echo cross-armv5te-iwmmxt-linux-gnueabi/linux-headers >> /var/lib/portage/world

Что бы наш тулчейн не удалился Подмигиваю

 

Теперь создадим несколько скриптов

Подержка команды ebuild

$ vim /usr/local/sbin/armebuild
#!/bin/bash

CBUILD=$(portageq envvar CHOST)
PORTAGE_CONFIGROOT="$SYSROOT"

if [[ "$1" == "--root" ]] ; then
ROOT="$2"
shift 2
else
ROOT="$SYSROOT"
fi
export CBUILD PORTAGE_CONFIGROOT ROOT

ebuild $*

Подержка команды emerge

$ vim /usr/local/sbin/armemerge
#!/bin/bash

CBUILD=$(portageq envvar CHOST)
PORTAGE_CONFIGROOT="$SYSROOT"

if [[ "$1" == "--root" ]] ; then
ROOT="$2"
shift 2
else
ROOT="$SYSROOT"
fi
export CBUILD PORTAGE_CONFIGROOT ROOT

emerge $*

поддержка команды make (сборка ядра для кпк)

$ vim /usr/local/sbin/armmake
#!/bin/bash
make ARCH="arm" CROSS_COMPILE="armv5te-iwmmxt-linux-gnueabi-" $*
А также этот
$ vim /usr/local/sbin/armquickokg
#!/bin/bash

CBUILD=$(portageq envvar CHOST)
PORTAGE_CONFIGROOT="$SYSROOT"

if [[ "$1" == "--root" ]] ; then
ROOT="$2"
shift 2
else
ROOT="$SYSROOT"
fi
export CBUILD PORTAGE_CONFIGROOT ROOT

quickpkg $*

 Готово! Теперь armemerge работает как emerge только в режиме кросс компиляции. Подготовим $SYSROOT для работы и позаботитесь о том что бы в $SYSROOT/armv5te-iwmmxt-linux-gnueabi было достаточно места для разворачивания нашей рутфс

$ export SYSROOT=/usr/armv5te-iwmmxt-linux-gnueabi
$ mkdir -p $SYSROOT/{etc,dev,usr}

Инициализируем каталог устройств:

$ emerge makedev
$ cd $SYSROOT/dev
$ MAKEDEV -v generic -d .

Создадим ссылку на portage, укажем профиль

$ ln -s /usr/portage $SYSROOT/usr/portage
$ cd $SYSROOT/etc
$ ln -s /usr/portage/profiles/default/linux/arm/10.0 make.profile

И на последок создадим файл make.conf

$ vim $SYSROOT/etc/make.conf
CFLAGS="-O2 -march=armv5te -mtune=iwmmxt -fomit-frame-pointer"
CXXFLAGS="${CFLAGS}"

CTARGET="armv5te-iwmmxt-linux-gnueabi"
CHOST="armv5te-iwmmxt-linux-gnueabi"
CBUILD="i686-pc-linux-gnu"

ACCEPT_KEYWORDS="arm"
ARCH="arm"

MAKEOPTS="-j1"

PORTAGE_NICENESS="19"
PORTAGE_IONICE_COMMAND="ionice -c 1 -n 7 -p \${PID}"

USE="static -fortran -mudflap -ipv6 -openmp"

GENTOO_MIRRORS="http://www.kaa.org.ua/ ftp://ftp.linux.kiev.ua/pub/Linux/Gentoo/distfiles/"

LINGUAS="ua uk ru en"

Пробуем Улыбка

$ armemerge -NDu world -p
These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild R ] sys-apps/coreutils-6.9-r1 to /usr/armv5te-iwmmxt-linux-gnueabi/
...

 

Comments
wrewolf   |2010-03-16 16:41:23
Прошел все шаги по порядку.
осталась одна проблема
при выполнении
[code]armemerge -NDu world -p[/code]
система жалуется на USE флаги
[code]localhost ~ # armemerge -NDu world -p

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild U ] sys-apps/portage-2.1.7.16 [2.1.6.13] USE=\"(-python3)\"
[ebuild U ] app-admin/python-updater-0.7-r1 [0.7]
[ebuild U ] sys-libs/timezone-data-2009u [2009s]
[ebuild R ] media-libs/freetype-2.3.9-r1 USE=\"-X*\"
..................... ........
[ebuild R ] media-fonts/font-xfree86-type1-1.0.1 USE=\"-X*\"
[ebuild R ] media-fonts/font-adobe-utopia-100dpi-1.0.1 USE=\"-X*\"
[ebuild R ] media-fonts/font-adobe-utopia-type1-1.0.1 USE=\"-X*\"
.............
[ebuil d R ] media-fonts/font-bh-lucidatypewriter-75dpi-1.0.0 USE=\"-X*\"
[ebuild U ] sys-libs/glibc-2.10.1-r1 [2.9_p20081201-r2]
[ebuild R ] sys-devel/gcc-4.3.4 USE=\"(-ip28%) (-ip32r10k%)\"
[ebuild U ] app-admin/eselect-python-20091230 [20090824]

* IMPORTANT: 1 news items need reading for repository \'gentoo\'.
* Use eselect news to read news items.

localhost ~ #
[/code]

ведь world мы будем использовать свой, а не пустой для новой системы.
Как можно это обойти
Oleg Kravchenko   |2010-03-16 16:25:05
Пришлось вырубить BBCode

А вы делали?
[code]
export SYSROOT=/usr/armv5te-iwmmxt-linux-gnueabi
[/code]
wrewolf   |2010-03-16 16:28:04
да
Oleg Kravchenko   |2010-03-16 16:28:53
А можно увидеть armemerge --info ?
wrewolf   |2010-03-17 09:19:54
Полный текст тут
[url]http://sites.google.com/site/wrewolf/cros s_compile[/url]
Oleg Kravchenko   |2010-03-17 09:18:03
У вас слишком много USE флагов, сократите их до минимума как в статье, например на нашем кпк врятли будут работать эти видео карты VIDEO_CARDS="glint mach64 mga nv r128 radeon savage sis tdfx trident vga voodoo"

И попробуйте вот так:
[code]armemerge -NDu world --root-deps=rdeps[/code]
wrewolf   |2010-03-17 18:22:42
а как их удалить
make.conf Ваш
Oleg Kravchenko   |2010-03-17 20:41:32
Хм что то тут нето
Oleg Kravchenko   |2010-03-17 22:25:50
Подозреваю вы что то не так сделали, попробуйте пройтись по-шагово с начала
wrewolf   |2010-03-18 09:57:18
Да уже так и сделал.
В виртуальной машине заново поставил Calculate
и ничего не изменилось.

Как максимум можно попробовать собрать минимальную систему и попробовать в ней.

Вечером попробую тоже проделать в Gentoo которая на ноуте стоит
Oleg Kravchenko   |2010-03-18 11:38:38
Попробуйте в Gentoo, я в Calculate не делал.
wrewolf   |2010-03-18 10:10:03
и такой еще вопрос у вас имя последнего скрипта верное или все таки должно быть quickpkg
Oleg Kravchenko   |2010-03-18 11:37:53
Верное, но этот скрипт не обязателен.
wrewolf  - re:   |2010-03-18 19:33:24
[quote=Oleg Kravchenko]Попробуйте в Gentoo, я в Calculate не делал.[/quote]

ну в принципе clculate это и есть gentoo
wrewolf   |2010-03-25 19:50:13
А если брать за основу stage3-armv5tel-*.tag.bz2
то там видимо используется CHOST=armv5tel-softfloat-linux-gnu
но на форуме про зариусы писали что с mtune=iwmmxt march=iwmmxt
софт нормально собирается.
остается попробовать собрать все остальное нативно, либо после загрузки stage изменить CHOST, но думаю это вызовет больше проблем чем решений
Oleg Kravchenko   |2010-03-25 20:12:10
Я пытался собирать с -mtune=iwmmxt -march=iwmmxt, софт начинал вести себя не адекватно, не понятные segfault'ы и вылеты программ
wrewolf   |2010-04-27 09:54:25
Еше раз прошел все шаги.
запустилось с
armemerge -NDu world --root-deps=rdeps
как вы и советовали.
94 пакета. Сколько теперь ждать? ncurses уже минут 15 компилится.
Если этот процесс сбросить он потом нормально перезапустится?
А то комп нужен для работы, а компиляция комп на 100% загружает
Oleg Kravchenko   |2010-05-06 01:06:18
Ну сборка процесс долгий, зависит от мощности вашего компьютера.
wrewolf   |2010-05-04 16:34:11
А есть минимальный список пакетов которые нужно собрать?
а то он djvu собрал
Oleg Kravchenko   |2010-05-06 01:08:54
Есть, это пакеты из сета system:
[code]armemerge -NDu system --root-deps=rdeps[/code]
Но лучше использовать world, обычно это около 100 пакетов если вы с USE-флагами не переигрались
wrewolf   |2010-05-06 19:02:44
[code]armemerge -NDu world --root-deps=rdeps[/code]
это был первый запуск было установлена пара пакетов(из 3
а потом заработало
[code]armemerge -NDu world[/code]
и осталось 36 пакетов
wrewolf   |2010-05-07 17:41:57
Начались ошибки когда осталось 2 пакета.
Ради интереса запустил
armemerge -DNueb world
теперь жду пока пересоберутся 1072 пакета для которых нет готовых бинарников.

П.С.
имела ли смысл эта команда?
wrewolf   |2010-05-08 10:14:09
все загнулось на сборке питона
Тут вроде есть все недостающие драйвера
sites.google.com/site/siteofhx/Home/andr oid/relevant-porting-files
Oleg Kravchenko   |2010-05-08 12:30:07
[quote=wrewolf]
sites.google.com/site/siteofhx/Hom e/android/relevant-porting-files[/quote]
Там ничего такого нету, чего нету у нас
Only registered users can write comments!

3.26 Copyright (C) 2008 Compojoom.com / Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved."