Про оценки

Первое. С хабра, по поводу того, что Сбербанк внедрил очень удобный сервис — возможность перевода денег на карточный счет без указания реквизитов счета, только по номеру карты. Кто-то из хабровчан раскопал «уязвимость» (кстати, по поводу уязвимостей и находящих их ксакепов сегодня хорошо написал Raymond Chen — по другому поводу, конечно, но прочитать стоит) и поспешил поделиться впечатлениями. Первый же коммент:

Как был сбер совком, так и остался.

Второе. Тоже с хабра, по поводу того, что в прошлое воскресенье толпа гиков смела все журналы Vogue с видеорекламой.

Быдло все раскупило

Третье. Из жежешечки, злобный Мегафон предоставил услуг роуминга на миллион рублей, а потом начал упрашивать заплатить бабушку-божий одуванчик, на которую был оформлен контракт.

Отдельно хочется упомянуть о переживаниях пятидесятидевятилетней женщины, которой приходится столько всего терпеть только из-за того, что у нее оказался при себе паспорт, и она поставила свою подпись на договоре. Сколько за это время выпито корвалола — только Богу известно.

Почему-то только несовки и небыдло могут попадать на бабки, скачивая в роуминге сериал «Интерны», да еще и подставлять пенсионерок.

Компьютерные игры и «разумный эгоизм»

Интересен, кстати, такой вопрос. Во всяких компьютерных играх — от шутеров до симуляторов иногда для «повышения реализма» предполагается действовать «в команде» — например, для «шутера про вторую мировую» — в составе взвода или роты. Естественно, что из Doom-овского «супер-космодесантника» игрок превращается в обычного пехотинца с довольно небольшим шансом выжить. При этом от действий конкретного бойца — спрячется он за сараем или пойдет в атаку вместе со всеми — ничего особо не зависит. Лично я видел два варианта AI в такой ситуации:

Первый. Заскриптованные «свои» все равно победят, поэтому игроку лучше «спрятаться за сараем» и ждать, когда высветится «Наши победили!» После этого — переход к следующей миссии, все счастливы. Например, так ведет себя Mount and Blade.

Второй. «Свои» — толпа болванов, которые без помощи игрока все равно не справятся. Дико раздражает, когда картонные «свои» в упор не попадают по противнику, как-то не хочется рисковать хит-поинтами из-за этих дебилов. Это обычный сценарий для шутеров.

Если все-таки склоняться к «реализму», то остановимся на том, что «свои» все-таки умеют иногда попадать в противника из винтовки. Тогда наиболее «разумным» видом поведения для желающего пройти игру будет «разумный эгоизм» — т. е. спрятаться за сараем, пока боты идут в атаку и выносят других ботов. В любой реальной армии проблема таких «особо умных» была решена много веков назад. Как говорил Фридрих Великий, «дубинка капрала должна быть страшнее вражеской пули» — отсюда и заградотряды, и политработники с маузерами.

Лично я не видел ни одной компьютерной игры «от первого лица», где присутствовал бы политрук с маузером или НКВДшный заградотряд в бункере с пулеметом. Думаю даже, что при «ненулевых» боевых умениях сотоварищей в игре практически нереально исключить возможность пройти игру, прячась за спинами очень умелых ботов. А какое мнение на сей счет выскажет профессиональный гейм-дизайнер [info]golergka?

Маленькое объявление

Похоже, делиться радостью по поводу успешного запуска эмулятора PAVO я буду не раньше пятницы — как-то настроения сейчас нет описывать его сборку.

Я люблю китайских программистов

Дело было не в бобине — раздолбай сидел в кабине :)

В общем, указанным в одном из предыдущих постов методом собирается вполне работоспособный qemu-JZ. Несмотря на то, что в нем «поломана» поддержка MIPS Malta, не говоря уже о других платформах, эмуляция PAVO получается «правильной». А теперь — как я это выяснил.

Прикрутить файлы от qemu-JZ к текуцей версии эмулятора получилось, но радости от этого было мало — черный экран и не более того. Даже U-Boot ничего не выводил в консоль. «Нехорошо» — подумал я и начал изучать образ флешки. Оказалось, что там от загрузчика, ядра и ФС присутствовала лишь первая страница, но повторенная много-много раз. Я удивился еще больше, посмотрел на код pavo_nandflash.c и понял — эта утилитка не может работать от слова «совсем». Большей кривости я не видел и за 20 минут написал практически аналогичную программу, создающую правильный образ флешки.

После этого увиделся U-Boot, стало грузиться и работать ядро — все замечательно, за исключением того, что собранная konst.cranky файловая система почему-то оказалась неполной — там напрочь отсутствует, например, директория /bin и все ее содержимое %)

Подробности и скриншоты — вечером :)

Китайский эмулятор

Кстати, выяснил, что «китайский» QEMU «совсем» испорчен и по крайней мере в Windows не умеет эмулировать MIPS — вообще никакой. Вчера пытался «с наскока» прикрутить файлы от «китайца» к более работоспособному QEMU, но неудачно. Буду тыкаться дальше. Больших результатов не обещаю — времени сейчас маловато, так что могу лишь порадоваться за людей из гугл-группы VoGeeky, которым удалось запустить на плате из Вога Linux.

Кстати, а не даст ли кто ссылку на документацию по «внутренностям» QEMU?

Выкачиваю Ingenic-овский FTP

Вчера поставил один граббер выкачивать все с FTP с документацией Ingenic-а. Как в известном анекдоте про китайских хакеров, со стопиццотой попытки, сервер согласился, что пароль — «Мао Цзе Дун». А если серьезно — тамошний FTP иногда в припадках безумия все-таки не спрашивает пароль на доступ к планой части документации и отдает ее «за так». Если долго и настойчиво долбиться — можно скачать много интересного. Например, на том сервере есть что-то про Android, файлы пока не скачались, но, чувствую, будет интересно.

Неудачный результат — тоже результат

Так и не выходит запустить эмулятор PAVO, скомпилированный под MinGW. Сам эмулятор, видимо, работает, но ничего, кроме черного экрана от него добиться не удалось. Как предлагает Библия, седьмой день недели надо посвятить Богу своему, поэтому, как русский православный человек, ничего делать в воскресенье я уже не буду (есть, конечно, те, кто начинает отсчет дней недели с воскресенья, по-американски, и посвящяет своему Б-гу субботу, но таких мы единогласно осуждаем). Для очистки совести напишу, с чем конкретно я столкнулся. Все это делалось в MinGW под Windows 7, так что «костыли и подпорки» касаются только этого «build environment».

Для компиляции QEMU я воспользовался пошаговой инструкцией с qemu-forum.ipi.fi, творчески ее модифицировав. Шаги с первого по пятый выполняем без изменений. Проблемой может стать поиск старой версии MinGW. Я нашел MinGW 3.1.0-1 на сайте Kudzu World.

Затем я установил пакет directx-devel, как описано на седьмом шаге, а при установке SDL столкнулся с трудностями — он не компилировался, какие-то странные глюки возникали при копировании файлов. Поэтому вместо восьмого шага руководства я скачал уже готовую библиотеку SDL 1.2.1.14 для MinGW с официального сайта. Распаковываем архив и выполняем make install.

Девятый шаг — установка zlib, там все нормально и соответствует инструкции. Дальше начинаются пляски с бубном. Скачиваем с jz-hacking исходники qemu-jz. Распаковываем, запускаем ./configure --target=mipsel-softmmu. Если теперь попытаться выполнить make, вылетит ошибка — используемая версия gcc не знает об одном из параметров командной строки. Поэтому в файлах config-host.mak и mipsel-softmmu\Makefile надо убрать параметр компилятора -Wendif-labels. Заодно в файле qemu-sockets.c на 155 и 273 строках надо заменить вызов функции gai_strerror на любую строку — этой функции почему-то нет в MinGW, да и не пригодится нам ее выдача. После этого делаем make. На этом qemu готов, перемещаем файлик qemu-system-mipsel.exe в какое-нибудь более пристойное место и подкладываем к нему SDL.dll.

Кстати, иногда configure «на ровном месте» спотыкается при определении наличия zlib. Не паникуем, а просто запускаем еще раз. Иногда просветление настигает железного болвана на третий-четвертый раз.

Теперь займемся изготовлением прошивки для флешки. Она состоит из трех частей — загрузчик на основе u-boot, ядро Linux и файловая система. Загрузчик и ядро Linux уже «собраны», их достаточно только скачать.

Файл u-boot-nand-pavo-20090207.bin переименовываем в u-boot-nand.bin, uImage-pavo-20090207 — в uImage.

Файловую систему предлагают построить из ее же, но заархивированной, с помощью утилиты mkyaffs2image, но не оригинальной версии, а чуть-чуть модифицированной. В MinGW собрать работающую версию мне не удалось, но konst.cranky любезно поделился собственноручно сделанным файлом, скачать его можно отсюда — http://files.mail.ru/6DBIGD.

Так или иначе, разжившись файлами u-boot-nand.bin, uImage и rootfs.yaffs2 складываем их в одно место и готовимся делать образ флешки. Для этого надо скомпилировать утилиту pavo_nandflash. Как водится, начнем продираться через dependency hell. Для утилиты требуется библиотека libconfuse. Займемся ее сборкой. Китайцы советовали версию 2.5, скачиваем ее в архиве и распаковываем. Дальше, казалось бы, все просто — ./configure, make — и тут спотыкаемся. В исходниках не предусмотрено, что бывают Win32-системы без dllimport — а конкретно, MinGW. Лезем в файл confuse.h и заменяем там конструкцию

# ifdef BUILDING_DLL
# define DLLIMPORT __declspec (dllexport)
# else /* Not BUILDING_DLL */
# define DLLIMPORT __declspec (dllimport)
# endif /* Not BUILDING_DLL */

на кошерную

#ifndef __GNUC__ /* Not MINGW */
# ifdef BUILDING_DLL
# define DLLIMPORT __declspec (dllexport)
# else /* Not BUILDING_DLL */
# define DLLIMPORT __declspec (dllimport)
# endif /* Not BUILDING_DLL */
#else /* MINGW */
# define DLLIMPORT
#endif /* MINGW */

Кроме того, надо отредактировать examples/Makefile — примеры использования библиотеки кривые и не компилируются. Заменяем all: all-am на

all:
  echo "foo"

В начале второй строки должен стоять Tab. Теперь с чистой совестью выполняем make и make install.

Теперь можно попытаться собрать утилиту от братьев-китайцев. Скачиваем архив, распаковываем, чистим от мусора.

wget http://jz-hacking.googlecode.com/files/jz_tools_20090207.tar.gz
tar zxvf jz_tools_20090207.tar.gz
cd jz_tools/nand_flash
make clean

В файле pavo_nandflash.c после всех define-ов добавляем typedef unsigned int uint32_t;. Теперь make моментально соберет pavo_nandflash.exe. Перекидываем его в директорию с «частями» прошивки и пишем файл pavo_nandflash.conf, примерно такой:

#
# pavo board nand flash configuration file.
# Copyright (C) 2008 yajin(yajin@vm-kernel.org)
#

# comment the unwanted part
flash_image = pavo-nand.bin

uboot_image = u-boot-nand.bin
uboot_start = 0x00000000
uboot_end = 0x00400000
uboot_add_ecc = 0

kernel_image = uImage
kernel_start = 0x00400000
kernel_end = 0x00800000
kernel_add_ecc = 0

rootfs_image = rootfs.yaffs2
rootfs_start = 0x00800000
rootfs_end = 0x08000000
rootfs_oob = 1
rootfs_add_ecc = 0

Запускаем исполняемый файл, получаем гигабайтный образ флешки — pavo-nand.bin. Подкладываем его к эмулятору и пытаемся запустить командой

qemu-system-mipsel -M pavo -mtdblock pavo-nand.bin

К сожалению, мне удалось получить лишь черный экран. С помощью Ctrl+Alt+(цифры) можно переключаться между несколькими «консолями» — в том числе и «монитором». Дамп памяти показывает, что u-boot загружается, а вот ядро Linux — уже нет.

Если кто-то будет более удачлив — то после загрузки ядра надо набрать в консоли runqpe, тогда запустится qtopia.

В общем, предлагаю желающим опробовать китайский рецепт на «полноценном» линуксе.

Просьба к товарищам линуксоидам

Извращаюсь с PAVO, благополучно собрав эмулятор. Точнее, пытаюсь извращаться — у меня не запускается собранный для него Linux. Я скачал u-boot и образ ядра, но не могу сделать файловую систему — MinGW не поддерживает symlink-ов и утилитка mkyaffs2image не хочет работать правильно. Может кто-нибудь выполнить описанные в Make the yaffs2 image шаги и выложить куда-нибудь получившийся файл rootfs.yaffs2?

Смело нырнул в волшебный мир GNU-того софта

Теперь главное вынырнуть.

Круче бесконечных ./confugure, make и make install по мозгоразрывающему действию могут быть лишь макросы ворда.

Хочу извращений

Так и не нашел я в окрестных лабазах пресловутого номера Vogue, думаю, что в ближайшее время аналогичная реклама вряд ли где появится (хотя не исключаю рекламу водки «Погань» в журнале «Ксакеп»). А вот всякой документации на процессоры фирмы Ingenic почитал порядочно.

Довольно интересная штука за авторством этой фирмы — демо-плата PAVO на процессоре Jz4740.

ingenicdemo

Самое замечательное — то, что эта демо-плата эмулируется в QEMU, точнее, в доработанном китайцами QEMU. Их страничка так и называется — JZ Hacking. Там можно скачать работающий (ладно, компилящийся) QEMU с доработками, прошивку для девайса, а также несколько утилит для создания «правильного» образа флешки из файлов *.bin.

mipsel-qemu

Кстати, никто не «подкидывал» эмулятору образ флешки, вытащенный из Vogue? Или наоборот — никто не заливал в Vogue прошивку от PAVO? Впрочем, я не про это. Лично мне кажется, что в портировании Линукса на очередную китайскую плату нет какого-то «драйва». Китайцы все равно это уже сделали, и не хуже многих. Потом, мне Линукс не нравится из религиозных соображений :)

А вот поковырять платку (или эмулятор) в плане запуска на ней Minix 3 — довольно забавное, с моей точки зрения, занятие. Насколько я понимаю, разные процессоры Jz47xx отличаются в основном набором периферии — которую можно вынести в драйверы. Процессорное ядро там одинаковое, причем совместимое с MIPS.

К сожалению, Ingenic-овский FTP огородили от любителей халявы, и теперь он требует пароль :( Придется еще и заниматься reverse engineering-ом по исходникам QEMU.

Скажете, извращение? А вот лично мне интересно. Если не будет возникать особенных сложностей — буду писать в своем уютненьком под тегом «миникс«. Думаю, что два-три часа в неделю на извращения я найду, а по опыту вот этого мужичка — этого вполне достаточно для «любительского» проекта.