Альтернативная Среда Сборки Для N900

На данный момент существует только один официальный способ компиляции для N900 - через Scratchbox. Чем он мне не понравился? Да, вот что.

Прежде всего, он только под i386, со всеми вытекающими из этого удовольствиями в виде необходимости держать кучу 32-битных библиотек.

Во-вторых, он почему-то устанавливается, вопреки всем канонам, в /scratchbox, попутно прописывая собственные модули для binfmt и, творя прочие непотребства, разрушая стройную структуру дистрибутива.

В-третьих, qemu довольно древний, что не дает рекордной скорости компиляции.

Ну и в-четвёртых, это чудо постановочное Очень медленно (не знаю, где они хостятся, но установщик довольно долго скачал полгига пакетов.

Кстати, при установке он тоже весит изрядно.

И поверх него есть SDK. Ну и самое главное.

qemu-пользователь не поддерживаю весь набор системных вызовов ядра.

Это означает, что часть программного обеспечения (в частности, моно) просто не сможет работать.

Проблему можно решить путем chrooting в среду из системы Arm в режиме полной эмуляции, но см.

пункт первый.

В общем, это убогий продукт; Даже не представляю, кто осмелится использовать его в серьёзном проекте.

Теоретически вы все равно можете скомпилировать прямо на устройстве.

Но проблема здесь в том, что есть busybox, который очень плохо дружит с тем же dpkg-buildpackage. Соответственно, когда переносишь rootfs с устройства и пытаешься им воспользоваться, эти грабли никуда не пропадают. А вот заменить его на coreutils не так-то просто, потому что при этом сломается часть зависимостей и половина системы отвалится.



Альтернативная среда сборки для N900

И что же мне делать? А мы пойдем другим путем.

Давайте представим себя ярыми последователями барона Мюнхгаузена и в лучших традициях бутстрап-процедуры (подъема себя за шнурки) установим систему с нуля из пакетов.

Как именно, читайте под катом.

На самом деле, вам необходимо иметь и заставить работать сердце любого дистрибутива на основе Debian — систему управления пакетами APT. И только потом с помощью apt-get можно установить все остальное.

Но для работы требуется dpkg. И для запуска dpkg требуется хотя бы базовая среда.

Вообще говоря, в обычных дистрибутивах черновую работу по его созданию выполняет debootstrap, но для Maemo у нас нет скриптов для него.

Поэтому проще всего сделать это вручную.

Сначала вам нужно, чтобы этот же dpkg был установлен в основной системе.

Если у вас нет чего-то на базе Debian, то не расстраивайтесь, dpkg есть в репозиториях почти всех дистрибутивов.

Кроме того, нам нужно как-то выполнить chroot в «гостевую» систему.

Для этих целей существует утилита qemu-user (которую, кстати, нещадно эксплуатирует упомянутый выше скретчбокс), которая, будучи известной модулю ядра binfmt, позволяет запускать бинарники для других архитектур непосредственно на текущее ядро, эмулирующее процессор и правильно транслирующее системные вызовы (системные вызовы).

Везде пакеты называются по-разному, но нам нужен файл qemu-arm-static и что-то, что пропишет его там, где нужно.

В Ubuntu необходимый пакет называется qemu-kvm-extras-static. Кроме того, нам нужно будет получить 8 deb-пакетов.

libc6, gcc-4.2-base, libgcc1, perl-base, sysv-rc, dpkg, libstdc++6 и apt. Да, для поднятия системы с нуля нужно всего 8 пакетов.

Вы можете легко загрузить их, выполнив поиск по адресу maemo.org/packages. Хотя нет, я вру.

Содержимое этих пакетов, что называется, «не взлетит» при отсутствии таких базовых вещей, как sh, ln, rm и т.п.

А они есть в coreutils. И coreutils тоже не устанавливается просто так и хочет кучу разных вещей.

Что я должен делать? На помощь приходит вышеупомянутый busybox. Тем более, что версия от Maemo нам не интересна; ему также нужны библиотеки.

Поэтому заходим на ports.ubuntu.com (или с debian.org, кому как нравится) и вытаскиваем оттуда пакет со статически связанным бизнесбоксом.

Ему не нужно ничего, кроме интерфейса системных вызовов ядра.

Вещь сама по себе.

Разбираем пакет с помощью dpkg -x и вытаскиваем оттуда нужный исполняемый файл.

Что ж, теперь у нас все готово и можно приступать.

Для начала создадим директорию для будущей системы и закинем туда qemu (поскольку мы будем chrooting, то она должна быть внутри, иначе чуда не произойдет).

mkdir -p корень/usr/bin cp /usr/bin/qemu-arm-static root/usr/bin
Теперь кидаем копии бизнесбокса в /bin. Позже они будут перезаписаны утилитами из coreutils и других пакетов, но сейчас они жизненно необходимы.

mkdir -p корень/bin cp busybox root/bin/sh cp busybox root/bin/ln cp busybox root/bin/touch cp busybox root/bin/chmod cp busybox root/bin/chown cp busybox root/bin/cp cp busybox root/bin/tar cp busybox root/bin/rm cp busybox root/bin/gzip cp busybox root/bin/grep
Теперь нам необходимо создать минимальный набор каталогов, без которых dpkg основной системы не сможет ничего сделать с «гостем»:
корень mkdir/и т. д. mkdir -p корень/var/lib/dpkg mkdir корень/var/lib/dpkg/tmp.ci mkdir root/var/lib/dpkg/updates mkdir root/var/lib/dpkg/info mkdir -p корень/вар/журнал mkdir -p корень/dev/pts коснитесь root/var/lib/dpkg/status коснитесь root/var/lib/dpkg/available коснитесь root/etc/ld.so.conf mkdir /var/резервные копии коснитесь /var/backups/infodir.bak
Как теперь устанавливать пакеты? Да, просто.

У dpkg есть опция --root, которая заставляет его запускаться, рассматривая указанный каталог как корневой.

Очень полезно.

В общем, он должен ругаться на несовпадение архитектуры (у вас основная система не ARM, наверное?), так давайте ему скажем --force-architecture

экспорт DPKG="dpkg --force-architecture --root=root -i „ Пакеты $DPKG/libc6_2.5.1-1eglibc27+0m5_armel.deb $DPKG packages/gcc-4.2-base_4.2.1-4maemo13+0m5_armel.deb Пакеты $DPKG/libgcc1_4.2.1-4maemo13+0m5_armel.deb Пакеты $DPKG/perl-base.deb Пакеты $DPKG/dpkg_1.14.25maemo3+0m5_armel.deb Пакеты $DPKG/sysv-rc_2.85-22.osso15_all.deb
По идее он должен сообщить, что всё прошло успешно.

Теперь давайте подключим /dev/pts к гостю, поскольку он необходим при установке некоторых пакетов.

mount --bind /dev/pts root/dev/pts
Вот и все, вы можете выполнить chroot /bin/sh. Теперь мы находимся в новой созданной системе.

Здесь по-прежнему довольно пусто и практически ничего не работает. Теперь нам нужно установить APT. Устанавливаем уже присутствующий в системе dpkg против остальных двух ранее скопированных в нее пакетов.

Давайте сначала установим локаль C, потому что у нас здесь пока нет локали.

экспортировать LC_ALL=C dpkg -i libstdc++6_4.2.1-4maemo13+0m5_armel.deb dpkg -i apt_0.7.20.2maemo13.1+0m5_armel.deb
Теперь прописываем DNS в resolv.conf. Я обычно ставлю 8.8.8.8, но это не для всех.

Также сокращаем source.list до следующего вида:

Деб http_://repository.maemo.org/extras/ Фримантл-1.3 бесплатно несвободно Деб http_://repository.maemo.org/extras-testing/ Фримантл-1.3 бесплатно несвободно Деб http_://repository.maemo.org/extras-devel/ Фримантл-1.3 бесплатно несвободно Деб http_://repository.maemo.org/ Фримантл/SDK бесплатно несвободно
apt-получить обновление apt-get --allow-unauthenticated -y install apt-transport-https coreutils tar build-essential gzip grep bash aptitude libgtk2.0-dev apt-получить чистоту
Сидим и ждем, пока apt-get быстро скачает и установит пакеты.

Когда появится вопрос, перезаписать ли resolv.conf, продолжайте.

На выходе мы получаем компактную (мегабайт около 200, из сети вообще выкачивается около 60) среду, в которую можно легко выполнить chroot и скомпилировать туда всякое разное.

И все это без разных кривых скретчбоксов.

Единственное, Xephir вряд ли получится использовать, но мне как-то ближе к отладке на железе.

При желании можно развернуть ту же систему в версии i386, процесс ничем не отличается, но X-сервер должен быть подключен.

После описанных выше шагов вам, возможно, придется перейти Прямо здесь чтобы получить доступ к проприетарному программному обеспечению (в частности, к библиотекам OpenGL, без них Qt установить невозможно).

Кстати, nokia-binaries и nokia-apps нужно устанавливать через aptitude. apt-get по какой-то причине не может разрешить зависимости.

Напомню, что некоторый софт не работает в режиме qemu-user. Я настоятельно рекомендую использовать qemu-arm-system, настроив ее на образ обычного Linux, скомпилированного под ARM, а затем выполнить оттуда chroot. Вы можете создать образ Ubuntu, используя это: это руководство , там нет ничего сложного.

Но для обычного GCC qemu-user более чем достаточно.

Спасибо за внимание, увидимся снова.

Архив с пакетами и скриптом установки Теги: #Смартфоны #Bootstrap #maemo #поднимание себя за шнурки ботинок

Вместе с данным постом часто просматривают: