mend0za: (Default)

Просто картинка, немного связанная (гм) с темой заметки.



У меня возникает уже во второй раз за месяц однотипная, очень странная ошибка при кодировании:

Если в инициализации ничего не сломалось (т.е. не случилось ни одной исключительной ситуации, все файлы внезапно на месте, все настройки в порядке), моя библиотека не верит своему счастью и уходит в глухой отказ.

При дальнейших запросах о статусе - отвечает "всем пиздец! всё сломано!". Но всё кроме запроса статуса - работает отлично.

Воспроизводится, повторюсь, только если запуск прошёл идеально, без единой шероховатости. В случае если проблемы был - отрабатывает все проблемы, где надо подымает умолчания, гадит в логах, выставляет верные статусы и не падает.

Таким образом остаётся признать, что идеальные условия выполнения я подсознательно считаю исключительной невероятной ситуацией. И обрабатываю невнимательно.

PS: слава юнит тестам. вручную такой бред не найти.
mend0za: (Default)
Квест можно считать пройденным.

Побеждён драйвер I2C чипа на его территории. По дурной привычке - производитель таскает драйвер i2c чипа вместе с i2c стеком, дублируя код в mainline. В отличие от tulip - весь стек портировать не пришлось (не смог это сделать), просто адаптировал драйвер под современные реалии kernel mainline i2c стека.


# uname -a
Linux ben-navis 2.6.28.10-pilot2-svn8816 #22 Fri Mar 19 15:45:16 EET 2010 armv5tejl GNU/Linux
# cat /etc/debian_version
5.0.4


Забавный диалог с коллегой:
я - портировал вчера i2c, проверь
он - похоже что не работает
(спустя день)
я - включил поддержку расширенных команд и восстановления шины, проверь
он - похоже что не работает
я - как проверял?
он - (даёт командные строки i2cdetect, i2cdump)
я - а давай я проверю и сравню со старым ядром
(спустя час)
я - работает точно также как на старом 2.6.15
он - ну, значит работает

"Похоже не работает" - обработчик по умолчанию. "А если проверю?" - "Значит похоже работает".
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?
mend0za: (haus)
Вернулся из Минск-2. Второй подход к снаряду дал некоторый прогресс в движении бумаг по казённому дому.

Ещё десять тысяч ведёр и золотой ключик плата у нас в кармане!
mend0za: (Default)
Расскажите, бывают ли API в природе страшнее OpenSSL?

В моём личном топе он пока номер 1.
mend0za: (Default)
Прибыл в аэропорт Минск-2 для таможенного оформления.
Ещё одна удивительная сторона жизни в Беларуси вот вот откроется мне во всём уродливом величии.

Опубликовано с мобильного портала m.livejournal.com
mend0za: (haus)
Сегодня весь день занимался отчётами о командировке, вопросами пайки разъёмов на серверах, растаможки оборудования, отключениями своего локального dhcp-сервера. Всё это весьма отдалённо относится к моим обязанностям на должности "инженегр-программист 1-й категории" (согласно должностной инструкции).

Скажите, бывшие коллеги, мой код действительно настолько плох? И мне выйти вон из профессии ( (C) lioka ), раз меня так травят на работе :) ?

Подозреваю, что направленность моей нынешней деятельности, приведёт к наполнению дневничка постами инфернального спинномозгового ужаса. Вздрогнут даже постоянные читатели [livejournal.com profile] metaclass.
mend0za: (haus)
Итак - имеется любовный четырёхугольник:

  • 1. Исполнитель барской воли - то есть мы
  • 2. Заказчик
  • 3. Автор и изготовитель чипа
  • 4. Автор Linux BSP для чипа

Сначала выясняли есть ли NDA между 1. и 2. Нашли его. Долго выясняли можно ли заключить трёхстороннее NDA между 1-2-3. Заключили, за месяц. Участник процесса 4 категорически отказался заключать трёхсторонку 1-2-4, хотя имеются попарные соглашения 1-2, 2-3, 2-4 и 3-4.

Внимание вопрос, какого хрена я должен смотреть на исходники BSP через плечо представителя N2, получая только бинарники на выходе?

Найдено дебильное решение - обнаружен вендор N5, который на чипе N3 c помощью N4 сделал продукт и, в соответствии с лицензией Linux, - выложил у себя набор исходников. Но в эту бочку мёда вылили ведро дерьма - набор основан на ядре 2.6.15 + Debian 3.1 (три года назад это наверное было остро актуально).

Даже при предварительном просмотре - нам придётся всё собирать древнючим gcc 3.4 (с новым тулчейном - не работает NFSROOT), юзерспейс тоже надо таскать за собой старорежимный. Уже известно что в старом ядре неправильно работает I2C (в отличие от доступного в двоичном виде драйвера для 2.6.28).

Итого - вместо того чтобы спокойно делать данные заказчиком задачи, мы, совместно с его инженером, изыскиваем способы кого убить как найти возможность вообще продолжить работу, пока патентные тролли дрочат на свои бумажки.

Profile

mend0za: (Default)
mend0za

July 2017

S M T W T F S
      1
2 345678
9 101112131415
16171819202122
23242526272829
3031     

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 29th, 2017 11:46 am
Powered by Dreamwidth Studios