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 подправлю, куда без него.

5 комментариев

  1. User007 пишет:

    Извиняюсь всегда было интересно спросить у кого-то типа вас: а зачем это все? Выглядит как геморрой ради геморроя. При том – геморроя намного больше чем могло бы быть.

    Во первых, Cygwin. Ну да, я им пользовался. Он ужасен! Свою лепту вносит и сама винда. В линукс или подобных *никсах гнутый тулчейн становится как родной, почти все утили или есть или ставятся парой команд. В винде все сложно. И цыгвин надо брать где-то сбоку, и проблемы бывают довольно дурные. А после плясок с бубном по установки цыгвина – хм… если посмотреть на то как любой линукс с Konsole или хотя-бы Gnome Treminal + самый обычный bash работает – винду ОЧЕНЬ хочется отправить в треш. Потому что в любом культурном линуксе есть консоль с вкладками, настраиваемая, удобная, симпатичная, с человеческим интерпретатором скриптов и автодополнением из коробки. В виндовсе … dos box убог напрочь. И его дефолтный интерпретер не лучше. PowerShell вообще непонятная фигня которая долго стартует и неудобна в использовании. И какая-то кодировка левая, эпохи доса, к тому же. А у пингвиноидов везде уникод UTF8. Что в гуе, что в консоли. Не надо сношаться с разными кодировками. В общем хорошие терминалы и шеллы – у тех кто ими пользуется и потому делал их для себя. В линуксе командная строка, ее возможности и удобство на порядок лучше. И врядли вы от этого уйдете при том что вы делаете. Плюс разные грабли типа нечувствительности ФС к регистру. В *никсах Changelog и changelog – два разных файла. А вот в винде может обломиться проблем на ровном месте на этот счет.

    Во вторых – вы используете две напрочь разные операционки. Чем сильно усложняете себе жизнь. Это как если бы специалист по автомобильным двигателям вдруг полез делать реактивные двигатели для ракет. В итоге вам придется засрать себе голову знаниями о двух довольно разных операционках и их стыковке между собой, а их разная природа делает стыковку не слишком скучной. Это все мягко говоря весьма неоптимально. Как пример: железку на Linux удобнее всего разрабатывать и отлаживать именно в Linux. Ну или похожем по свойствам *никс, накрайняк. Тогда достаточно знаний о одной ОС и ее особенностях + учет местных специфик конкретной железки.

    В третьих, а почему Minix, собственно? А что с ним потом делать? Я могу себе представить как сделать что-то полезное на практике из этой железяки за обозримое время и даже чуть ли не одному человеку … на Linux. А в чем смысл портирования Minix? Есть надежды получить практически годный результат за разумное время?

    • > если посмотреть на то как любой линукс с Konsole или хотя-бы Gnome Treminal + самый обычный bash работает – винду ОЧЕНЬ хочется отправить в треш

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

      > Во вторых – вы используете две напрочь разные операционки. Чем сильно усложняете себе жизнь.

      Запустите в Linux USBBoot, который используется для прошивки вогоплеера.

      ftp://ftp.ingenic.cn/3sw/00tools/usb_boot/source/usbboot1.4b-sources.zip

      Ну и еще – компьютер не находится в моем единоличном пользовании, так что если я поставлю Linux для своих игрушек – остальные не одобрят.

      > В третьих, а почему Minix, собственно?

      По приколу.

      > А что с ним потом делать?

      То же, что и с любой POSIX-совместимой ОС.

      > Есть надежды получить практически годный результат за разумное время?

      Нет.

  2. CYB3R пишет:

    > Я буду собирать версию всей этой гадости для pavo
    Шура, а у тебя есть настоящая китайская PAVO или это просто какой-то дешёвый плеер?

  3. igor kononov пишет:

    Добрый день Шура,
    Меня зовут Игорь Кононов, работаю на компанию Plasser American Corporation, американское отделение австрийской компании.
    В последнее время очень заинтересовались системой Миникс и ищем специалистов по этой системе.

    Интерес связан с возможностями использовать Миникс для встроенных (embedded) приложений и систем реального времени.
    Если у Вас есть экспертиза по этой систем и интерес пообщаться, пожалуйста ответьте на мой адрес ikononov@plausa.com.
    Могу также позвонить, если сообщите телефон.

    С Уважением, Игорь Кононов