Слухайте історію

Jul 02, 2015 21:52

Значить, є у мене прокт карвош. Там автоматизація помивки машин, як виходить із назви. Проект старий, почався ще десь у 2007-му, або навіть раніше. Рулить там всім „тіпа промисловий комп“ - ebox-2300sx. Ну він, звісно, ніфіга не промисловий, зате маленький, крутенький і x86.

Так от, на фулл-таймі я ним займався до осені 2009-го року, коли я пішов працювати в ГТС. Я прекрасно пам’ятаю цей момент: вечір, всі навколо свіяткують день народження, пьють пиво, а мені треба зібрати драйвер мережі на цю фіговину, і завтра вже на роботу в ГТС. А там проблема в тому шо комп цей - привіт із 90-х. FPU немає, IDE не стандартний, мережева карта нестандартна і все таке. Сам виробник пропонує на вибір вланий Linux, власне ядро у вигляді бінарника або патчі на 2.6.18 (дякувати богові не на 2.4). Так от, тоді я все зібрав і все запустив на ядрі 2.6.21.1 і в такому вигляді воно проіснувало аж до сьогоднішнього дня.

І була у нас одна проблема - з годинником. Не зважаючи на синхронізацію, він постійно кудись тікав. Іноді на години, іноді на дні. Один раз я бачив на рік. В принципі, воно парило не сильно, але якщо у проміжок між стартом і синхронізацією встигала потрапити якась статистика - в базу летіли дублікати і все було погано. А якшо інтернету довго не було, то все було ще гірше. Коли компів стало багато, більше 300 штук, проблема стала парити і на неї почали звертати увагу. Спочатку грішили на батарейки для BIOS, потім ще на шо, але нічого ен підходило. І от, приблизно пів року тому, я задумався: „А воно хоч в RTC пише все що синхронізує?“. І глянув. І побачив, що

# hwclock -w
hwclock: can't open '/dev/misc/rtc': No such file or directory

Біда-біда. Але невелика. Там статичний /dev, тож я просто

mknod /dev/misc/rtc c 254 0

І знову дивлюся. І тепер воно же не те пише:

# hwclock -w
hwclock: can't open '/dev/misc/rtc': No such device or address

Біда-біда. Драйверу RTC немає. Проблема зрозуміла, треба вирішувати. Але я там не на фулл-тайм працюю, і задач там різних ще багацько, тож я просто запам’тав шо треба взяти ядро і зібрати для нього модуль RTC. От тільки конфігів на нього немає :)

І от, минулої п’ятниці я думаю: „О, кльово, 3 вихідних! Можна попрацювати! Значить так, у суботу займаюсь карвошем, у неділю відпочиваю а в понеділок чимось ще.“. Прийшла субота, взяв я, значить, 2.6.21 (не 2.6.21.1) і почав збирати. Тут фішка в тому що ядро має прийняти модуль як свій рідний, а оригінального конфігу немає. Перевірка йде по архітектурі, наявності SMP, точній версії ядра і target CPU. Оскільки у мене версія трошки інша - я просто додав „.1“ в Makefile. Ну в кінці кінців зібрав той модуль, і ядро навіть його завантажило, але ніфіга RTC в ситемі не з’явився. І всю суботу я бодався з тим модулем і дійшов висновку що RTC без PNP не працює. А ядро зібрано без PNP. Можна, звісно, замінити ядро цілком, але для цього треба перезавантажувати комп, а він там працює і обслуговує всяку гідравліку. Неприємно, клієнти не зрозуміють. Але що ж робити. О 2:30 я плюнув і вирішив продовжити наступного... еее... після сну :)

У неділю, зрозумівши що треба міняти ядро цілком, вирішив поставити щось більш свіже. Тут треба згадати що я уже пробував зібрати ядра 3-ї гілки, і не виходило, бо у мене застарілі linux headers. Тому я взяв 2.6.32.67 - longterm із гілки 2.6. Проблема ще була у тому що я не міг використовувати menuconfig - він сегфолтав. Тому тільки олдскул, тільки хардкор - make oldconfig і ручне редагування .config. І тут я уже прохавав фішку, точніше поцупиів із хабрастатті: можна взяти готовий конфіг із фірмового XLinux, натравити на нього oldconfig і все має злетіти. Але не виходила кам’яна квітка. Драйвер IDE сипав помилками DMA і все зависло ще на етапі завантаження. Самі виробники пишуть, що їх чіпсет уміє UltraDMA, але уміє погано. Тому стандартний драйвер не працює, і треба примусово перемикати його у режим MDMA, на що у них є патчений драйвер на 2.6.18. От тільки змін між 18 і 32 стільки що патч взагалі ну ні в які ворота. Я пробував розбирати той патч і код драйвера в 2.6.32, і шось там корячити, але нічого не виходило. Ще виробники пишуть що воно вміє працювати на Generic IDE, але і так теж не працювало. Чувак із хабрастатті пише що йому вдалося запустити на 2.6.37, але і на цьому ядрі у мене теж нічого не злетіло. Так я промустився знову до 2:30 і пішов спати.

У понеділок - бекап-план. Берем 2.6.21, і збираємо його з нуля. Але проблема в тому що у 2.6.21 немає драйверу мережевої карти, але є патч на 2.6.18 який його додає. І патч ліг майже без проблем - був тільки один реджект який я поправив ручками. А ще патч править драйвер IDE... Зібрав, включаю - не працює! При цьому на over 300 компах працює! Мучився-мучився, поки не додумався вирубити нативний драйвер і запустити на Generic IDE. Допоміг аналіз бутлогів з робочих екземплярів, в вдумливе блукання по /sys. І на Generic IDE воно злетіло! При цьому на 2.6.32.67 не злітало! Такі справи.

Але це тільки половина справи, треба ще ввімкнути RTC. Вмикаю, запускаю, і знаєте шо воно мені каже?

rtc_cmos: probe of 00:05 failed with error -16

Тут треба подякувати чувакам з гентушного форуму, які уже з цією проблемою стикались. Драйверів RTC є ажно два: старий і новий. І треба використовувати новий. Ну шо, на новому все завелось. Зібрав ядро монолітом, щоб зручніше оновлювати, але з підтримкою модулів, шоб якшо шо. Кілька разів прогнав сценарій оновлення і скинув все це добро, разом із сценарієм адміну. І домовився з замовником про тести. Домовились на сьогодні.

А тепер тим хто дочитав до сюди - ржака:

[20:24:59] 4-й пост
[20:25:14] Заряжай
[20:25:17] Там щас пусто
[20:25:21] Можно ребутать
[20:26:04] да какое ребутать, я еще даже впн не запустил :)
[20:26:20] Ну ты даешь
[20:26:29] 10 минут прошло!
[20:26:52] Да, расслабился :)
[20:30:13] 13 минут назад там мылись холодной водой =)
[20:30:19] Так что все норм =)
[20:30:28] Там азкрыто
[20:32:26] Скажешь какая там дельта была с RTC
[20:32:49] он уже в ребуте
[20:33:11] Главное чтобы вернулся :)
[20:33:36] пинга нет )
[20:33:40] Плохо :)
[20:34:50] ну все работает вроде
[20:34:53] Фух
[20:35:05] Ща я наберу Андрея чтобы там попрыскали чем-то
[20:35:17] ~ # hwclock -w
hwclock: can't open '/dev/misc/rtc': No such file or directory
[20:35:58] Найс
[20:36:01] Где девайс? :)
[20:36:06] Его нет :)
[20:36:10] Там c 254 0
[20:36:34] Ты после всех изменений в r/o перемонтировал?
[20:36:59] да
[20:37:03] Странно
[20:37:03] тупо копировал команды
[20:37:13] Ну создай руками
[20:37:18] # Huawei E161 activation - а это зачем?)
[20:37:21] Надо ж проверить ради чего все это затевалось
[20:37:34] Это для укртелекомовского модема :)
[20:37:52] Если ядро ок - почищу в прошивке
[20:38:42] Наверное после всех этих команд имеет смысл делать sync
[20:38:59] дважды :D
[20:39:05] ^)
[20:39:10] Ну че там девайс?
[20:40:29] ~ # hwclock -w
hwclock: can't open '/dev/misc/rtc': No such device or address
[20:40:36] Ядро какое?
[20:40:59] Linux TinyGentoo 2.6.21.1 #5 Sun Oct 25 15:29:44 UTC 2009 i486 unknown
[20:41:03] Не обновилось
[20:41:12] ну твои команды не рулят :D
[20:41:18] Мои команды рулят
[20:41:24] Кто-то просто не умеет ими пользоваться :)
[20:41:46] бля
[20:41:48] не тот пост
[20:41:53] Ахаха
[20:41:55] ОЛОЛО
[20:42:02] „Я не тот двигатель вырубил“
[20:42:33] я ж на другой заходил, чтобы локально ловить 4 пост в сети
[20:42:44] Отмазки не канают!
[20:43:01] ~ # uname -a
Linux TinyGentoo 2.6.21 #15 Tue Jun 30 18:23:39 UTC 2015 i486 unknown

gentoo, робота, fun, carwash, linux

Previous post Next post
Up