На данный момент существует только один официальный способ компиляции для N900 - через Scratchbox. Чем он мне не понравился? Да, вот что.
Прежде всего, он только под i386, со всеми вытекающими из этого удовольствиями в виде необходимости держать кучу 32-битных библиотек.
Во-вторых, он почему-то устанавливается, вопреки всем канонам, в /scratchbox, попутно прописывая собственные модули для binfmt и, творя прочие непотребства, разрушая стройную структуру дистрибутива.
В-третьих, qemu довольно древний, что не дает рекордной скорости компиляции.
Ну и в-четвёртых, это чудо постановочное Очень медленно (не знаю, где они хостятся, но установщик довольно долго скачал полгига пакетов.
Кстати, при установке он тоже весит изрядно.
И поверх него есть SDK. Ну и самое главное.
qemu-пользователь не поддерживаю весь набор системных вызовов ядра.
Это означает, что часть программного обеспечения (в частности, моно) просто не сможет работать.
Проблему можно решить путем chrooting в среду из системы Arm в режиме полной эмуляции, но см.
пункт первый.
В общем, это убогий продукт; Даже не представляю, кто осмелится использовать его в серьёзном проекте.
Теоретически вы все равно можете скомпилировать прямо на устройстве.
Но проблема здесь в том, что есть busybox, который очень плохо дружит с тем же dpkg-buildpackage. Соответственно, когда переносишь rootfs с устройства и пытаешься им воспользоваться, эти грабли никуда не пропадают. А вот заменить его на coreutils не так-то просто, потому что при этом сломается часть зависимостей и половина системы отвалится.
И что же мне делать? А мы пойдем другим путем.
Давайте представим себя ярыми последователями барона Мюнхгаузена и в лучших традициях бутстрап-процедуры (подъема себя за шнурки) установим систему с нуля из пакетов.
Как именно, читайте под катом.
На самом деле, вам необходимо иметь и заставить работать сердце любого дистрибутива на основе 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 #поднимание себя за шнурки ботинок
-
Получите Безопасность Без Компромиссов
19 Oct, 24 -
10 Интересных Фактов Из Истории Apple-I
19 Oct, 24 -
Манипуляции С Матрицами Квантования. Часть 2
19 Oct, 24 -
Мышиная Гонка
19 Oct, 24 -
Microsoft Directx Опасен
19 Oct, 24