Table of Contents
Сборка собственной прошивки для XO
Первоисточник находится тут.
Сборка прошивки разделена на два больших этапа:
- создание репозитария с собственными пакетами
- генерации прошивки с помощью Piligrim на базе собственного + OLPC репозитариев
Опыт сборки прошивки с собственным ядром
Сначала необходимо собрать собственный rpm с ядром. В моём случае это была голова из ветки wireless-testing
git clone git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
Затем из git OLPC мною был взят конфиг для их ядра и доделан до возможности делать make oldconfig в выбранной мною ветке.
Сборка ядра
В процессе сборки ядра возникали следующие проблемы:
- исходно конфиг OLPC содержит директиву применять расширение 3DNOW, в виду чего для запуска образа в эмуляторе требуется процессор производства компании AMD. Я оного не имею, поэтому в menuconfig переключил тип процессора на Pentium/i686 вместо какого-то странного названия, которое влекло появление инструкций 3DNOW. Т.е. на самом деле опция конфигурационного файла с включением/выклучением инструкций 3DNOW не является первостепенной и может быть отключена изменением типа целевого процессора
- при загрузке на XO первое ядро сообщило, что не смогло найти модули ide-core.ko и piix.ko Думаю что для ХО данные модули важны, поэтому нашел опции в конфигурационном файле и включил их. Но на этом беды не закончились… В файлике pilgrim/stream.d/olpc-development.stream, который является bash-скриптом выполняющимся в chroot-e генерируемой прошивки, данные модули остаются исключительно для прошивок ext3 и devel_ext3… Т.е. их специально удаляют/не включает1) из jffs2 варианта. На текущий момент просто поправил чтобы они всегда оставались.
- так как в репозитариях OLPC пакет kernel имеет архитектуры от i386 до i586, то на всякий случай в спецификации была указана архитектура i686.
Далее делаем отдельный репозитарий для нашего пакета. В моём случае он назывался kernel-2.6.27-5.olpc.i686.rpm. Чтобы сделать репозитарий достаточно в каталоге где лежит пакет написать createrepo . После выполнения, в каталоге появиться поддиректория repodata, в которой собственно и хранится описание нашего репозитария для yum.
Следующий шаг состоит в включении новоиспеченного репозитария в конфиг, чтобы на стадии сборки прошивки yum подцепил наше ядро взамен представленных в репозиатриях OLPC.
Включение собственного репозитария содержит несколько тонкостей:
- нигде не написано, однако при инсталяции pilgrim использует ТОЛЬКО репозитарии, имена которых начинаются с “olpc”, так что незабудьте добавить префикс olpc к названию собственного репозитария
- стоит учесть, что для вашего ядра могут понадобиться(в следствии зависимостей) другие пакеты, поэтому я не долго думая добавил репозитарий 9 Федоры… Что в свою очередь выявило следующий косяк:
- всегда ставте пакет NetworkManager из репозитариев OLPC. У них он очень забавный и содержит какие-то непонятные питоновские скрипты и утилиты, в том числе и для настройки mesh. Конкретно не смотрел, но факт на лицо.
Таким образом конфиг для yum у меня стал выглядеть следующим образом:
[olpc-fedora] name=Fedora 9 - i386 #baseurl=http://download.fedoraproject.org/pub/fedora/linux/releases/9/Everything/$basearch/os/ mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-9&arch=i386 enabled=1 gpgcheck=0 exclude=NetworkManager [olpc-local] name=zps baseurl=file:///home/zps/workspace/OLPC/repo/i386/os enabled=1 gpgcheck=0 [olpc_development] name=OLPC Development repo, based on koji tag dist-olpc3-devel. #baseurl=http://koji.fedoraproject.org/static-repos/dist-olpc3-build-current/i386/ #baseurl=http://xs-dev.laptop.org/~cscott/repos/dist-olpc3-devel/ baseurl=file:///home/zps/workspace/OLPC/repo/xs-dev.laptop.org/~cscott/repos/dist-olpc3-devel/ enabled=1 gpgcheck=0 exclude=kernel [olpc-joyride] name=OLPC 'Joyride' Repository #baseurl=http://xs-dev.laptop.org/~cscott/repos/joyride/ baseurl=file:///home/zps/workspace/OLPC/repo/xs-dev.laptop.org/~cscott/repos/joyride/ enabled=1 gpgcheck=0 olpc-development-yum-install.conf 103 utf-8 0x 48,1 Внизу
Для ускорения я скачал репозитарии себе на машину, потому что канал на xs-dev.laptop.org слишком не надежный. Статисчески я выяснил что три из четырех запусков генерации прошиыки падает только потому, что он в процессе не смог чего-то закачать с их репозитария. Учитывая что генерация занимает много времени, лучше лишний раз избежать таких “приколов”.
После добавления собственных репозитариев достаточно выполнить следующую команду:
# pilgrim-autobuild --config-dir . --stream olpc-development --dest-dir . --variant devel_jffs2
Выполнение данной команды имеет тоже несколько тонкостей:
- выполняется она под root
- вызов скриптов выполняется из /usr/sbin без конкретных/относительных путей поэтому, если вы правите скрипт у себя в домашней директории вы должны вновь его установить, чтобы увидеть ваши правки в действии.
- во время выполнения лучше не жать Control+C. В процессе выполнения он очень хитро создает файлы с будущим диском и мапит их на /dev/loop5 и /dev/loop6
Просмотр содержимого img файлов
Результатом работы pilgrim будет являться img файлы, которые представляют из себя файловую систему. В варианте готовом для прошивке на ХО это jffs, для QEMU — ext3
Для просмотра содержимого ext3-прошивки для эмулятора можно воспользоваться следующей последовательностью команд
$ sudo /sbin/losetup /dev/loop5 xo-1-olpc-stream-joyride-build-24-20081011_1843-devel_ext3.img $ sudo /sbin/losetup -o 31744 /dev/loop6 xo-1-olpc-stream-joyride-build-24-20081011_1843-devel_ext3.img $ mkdir ttt $ sudo mount -t ext3 /dev/loop6 ttt
чтобы отмонтировать:
$ sudo umount ttt/ $ sudo /sbin/losetup -d /dev/loop6 $ sudo /sbin/losetup -d /dev/loop5
В случае если хочется просмотреть содержимое реальной прошивки то можно воспользоваться этим руководством. Лично я не смог примонтировать существующий jffs2 образ. Есть подозрение, что в ядре Федоры 9 нет поддержки сжатых jffs2.