После двенадцати часов успешного медитирования над криво портированным китайцами ядром, я, кажется, начинаю постигать Дзен.
Портирование, по крайней мере ядра 2.6 - это не просто, а очень просто, если даже криворукие китайцы этим занимаются!
Дело в том, что обычно не требуется портирование на новую архитектуру и даже на новое семейство - производители процессоров, как правило, уже позаботились об этом. Обычно нужно всего лишь адаптировать ядро под конкретную board-у.
Для начала достаем из интернета подхощие source, желательно от производителя процессора или, еще лучше, подходящей evaluation board.
Первым делом заходим в /arch/<нужная архитектура>/<нужное семейство>. Например в /arch/arm/mach-omap2. Выбираем наиболее близкий файл инициализации платы board-<оригинальная плата>.c и копируем его в board-<моя плата>.c.
Во вновь полученном исходнике убираем лишние устройства и шины, добавляем недостающие. Не забываем про инициализацию портов ввода-вывода.
В файл Kconfig добавляем флажок для нашей платы. Очень просто - смотрим, как сделано для других и добавляем таким же образом для себя. Добавляем правило для сборки нашего модуля инициализации платы в Makefile. Правило - собирать при наличии нашего флажка конфигурации. Тоже по аналогии - там все однотипно.
Добавляем в ядро недостающие драйвера - по вкусу. Не забываем добавлять флажки в соответствующие Kconfig-и и правила сборки в Makefile-ы.
Запускаем конфигурацию ядра на основе выбранной дефолтной. Например:
user> make ARCH=arm defconfig_twister_android menuconfig
Меняем конфигурацию ядра под себя. Не забываем выбрать галочку с нашей платой и отметить добавленные драйвера. Сохраняем конфигурацию и копируем .config в /arch/<моя архитектура>/configs/defconfig_<моя плата> - пригодится.
Вобщем-то все, осталось запустить сборку ядра. Если все сделано правильно, то оно соберется и, может быть, даже заработает.
Все просто. Но дъявол, как известно, кроется в деталях...