Открытий чудных, китайцы нам несут
Apr. 26th, 2019 12:30 pmВообще, за время работы много чего узнал, от чего шевелятся волосы. Все ваши вопли, мол Поттеринг всё сломал и линукс превратил в мастдайку (привет
eddy_em ) ерунда, в сравнении с реальным положением дел. И даже то что мелкомягкие мейнтенерят в ядро, это тоже не так страшно. Титан надвигающегося вселенского ада - это Китай. В частности один из самых распространённых китайских процессоров - Mediatek и прочее такое же гхм... Тысячи их и терабайты и петабайты китайского говнокода, который никто и никогда не перепишет и всё радостно идёт в ядро ведра.
Итак, пару примеров из моей практики. Мы говорим о чудесных открытиях и откровениях, не только по коду.
1. Если устройство не загрузилось, оно не будет заряжаться. Да-да, если вдруг слетела прошивка и работает только загрузчик (даже вторичный), а не ядро - заряжаться не будет. Для зарядки, суко, нужны ДРАЙВЕРА (фейспалм). Пример на фото. Железка (некоторая железка на медиатеке), к ней аппаратная консоль. Я втыкаю просто провод питания от зарядного устройства и на аппаратной консоли (припаяна и висит сзади платка преобразователя на 1,8 в) вижу лог загрузки и сообщения ядра.

Данное открытие я сделал, когда поймал бутлуп на устройстве, да что скрывать, на bv6000s. Аккумулятор не съёмный. Я был молод и глупне видал больших ... и ушёл в пятницу домой, оставив его на зарядке. А в понедельник утром обнаружил полностью разряженный кирпич. Так что, если играетесь с прошивкой телефона, заряжайте его на 100% и в случае неудачи - снимайте аккумулятор. Реанимировать прошивку возможно (если, конечно калибровки не затёрли, но это надо талант иметь), но если устройство полностью сядет - сделать это будет сложнее.
2. Китайский говнокод.
Для меня было адовым откровением, что в сорцах ведра огромное количество тупо бинарных файлов, которые из userspace напрямую работают с железом, минуя системные вызовы ядра. И у меня вообще ощущение, что там libc используют едва-едва, только чтобы хоть запускалось. Это прямо боль и унижение. А самое большое унижение, это сами дрова железа. Вот ковыряю драйвер вайфая, в ядре линукс. И вижу такой, эм... Такое странное место.

На минуточку - это ЯДРО! Святая святых. Какого лешего там дефайны на windows??? Что за лютый треш? И такого ада там куча. Дрова написаны через жопу, даже мимолётно не соблюдая стандарты POSIX. Это АД!!!
Всё, я выплеснул свои впечатления ада, который есть сейчас.
Итак, пару примеров из моей практики. Мы говорим о чудесных открытиях и откровениях, не только по коду.
1. Если устройство не загрузилось, оно не будет заряжаться. Да-да, если вдруг слетела прошивка и работает только загрузчик (даже вторичный), а не ядро - заряжаться не будет. Для зарядки, суко, нужны ДРАЙВЕРА (фейспалм). Пример на фото. Железка (некоторая железка на медиатеке), к ней аппаратная консоль. Я втыкаю просто провод питания от зарядного устройства и на аппаратной консоли (припаяна и висит сзади платка преобразователя на 1,8 в) вижу лог загрузки и сообщения ядра.

Данное открытие я сделал, когда поймал бутлуп на устройстве, да что скрывать, на bv6000s. Аккумулятор не съёмный. Я был молод и глуп
2. Китайский говнокод.
Для меня было адовым откровением, что в сорцах ведра огромное количество тупо бинарных файлов, которые из userspace напрямую работают с железом, минуя системные вызовы ядра. И у меня вообще ощущение, что там libc используют едва-едва, только чтобы хоть запускалось. Это прямо боль и унижение. А самое большое унижение, это сами дрова железа. Вот ковыряю драйвер вайфая, в ядре линукс. И вижу такой, эм... Такое странное место.

На минуточку - это ЯДРО! Святая святых. Какого лешего там дефайны на windows??? Что за лютый треш? И такого ада там куча. Дрова написаны через жопу, даже мимолётно не соблюдая стандарты POSIX. Это АД!!!
Всё, я выплеснул свои впечатления ада, который есть сейчас.
no subject
Date: 2019-04-26 10:05 am (UTC)Ну а ко второму - сэр имеет что-то против мультиплатформенности кода? :)
no subject
Date: 2019-04-26 10:15 am (UTC)Да нет проблем. Пишите кроссплатформенный код, но по стандартам той платформы, на которой он планирует запускаться. А то они пишут для своей платформы, а потом его пихают везде и всюду.
no subject
Date: 2019-04-26 12:08 pm (UTC)я щас одну массовую летающую погремушку потрошу. не знаю какие индийско вьетнамские китайцы ие писали. но
и2ц ногодрыгом
СПИ ногодрыгом
собака в таймере который ШИМ гонит
кругом НАЛ пополам с ассемблерной прямой записью в регистры (нивжись не поверю, что это инлайн так скомпилился)
вызовы функицй из оберток, привет ++
....
no subject
Date: 2019-04-26 12:21 pm (UTC)Увы, херак-херак и в продакшн не только Российский лозунг. На любую новую железку рождается сначала франкенштейн - один и на все платформы. С голой ifdef'ов. И только если повезет, то через некоторое время появится нормальный драйвер (при чем в случае с Linux или силами сообщества, или силами одного-двух спецов от производителя). Но для этого надо несколько миллионов железок продать.
Уж на что популярен I.MX6 - так и то... Media драйвера до сих пор в staging. Video работает не в полном объеме, а про кодеки/декодеки лучше даже не заикаться. А уж про MIPI вообще помолчим. Более менее полно оно работает только с примерно таким же кодом от производителя. И его, конечно же, никто поддерживать желанием не горит.
Стоит ли после этого удивляться кривости работы планшетов? За то иконки плоские и окошки красивые... Такова жизнь.
no subject
Date: 2019-04-26 12:23 pm (UTC)no subject
Date: 2019-04-26 05:01 pm (UTC)Вы будете еще больше удивлены если копнете глубже. Очень много функционала, вполне себе наличествующего в ядре, дублируется в драйвере (при чем не очень прямо). Начиная со связных списков и дальше. В конкретно взятом wlan драйвере может быть зачем-то продублирован (естественно не в полном объеме и крайне криво) функционал cfg80211/mac80211.
no subject
Date: 2019-04-26 07:28 pm (UTC)no subject
Date: 2019-04-27 07:51 pm (UTC)no subject
Date: 2019-04-28 12:31 pm (UTC)no subject
Date: 2019-04-30 01:57 pm (UTC)no subject
Date: 2019-05-08 01:05 am (UTC)да там тьма отсылок
ядро 4.19.23
Вот даже так бывает :)
/* RME says n = 104857600000000, but in the windows MADI driver, I see:
return 104857600000000 / rate; // 100 MHz
return 110100480000000 / rate; // 105 MHz
*/
no subject
Date: 2019-05-08 08:20 am (UTC)