Opendingux-rzx50-20120206
Поставка 20120206.
Экспериментальная поставка для разработчика.
Отличия от поставки 20120202:
- решены проблемы с libSDL и libpthread (удалось добавить в корневую файловую систему gmenu2x);
- значительно увеличено количество программ и библиотек в rootfs.
Содержание |
Состав:
Ядро
Скачать: linux-2.6.31.3-rzx50-20120206-root_mmcblk1p1_tty.tar.gz
Корневая ФС
Скачать: rootfs-20120206-eth_usb.ext2.gz
Установка
- Скачать ядро и образ корневой файловой системы.
- На microSD-карте (например, /dev/sdx) создать таблицу разделов DOS и создать раздел 1 (/dev/sdx1) размером не менее 128 МБ.
- Декомпрессировать rootfs-20120206-eth_usb.ext2.gz в первый раздел microSD-карты:
zcat rootfs-20120206-eth_usb.ext2.gz > /dev/sdx1
- При помощи штатной утилиты восстановления зашить в RZX-50 ядро uImage-2.6.31.3-rzx50-20120206-root_mmcblk1p1_tty.
- После включения питания должен циклически запускаться Linux, работа которого завершается сообщением kernel panic из-за невозможности подключить корневую файловую систему.
- Установить microSD-карту в слот TF приставки (слот рядом с выключателем POWER, разбирать приставку не надо!).
- ОС должна загрузиться, последнее сообщение на экране Loading sound volume...
- После этого подключить приставку по интерфейсу USB к ПЭВМ. Приставка будет работать в качестве Ethernet-gadget.
- Назначить интерфейсу Ethernet-gadget ПЭВМ (как правило, usb0) IP-адрес 10.1.0.1. Приставка будет иметь IP-адрес 10.1.0.2. Доступ к приставке возможен по протоколам telnet и ftp.
Удаление
- При помощи штатной утилиты восстановления зашить в RZX-50 заводское ядро.
Замечания
- на корневой файловой системе имеются strace и gdb; strace позволяет, протрассировав запуск программы, увидеть, после какого системного вызова завершилась её работа (например, не удалось открыть файл).
- ftp-сервер по-умолчанию предоставляет доступ к каталогу /media, что не всегда желательно. Для того, чтобы исправить эту ситуацию, необходимо зайти на приставку по telnet, перемонтировать корневую файловую систему в режим записи и изменить содержимое файла /etc/inetd.conf.
- ядро содержит клиента NFS, поэтому необходимость в ftp отпадает практически полностью.
Краткая инструкция по сборке
Сборка прошивки включает в себя следующие этапы:
- сборка toolchain (инструментальных средств для создания исполняемых на JZ4755 модулей из исходных текстов программ на языках C и C++) при помощи crosstool-ng;
- сборка ядра ОС Linux;
- сборка образа корневой файловой системы (ФС) при помощи opendingux-buildroot.
Opendingux-buildroot позволяет объединить все перечисленные выше стадии, в том числе собрать toolchain своими средствами. Автор сознательно пошёл на небольшое усложнение: дело в том, что crosstool-ng предоставляет гораздо больше возможностей по настройке создаваемого toolchain. Но самое главное автору так и не удалось собрать работающую прошивку таким образом. Кроме того, toolchain, создаваемый при помощи buildroot чуть менее удобен в применении, а после выполнения make clean его придётся пересобирать заново, что занимает некоторое время.
Предполагается, что читатель, взявший на себя смелость полностью пересобрать прошивку, знает кто такие patch, tar, git, и в состоянии установить необходимое ПО, когда crosstool-ng с удивлением сообщит ему об отсутствии на ПЭВМ какого-то bison'а.
Сборка toolchain
Создаём каталог для сборки прошивки:
cd ~ mkdir rzx50 cd rzx50
При сборке toolchain crosstool-ng будет скачивать исходные тексты инструментальных средств и ядра; тоже будет делать и buildroot, поэтому во избежание дублирования сделаем общий каталог src:
mkdir src
Скачиваем и распаковываем crosstool-ng-1.14.0.tar.bz2. Переходим в каталог crosstool-ng-1.14.0 и скачиваем конфигурационные файлы:
cd crosstool-ng-1.14.0 wget http://prizma.bmstu.ru/rzx50-storage/opendingux-rzx50-20120206/0_toolchain/crosstool-ng-1.14.0.config wget http://prizma.bmstu.ru/rzx50-storage/opendingux-rzx50-20120206/0_toolchain/uClibc-0.9.32.1.config cp crosstool-ng-1.14.0.config .config
Делаем ссылку на общий каталог с исходными текстами:
ln -s ../src
Устанавливаем croosstool-ng локально (см. docs/2 - Installing crosstool-NG.txt), а затем:
./ct-ng oldconfig
toolchain будет установлен в /opt/ct-ng-1.14.0/mipsel-rzx50-linux-uclibc, поэтому необходимо позаботиться, чтобы для каталога /opt были установлены необходимые права записи.
Собираем и устанавливаем toolchain:
./ct-ng build
Сборка ядра Linux
При сборке toolchain в каталог ~/rzx50/src должен был быть скачен файл linux-2.6.31.3.tar.bz2. Переходим в ~/rzx50 и распаковываем указанный файл.
Скачиваем файлы с патчами из 2_kernel, переходим в каталог linux-2.6.31.3 и накладываем их.
Выбираем конфигурацию, собираем образ ядра и модули:
make CROSS_COMPILE=/opt/ct-ng-1.14.0/rzx50-uclibc-0.32.1-olthreads/bin/mipsel-rzx50-linux-uclibc- rzx50_defconfig make CROSS_COMPILE=/opt/ct-ng-1.14.0/rzx50-uclibc-0.32.1-olthreads/bin/mipsel-rzx50-linux-uclibc- uImage make CROSS_COMPILE=/opt/ct-ng-1.14.0/rzx50-uclibc-0.32.1-olthreads/bin/mipsel-rzx50-linux-uclibc- modules
Сборка корневой файловой системы
Скачиваем opendingux-buildroot:
cd ~/rzx50 git clone https://github.com/mthuurne/opendingux-buildroot.git opendingux-buildroot.git
Скачиваем файлы с патчами из 3_rootfs, переходим в каталог opendingux-buildroot.git и накладываем их.
Примечание: патчи успешно накладываются, если последний коммит вот такой:
commit f522f6e79c579d561b610da6495b8a1d3397a7ab Author: Maarten ter Huurne <maarten@treewalker.org> Date: Sun Feb 5 01:16:14 2012 +0100 SDL: Fixed wait-for-vsync patch. The ioctl argument must be a pointer to an unsigned integer, rather than the unsigned integer itself. Fixes commit a6389ef469a69e060a79cc645797c6662b95c332.
Далее выбираем конфигурацию для RZX50:
make rzx50_defconfig
Затем собираем:
make
Для упрощения сборки целесообразно прежде чем запускать make без параметров выполнить:
make source
В этом случае не придётся прерывать сборку от того, что внезапно выяснилось, что не удалось скачать очередной архив с исходными текстами.
Примечание:
При выполнении make source buildroot пытается скачать
http://ftp.gnu.org/pub/gnu/gcc/gcc-/gcc-.tar.bz2
естественно это у него не получается и выдаётся сообщение об ошибке. Это ошибка в buildroot, так как в описываемой ситуации используется готовый toolchain и buildroot не имеет необходимости скачивать исходные тексты gcc.
После успешного окончания сборки ext2-образ корневой файловой системы будет в файле output/images/rootfs.ext2.
Хотя в конфигурации buildroot указано использовать ttyS1 для запуска getty, в /etc/inittab файловой системы output/images/rootfs.ext2 будет указано ttyS0. Кроме того, /etc/inittab придётся исправить в следующих местах:
- добавить загрузку модуля ядра g_ether.ko;
- отключить загрузку «главного приложения» frontend_start — gmenu2x не стартует, по крайней мере, из-за отсутствия «мыши».
Найденные проблемы
- не работает клавиатура;
- не работает звук;
-
необходимо разобраться, как выключить приставку;
- команда poweroff работает;
-
gmenu2x не стартует из-за отсутствия «мыши»;
- установить переменную окружения SDL_NOMOUSE в 1;
- запись на /dev/mmcblk0 работает некорректно.
- не работает dropbear;
- хотя в конфигурации buildroot указано использовать ttyS1 для запуска getty, в /etc/inittab упорно используется ttyS0.
- и ещё много проблем.
Вопросы и ответы
Вопрос: Как выключить приставку?
- Приставка успешно выключается программой poweroff.
Пожелания/предложения
- использовать принятый в opendingux метод — /dev/sdx1 форматируется под FAT32, корневая файловая система (squashfs) подкладывается на этот раздел в виде файла.