Я уже успел рассказать людям, что занимаюсь портированием 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
подправлю, куда без него.
Извиняюсь всегда было интересно спросить у кого-то типа вас: а зачем это все? Выглядит как геморрой ради геморроя. При том — геморроя намного больше чем могло бы быть.
Во первых, 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-совместимой ОС.
> Есть надежды получить практически годный результат за разумное время?
Нет.
> Я буду собирать версию всей этой гадости для pavo
Шура, а у тебя есть настоящая китайская PAVO или это просто какой-то дешёвый плеер?
Эмулятор.
Добрый день Шура,
Меня зовут Игорь Кононов, работаю на компанию Plasser American Corporation, американское отделение австрийской компании.
В последнее время очень заинтересовались системой Миникс и ищем специалистов по этой системе.
Интерес связан с возможностями использовать Миникс для встроенных (embedded) приложений и систем реального времени.
Если у Вас есть экспертиза по этой систем и интерес пообщаться, пожалуйста ответьте на мой адрес ikononov@plausa.com.
Могу также позвонить, если сообщите телефон.
С Уважением, Игорь Кононов