|
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/ ... |
|