toolchain для Ingenic’овских плат

Я уже успел рассказать людям, что занимаюсь портированием Minix 3 на Ingenic’овские процессоры, поэтому мне не удастся сделать вид, что я «пальцы крестиком держал» и ничего толком не делал. Надеюсь, что читающие этот пост не по диагонали уже прочитали всю китайскую документацию, и им не надо объяснять, где искать файл mips_toolchain_guide_EN.pdf. Больших откровений не будет, пишу я скорее для себя, чтобы не забыть последовательность правильных действий.

Итак, первоочередная задача — получить работающий кросс-компилятор, способный собрать исполняемые файлы для «китайского» MIPS. Задача осложнена тем, что занимается этим закоренелый виндузятник. Впрочем, для закоренелых виндузятников имеется такая замечательная вещь, как Cygwin.

Итак, начинаем с установки Cygwin-а. Это аналогичный MSYS «эмулятор» POSIX-совместимой системы, чем-то приглянувшийся китайцам — все утилиты из «комплекта разработчика» для Ingenic’а скомпилированы для Cygwin. Установка довольно проста, внесу от себя лишь одно дополнение — сразу же поставьте пакеты make и gcc. Они понадобятся при компиляции U-Boot.

Второй шаг — установка кросс-компилятора. Берем файл mipsel-gcc4.1-cygwin-nopic.tar.bz2 и распаковываем его в какую-нибудь директорию. Дальше добавляем ее в PATH:

export PATH='/some/path/mipseltools-v-1-2-3/bin':$PATH

После этого можно проверить его работоспособность «китайским» методом, с помощью компиляции helloworld.c — и наверное, даже нужно, подробнее читайте в mips_toolchain_guide_EN.pdf, а мы сделаем один шаг дальше — попробуем собрать U-Boot. Последняя его версия с правками от китайцев и «наших» разработчиков лежит в файловом архиве VoGeeky.

Я буду собирать версию всей этой гадости для pavo, поэтому выполняем команды

make pavo_nand_config
make

По какой-то мне пока непонятной причине некорректно работает утилита, создающая заголовочный файл с картинкой. make вываливается с ошибкой, если после нее попытаться продолжить, то ошибка возникнет в файле lcd.c. У меня не было желания разбираться с глюком, поэтому я пока обошел его так — добавил в конец файла include/bmplogo.h забытый #endif (и убрал оттуда сообщение об ошибке), а в файле common/lcd.c закомментировал все тело функции bitmap_plot().

После всех этих извращений U-Boot успешно собрался, а файл uboot-nand.bin прекрасно запустился в эмуляторе Pavo (только вот логотип не показал, что и логично).

Итак, я получил работающий toolchain, который может собирать софт для «голого» железа. Удивительно, но особых «подводных камней» не возникло. Дальше я немного поизвращаюсь на C для «голого» железа, без ОС, а затем вплотную займусь Minix’ом. Прежде всего придется продумать его загрузку. Я не хочу писать «вторичный загрузчик», работающий после U-Boot, но не хочу и переделывать «загрузочный образ» Minix. Наверное, это можно решить с помощью скрипта для U-Boot. Ну и bmp_logo.c подправлю, куда без него.