Opendingux-rzx50-20120206
Antony (обсуждение | вклад) (Новая страница: «Поставка 20120206. Экспериментальная поставка для разработчика. Отличия от [[Rzx-pack-20120202|пос...») |
Antony (обсуждение | вклад) |
||
(не показаны 8 промежуточных версий 1 участника) | |||
Строка 26: | Строка 26: | ||
* При помощи штатной утилиты восстановления зашить в RZX-50 ядро <tt>uImage-2.6.31.3-rzx50-20120206-root_mmcblk1p1_tty</tt>. | * При помощи штатной утилиты восстановления зашить в RZX-50 ядро <tt>uImage-2.6.31.3-rzx50-20120206-root_mmcblk1p1_tty</tt>. | ||
* После включения питания должен циклически запускаться Linux, работа которого завершается сообщением kernel panic из-за невозможности подключить корневую файловую систему. | * После включения питания должен циклически запускаться Linux, работа которого завершается сообщением kernel panic из-за невозможности подключить корневую файловую систему. | ||
− | * Установить microSD-карту в слот TF приставки. | + | * Установить microSD-карту в слот TF приставки (слот рядом с выключателем POWER, разбирать приставку не надо!). |
* ОС должна загрузиться, последнее сообщение на экране <tt>Loading sound volume...</tt> | * ОС должна загрузиться, последнее сообщение на экране <tt>Loading sound volume...</tt> | ||
* После этого подключить приставку по интерфейсу USB к ПЭВМ. Приставка будет работать в качестве Ethernet-gadget. | * После этого подключить приставку по интерфейсу USB к ПЭВМ. Приставка будет работать в качестве Ethernet-gadget. | ||
Строка 71: | Строка 71: | ||
./ct-ng oldconfig | ./ct-ng oldconfig | ||
− | toolchain будет установлен в <tt>/opt/ct-ng-1.14.0/mipsel-rzx50-linux-uclibc</tt>, поэтому необходимо позаботиться, чтобы для каталога <tt>/opt | + | toolchain будет установлен в <tt>/opt/ct-ng-1.14.0/mipsel-rzx50-linux-uclibc</tt>, поэтому необходимо позаботиться, чтобы для каталога <tt>/opt</tt> были установлены необходимые права записи. |
Собираем и устанавливаем toolchain: | Собираем и устанавливаем toolchain: | ||
Строка 82: | Строка 82: | ||
Выбираем конфигурацию, собираем образ ядра и модули: | Выбираем конфигурацию, собираем образ ядра и модули: | ||
− | make CROSS_COMPILE=/opt/ct-ng-1.14.0/rzx50-uclibc-0.32.1-olthreads/bin/mipsel-rzx50-linux-uclibc- | + | 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- uImage | ||
make CROSS_COMPILE=/opt/ct-ng-1.14.0/rzx50-uclibc-0.32.1-olthreads/bin/mipsel-rzx50-linux-uclibc- modules | make CROSS_COMPILE=/opt/ct-ng-1.14.0/rzx50-uclibc-0.32.1-olthreads/bin/mipsel-rzx50-linux-uclibc- modules | ||
Строка 94: | Строка 94: | ||
Скачиваем файлы с патчами из {{storage|opendingux-rzx50-20120206/3_rootfs|3_rootfs}}, переходим в каталог <tt>opendingux-buildroot.git</tt> и накладываем их. | Скачиваем файлы с патчами из {{storage|opendingux-rzx50-20120206/3_rootfs|3_rootfs}}, переходим в каталог <tt>opendingux-buildroot.git</tt> и накладываем их. | ||
+ | |||
+ | Примечание: патчи успешно накладываются, если последний коммит вот такой: | ||
+ | |||
+ | 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: | Далее выбираем конфигурацию для RZX50: | ||
Строка 105: | Строка 118: | ||
В этом случае не придётся прерывать сборку от того, что внезапно выяснилось, что не удалось скачать очередной архив с исходными текстами. | В этом случае не придётся прерывать сборку от того, что внезапно выяснилось, что не удалось скачать очередной архив с исходными текстами. | ||
+ | |||
+ | '''Примечание''':<br /> | ||
+ | При выполнении <tt>make source</tt> buildroot пытается скачать | ||
+ | http://ftp.gnu.org/pub/gnu/gcc/gcc-/gcc-.tar.bz2 | ||
+ | естественно это у него не получается и выдаётся сообщение об ошибке. Это ошибка в buildroot, так как в описываемой ситуации используется готовый toolchain и buildroot не имеет необходимости скачивать исходные тексты gcc. | ||
После успешного окончания сборки ext2-образ корневой файловой системы будет в файле <tt>output/images/rootfs.ext2</tt>. | После успешного окончания сборки ext2-образ корневой файловой системы будет в файле <tt>output/images/rootfs.ext2</tt>. | ||
+ | |||
+ | Хотя в конфигурации buildroot указано использовать <tt>ttyS1</tt> для запуска getty, в <tt>/etc/inittab</tt> файловой системы <tt>output/images/rootfs.ext2</tt> будет указано <tt>ttyS0</tt>. Кроме того, <tt>/etc/inittab</tt> придётся исправить в следующих местах: | ||
+ | * добавить загрузку модуля ядра <tt>g_ether.ko</tt>; | ||
+ | * отключить загрузку «главного приложения» <tt>frontend_start</tt> — gmenu2x не стартует, по крайней мере, из-за отсутствия «мыши». | ||
= Найденные проблемы = | = Найденные проблемы = | ||
+ | * не работает клавиатура; | ||
* не работает звук; | * не работает звук; | ||
− | * gmenu2x не стартует из-за отсутствия « мыши »; | + | * <s>необходимо разобраться, как выключить приставку;</s> |
+ | : команда poweroff работает; | ||
+ | * <s>gmenu2x не стартует из-за отсутствия «мыши»;</s> | ||
+ | : установить переменную окружения SDL_NOMOUSE в 1; | ||
* запись на <tt>/dev/mmcblk0</tt> работает некорректно. | * запись на <tt>/dev/mmcblk0</tt> работает некорректно. | ||
* не работает dropbear; | * не работает dropbear; | ||
+ | * хотя в конфигурации buildroot указано использовать <tt>ttyS1</tt> для запуска getty, в <tt>/etc/inittab</tt> упорно используется <tt>ttyS0</tt>. | ||
− | и ещё много проблем. | + | :и ещё много проблем. |
+ | |||
+ | = Вопросы и ответы = | ||
+ | |||
+ | Вопрос: Как выключить приставку? | ||
+ | : Приставка успешно выключается программой <tt>poweroff</tt>. | ||
= Пожелания/предложения = | = Пожелания/предложения = | ||
− | * использовать принятый в opendingux метод — <tt>/dev/sdx1</tt> форматируется под | + | * использовать принятый в opendingux метод — <tt>/dev/sdx1</tt> форматируется под FAT32, корневая файловая система (squashfs) подкладывается на этот раздел в виде файла. |
+ | |||
+ | [[Category:OpenDingux-RZX50]] |
Текущая версия на 21:33, 23 февраля 2012
Поставка 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) подкладывается на этот раздел в виде файла.