Mar. 15th, 2010

mend0za: (Default)
Тема Говна и NDA получила масштабное продолжение.

Любимый заказчик, впечатлённый нашей неземной красотой заманавшись с системной интеграцией, выделил две три недели на создание лицензионно чистой версии Linux ядра под целевой чип. Напоминаю - берём код совершенно постороннего вендора, скачанный с его сайта, и с помощью лома и такой то матери осуществляем портирование Board Support Package (BSP) с 2.6.15.4 (вышел 4 года назад) на 2.6.28.10 (максимально соответствует закрытой для нас версии исходников, на которую заказчик осуществляет интеграцию).

Волшебное застигло на старте - diff вендорского ядра от vanilla kernel 2.6.15.4 составил порядка 500kb. Вся инициализация, ethernet, i2c, модификации serial8250 и прочая.

Если этот патч концентрированного вендорского поноса показать в LKML (Linux Kernel Mailing List) - о голову авторов гарантированно будут бить бутылки, наполненные консервированной мочой Торвальдса, на уничтожение голов вместе с содержимым мозга. Концентрат кодификации кривохаков на скорую руку.


Этапы большого пути (каждый этап выполнялся 2-3 раза, с выкидыванием предыдущих неудачных результатов):

  • Перенос архитектурно-зависимых заголовочных файлов (все пути поменялись)
  • Дописывание ассемблерного кода (ARM9) для распаковки образа (поменялось api распаковщика, автоматически сгенерённые переменные оказались невыровненными, что блокировало компиляцию). RISC, ага. Мозг анально дефлорирован.
  • Жестокая нестандартная инициализация serial8250 c модификацией самого драйвера с комментариями "а вот эту проверочку мы уберём, наш чип её не любит и вообще это ошибка в ядре, но делать мы ничего не будем, а только прилепим кривохак".
  • Кровавое портирование испохабленного драйвера tulip. Да, вендор использует свою собственный форк драйвера tulip, держит её в drivers/net/_tulip, которая малосовместима даже со штатной tulip из 2.6.15.4, не говоря уже об 2.6.28.10. Я, будучи в душе хорошим мальчиком, попытался портировать _tulip похорошему, в основное дерево, но после полутора недель самовзлома мозга сдался, и сделал также как вендор - скопировал его дерево драйверов. А хули - они оторвали PCI c мясом и подключили чип по MII + переход 1.1.13 -> 1.1.15 в upstream kernel tulip сделал корректное портирование для моего уровня познаний в предмете невозможным. Но даже вдогонку мне ядро поднасрало, поменяв инициализацию NAPI в network devices, пришлось upstream внимательно смотреть.


Итак, сегодня в 21:00 я впервые загрузил Лицензионно Чистое Ядро Linux (C) 2.6.28.10 на целевой платформе, NFSROOT.

Остался i2c. Предвижу столь же большой объём мозготраха, как и на tulip ethernet.

Алилуйя. Сим победим.

А вы начинаете каждое утро с аутотренинга - чтения вслух с выражением файла с говорящим названием Documentation/stable_api_nonsense.txt из дерева исходников Linux kernel?

Profile

mend0za: (Default)
mend0za

June 2023

S M T W T F S
    123
45678910
11 121314151617
18192021222324
252627282930 

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 7th, 2025 04:07 am
Powered by Dreamwidth Studios