Opendingux-rzx50-20120206

Материал из RZX50
Перейти к: навигация, поиск

Поставка 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) подкладывается на этот раздел в виде файла.
Личные инструменты
Пространства имён
Варианты
Действия
Навигация
Инструменты