Wdt device driver что это
Более чем полгода я потратил на совместное с аппаратной и программной технической поддержкой IBM расследование по поводу работы сторожевого таймера на серверах IBM/Lenovo в Linux. Начало этой детективной истории было описано в моей статье SLES 12, сторожевой таймер и серверы IBM/Lenovo. Сейчас, похоже, ситуация разъяснилась, и можно дать конструктивные рекомендации счастливым обладателям железа IBM/Lenovo xSeries.
Итак, вначале повторяем краткий ликбез из предыдущей статьи. В составе серверных и промышленных платформ имеется специальная схема – сторожевой таймер. Будучи активированным, он начинает отсчитывать заданное время (например, одну минуту). Если за это время к нему повторно не обратиться, то в конце интервала будет выполнена аппаратная перазагрузка. Если обратиться, то интервал начинает отсчитываться заново. Это нужно для того, чтобы автоматически восстановить работоспособность компьютера в случае зависания операционной системы или предоставляющего какой-то важный сервис программного обеспечения. Такое решение в обязательном порядке применяется в кластерах высокой готовности (HA) и других применениях, требующих постоянной готовности системы. Для компьютеров с архитектурой Intel используется несколько аппаратных интерфейсов сторожевого таймера, в зависимости от производителя системы, из них наиболее распространённым является Intel TCO (iTCO). В Linux драйверы сторожевого таймера реализованы как модули ядра, которые предоставляют программный интерфейс к нему в виде устройства /dev/watchdog.
На этом описание широко известных вещей закончено, дальнейшие факты мало отражены в интернете и не очень хорошо известны даже технической поддержке фирм-производителей оборудования и программного обеспечения.
Повсеместно принято считать, что в оборудовании с чипсетами Intel, в том числе и в Intel-серверах IBM, которые теперь выпускаются фирмой Lenovo, за интерфейс к сторожевому таймеру отвечает аппаратный уровень Intel TCO и поддерживающий его модуль ядра Linux iTCO_wdt. Тут следует отметить, что, при внимательном рассмотрении, архитектура Intel TCO сама по себе оказывается имеющей довольно существенный недостаток, а именно, получается, что процессор контролирует сам себя. Хотя теоретически ничто не должно помешать программе, работающей в режиме SMM, всегда выполнять свою работу, но ведь теоретически и операционная система не должна виснуть, не так ли? Поэтому наличие единой аппаратной точки уязвимости для процессора как исполнителя программ и для его же собственного сторожевого таймера выглядит не очень хорошо, если вы собираетесь строить систему с повышенной надёжностью.
Поначалу я думал, что это регресс в SLES 12 по сравнению со SLES 11, так как в SLES 11 устройство /dev/watchdog было доступно. Однако, благодаря взаимодействию с IBM и SUSE, выяснилось, что всё гораздо хуже. Оказывается, в SLES 11, в отличие от SLES 12, запись в каталоге /dev/watchdog создаёт само ядро при загрузке, а драйвер сторожевого таймера просто цепляется к этой записи. Поэтому в SLES 11 сторожевой таймер iTCO точно так же неработоспособен, как и в SLES 12, но заметить это гораздо сложнее, так как его неработоспособность маскируется наличием нефункционального /dev/watchdog.
Думаю, излишне добавлять, что никакие манипуляции с настройками BIOS, IMM, AMM и прочими замечательными приблудами, которых в xSeries имеется изобилие, никакого влияния на работоспособность Intel TCO не оказывают.
К счастью, после более чем полугода активной работы с технической поддержкой IBM по аппаратному и программному обеспечению, IBMерам удалось обнаружить один древний манускрипт, датированный 2008 годом. Оказывается, у фирмы Intel есть и другая архитектура для работы со сторожевым таймером – IPMI watchdog, которая поддерживается на платформе xSeries.
Суть IPMI (Intelligent Platform Management Interface) совершенно другая, чем у iTCO. В соответствии с архитектурой IPMI, где-то на материнской плате имеется специальный контроллер – по сути, отдельный компьютер – с собственным процессором, программным обеспечением, сетевым интерфейсом и прочими прибамбасами, предназначенный для отслеживания параметров работы основного компьютерного оборудования и имеющий возможность реагировать на их изменение заданным образом. В терминологии описания интерфейса IPMI, этот контроллер называется BMC (Baseboard Management Controller) или просто MC. В терминологии IBM/Lenovo, реализующее его функции устройство называется IMM (Integrated Management Module) или IMM2. BMC может делать много разных вещей, которые описаны в упомянутом манускрипте, но для нас сейчас существенно, что одной из его функций является сторожевой таймер. Понятно, что сторожевой таймер IPMI – это честное, отдельное от процессора Intel устройство, которое, в общем случае, работает независимо, пока не вышла из строя материнская плата в целом.
Само описание работы со сторожевым таймером в манускрипте выполнено в жанре комментария авторов к некой не дошедшей до нас инструкции MIGR-5069505, при этом базируется на материале устаревших версий программного обеспечения и их не всегда актуальных возможностей. Но разобраться, о чём идёт речь, вполне можно, и краткое актуализированное содержание этого тайного знания представлено ниже.
Приятным сюрпризом является то, что поддержка IPMI интегрирована в современные дистрибутивы Linux. Сама эта поддержка состоит из нескольких компонентов, из которых нас будут интересовать три.
Во-первых, это сервис ipmi.service, предоставляющий возможность коммуникации программ с BMC. В SLES 12 этот сервис устанавливается и стартует автоматически. Это можно проверить так:
systemctl status ipmi
и, при, необходимости, далее, как обычно:
systemctl start ipmi
systemctl enable ipmi
Во-вторых, это собственно драйвер сторожевого таймера IPMI, который так и называется: ipmi_watchdog. Он устанавливается автоматически, но автоматически не стартует (видимо, считается, что администратор должен быть уверен в настройках оборудования, прежде чем разрешать его аппаратную перезагрузку по таймауту). Загрузить этот драйвер вручную можно командой:
Включить его автоматическую загрузку при старте системы можно, создав в каталоге /etc/modules-load.d файл ipmi_watchdog.conf, состоящий из одной строчки “ipmi_watchdog”:
echo ipmi_watchdog > /etc/modules-load.d/ipmi_watchdog.conf
В-третьих, это утилита ipmitool, которая устанавливается автоматически и позволяет выполнять различные команды BMC, в том числе, например, проверять статус сторожевого таймера:
ipmitool mc watchdog get
Если у вас в системе имеется BMC, в ответе на указанную команду вы получите что-нибудь вроде:
Watchdog Timer Use: SMS/OS (0x04)
Watchdog Timer Is: Stopped
Watchdog Timer Actions: No action (0x00)
Pre-timeout interval: 0 seconds
Timer Expiration Flags: 0x00
Initial Countdown: 300 sec
Present Countdown: 300 sec
Если у вас запускается, например, кластер высокой готовности, то он сам сконфигурирует правильные параметры работы сторожевого таймера (например, у меня в системе это период 5 секунд и акция Hard reset).
К сожалению, даже правильно установленные служба ipmi и драйвер ipmi_watchdog и наличие файла /dev/watchdog ещё не гарантируют, что всё работает, как надо. В чём же дело? Оказывается, что некоторые версии SLES 12 имеют отвратительную привычку по собственной инициативе загружать драйвер softdog, пытающийся эмулировать работу сторожевого таймера программным путём (занятие абсолютно бессмысленное и вредоносное). А так как при этом softdog загружается до ipmi_watchdog, то последний, не имея возможности создать уже созданный файл /dev/watchdog, по традиции ничего не делает, скромно пробурчав что-то в недра системного журнала. Поэтому наша последняя задача – поискать собаку, дав команду
lsmod | grep dog
и проанализировав её результат. Если мы видим там ipmi_watchdog и не видим softdog, то, скорее всего, всё у нас работает правильно. Если там есть softdog – то его надо как-то изжить из системы, что в некоторых версиях SLES 12 может оказаться не вполне тривиальным делом.
Предполагаю, что работоспособность сторожевого таймера IPMI на оборудовании IBM/Lenovo может быть связана со значением параметра OSWatchdog, устанавливаемого в модуле IMM при помощи веб-интерфейса или утилиты asu (asu64). Этот параметр может принимать значение некоторого количества минут или быть выключенным. У меня он включён в 2.5 минуты (минимальное значение), но на интервал сторожевого таймера, программируемый в BMC, это не влияет.
Итак, резюме. Корректным способом использования сторожевого таймера на платформе IBM/Lenovo могут показаться softdog, Intel TCO или IPMI, но, в действительности, работоспособным является только IPMI. Драйвер сторожевого таймера IPMI устанавливается в SLES автоматически, но требует ручного прописывания загрузки. Драйвер softdog устанавливается автоматически и иногда требует ручного запрещения загрузки. Драйвер Intel TCO устанавливается и загружается автоматически, но абсолютно ни на что не влияет, так как полностью неработоспособен на этой платформе.
Надеюсь, что эта статья поможет кому-нибудь чуть больше разобраться в непростом деле организации систем высокой готовности под Linux.
На форуме принято размещать изображения под спойлером
- ОС: Windows 10 Home Edition для одного языка
- Экран: 14", широкоформатный (16:9) IPS-дисплей с разрешением Full HD 1920×1080 (157 ppi, занимает 81% передней панели), угол обзора 178°, цветовая гамма NTSC 45%, яркость 250 нит, контрастность 800:1, угол открытия экрана 177°;
- Процессор (в зависимости от комплектации):
- Intel Core i7-8550U, 1.8 ГГц (4 ядра с частотой до 4.0 ГГц в режиме Turbo Boost, 8 потоков, кэш L3 8 Мб);
- Intel Core i5-8250U, 1.6 ГГц (4 ядра с частотой до 3.4 ГГц в режиме Turbo Boost, 8 потоков, кэш L3 6 Мб);
- Intel Core i3-8145U, 2.1 ГГц (2 ядра с частотой до 3.9 ГГц в режиме Turbo Boost, 4 потока, кэш L3 4 Мб);
- Intel Core i5-8265U, 1.6 ГГц (4 ядра с частотой до 3.9 ГГц в режиме Turbo Boost, 8 потоков, кэш L3 6 Мб);
- AMD Ryzen 5 2500U, 2.0 ГГц (4 ядра с частотой до 3.6 ГГц, 8 потоков, кэш L3 4 Мб);
- AMD Ryzen 5 3500U, 2.1 ГГц (4 ядра с частотой до 3.7 ГГц, 8 потоков, кэш L3 4 Мб);
- AMD Ryzen 7 3700U, 2.3 ГГц (4 ядра с частотой до 4.0 ГГц, 8 потоков, кэш L3 4 Мб);
- дискретные видеокарты
- NVIDIA GeForce MX150 2 Gb;
- NVIDIA GeForce MX250 2 Gb;
- Intel UHD Graphics 620;
- AMD Vega 8 Mobile;
- AMD Vega 10 Mobile;
Обратите внимание, что в моделях 2020 года вывод видео через интерфейс Type-C не поддерживается
- R5-2500U, 8 Gb RAM, 256 Gb SSD, Vega 8 - 3999¥ - устаревший
- R5-2500U, 8 Gb RAM, 256 Gb SSD PCIe, Vega 8, сенсорная панель - 4599¥ - устаревший
- i5-8250U, 8 Gb RAM, 256 Gb SSD, UHD 620 - 4799¥
- i5-8250U, 8 Gb RAM, 256 Gb SSD, MX150 - 4999¥
- i5-8250U, 8 Gb RAM, 256 Gb SSD PCIe, MX150, сенсорная панель - 5699¥
- i7-8550U, 8 Gb RAM, 256 Gb SSD, MX150 - 5699¥
- i7-8550U, 8 Gb RAM, 512 Gb SSD PCIe, MX150 - 6499¥
- R5-3500U, 8 Gb RAM, 256 Gb SSD, Vega 8 - 3999¥
- R5-3500U, 8 Gb RAM, 512 Gb SSD, Vega 8 - 4299¥
- R7-3700U, 8 Gb RAM, 512 Gb SSD, Vega 10 - 4599¥
- i3-8145U, 8 Gb RAM, 256 Gb SSD, UHD 620 - цена не объявлена
- i5-8265U, 8 Gb RAM, 512 Gb SSD, MX250 - цена не объявлена
*Про SATA и PCIe - все SSD в этом ноутбуке формата M.2, но общаются с платой они через разные шины. SATA чаще до 600 Мб/с на последовательные чтение и запись, PCIe же позволяют получить 2.5 Гб и более в зависимости от конкретной модели. Ноутбук поддерживает и те, и другие, т.е. в можете купить ноутбук с SATA накопителем и поставить в него PCIe, чтобы получить лучшую отзывчивость системы и приложений.
За пределами Китая (в частности, в США) продаётся под именем Huawei Matebook D 14". Ноутбуки идентичны.Приобрёл сие устройство и подумал, что надо бы завести тему, а то Xiaomi расхайпили при том, что этот не хуже Air 13.3" (а местами и вовсе лучше)
- Любая комплектация имеет PCIe SSD, т.е. скорости накопителя измеряются в 2+ Гб/с на чтение и запись (Magicbook 2019 года, однако, тоже)
- Имеет более гладкий и близкий по устройству к макбуку трекпад
- Дисплей прикрыт стеклом и имеет намного более широкий цветовой охват (почти на 50% больше)
- Проходит пресловутый тест на макбук - открывается одной рукой
- Есть более дешёвый вариант с процессором AMD, который по производительности незначительно уступает 8250U без дискретной графики
- Двухканальная оперативная память в любой из версий (у Air по не понятным причинам только один канал - не более 15 Гб/с на чтение и запись)
- Отсутствие троттлинга вследствие более грамотного теплоотвода
- На 46% больше аккумулятор и на столько же больше автономность (57 Вт*ч против 39 Вт*ч)
- Версии с аналогичной связкой процессор-видеокарта стоят дешевле (4999¥ против 5399¥ за 8250U+MX150, например)
- Для любителей особых ощущений есть версии с сенсорной панелью
Dramcryx,
Каковы личные впечатления?Яркость экрана при разном освещении, маркость, греется ли?
Что нравится, а что не очень?
Hoppe007, общие впечатления - лучше за эти деньги я не нашел бы.
Что касается яркости, то 250 нит при ярком солнце конечно будет не хватать. Нет, вы будете видеть картинку, но тусклую. В вузе днём как-то я в этом убедился.
Корпус сам по себе не маркий, но маркая пластиковая часть, в которую обрамлен дисплей. Очистить ее можно, но лучше не пачкать.
Касательно нагрева, я не видел температур процессора выше 73 градусов при максимальной нагрузке. Вообще, управление настроена на поддержание высокой частоты как можно дольше. То есть, звук системы охлаждения станет заметен уже при 63 градусах (процессор, разумеется чем-то нагружен, в простое 45 градусов), но частота будет 3.3-3.4 ГГц.Что понравилось:
1) внешний вид. Выглядит совсем не дёшево, понятное дело, что на МакБук очень похож, но и материалы не худшие (корпус, конечно, штампованный, а не фрезированный).
2) звук. На максимальной громкости динамики начинают проглатывать некоторые частоты, но это скорее вина драйвера, который старается сделать их ещё громче, на 80% громкости звук прекрасный и все ещё очень громкий.
3) дисплей. Он не претендует на звание даже хорошей IPS матрицы с такими-то показателями цветопередачи, но он неплох и приятен, получше некоторых флагманов смартфонов прошлых лет с IPS.
4) клавиатура. Очень и очень похожа по ощущениям на макбуковскую до бабочки. Писать на ней очень приятно.
5) автономность. Естественно, заявленные 12-13 часов достигаются только при удобных производителю условиях. Средняя нагрузка (каким бы обширным это понятие не было), съест АКБ за 6-7 часов. Мне с головой хватает, но это уже зависит от вас.Опять же, я на российском рынке просто лучше бы не нашел, поэтому считайте, что мне не к чему придираться.
Dramcryx,
Отлично!Как отпечаток пальцев показывает себя? Случаются ли промохи? Если да, то какой процент?
Требуется ли перестановка винды для смены языка на английский?
Hoppe007, у меня версия с AMD, для "экономных" дактилоскоп не завезли :-( . А китайские обзоры мало про сканер в версиях Intel рассказывают.
По поводу винды. С завода одноязычная, разумеется. Если не хотите покупать ключ на ebay (обязательно не fresh install), то придется переустанавливать, иначе можно ключом сделать апгрейд и поставить языковой пакет, что я и сделал, не пожалев 381 рубль :-)Блин, крутой бук. Думаю прикупить версию с AMD. Жалко денег на лишнюю видеокарту.
Нашел только на geekbuying.
На али его просто нет, gb не отправляет в РФ.
Dramcryx, что скажешь по этому поводу? Сам где его брал?
А не делал замеры скорости диска? Что там вообще стоит?Как думаете Linux встанет?
GRomR1, стоит SanDisk X600, как я и говорил, SATA, замеры не делал (теоретически должно быть 550/500 на последовательное чтение/запись).
Я покупал через посредника china-towns. Я их не могу порекомендовать из-за невысокой надёжности их рабочих методов, но со мной все отлично прошло.
Завтра, скорее всего, подберу варианты покупки его и сделаю пост. Подписывайтесь на тему, давайте развивать конкуренцию Xiaomi. ;)Завтра, скорее всего, подберу варианты покупки его и сделаю пост. Подписывайтесь на тему, давайте развивать конкуренцию Xiaomi.
Персональный компьютер или сервер имеют встроенный таймер операций – он называется WatchDog Timer или WDT (в русской компьютерной терминологии – контрольный таймер материнской платы). Необходим он потому как такая сложная техника, как компьютер имеет свойство сбоить и выходить из строя. Именно поэтому в неё зачастую встраивают различные независимые опции контроля и коррекции, в частности таймер операций, который ограничивают время, затрачиваемое системой ввода-вывода на одно действие(шаг).
В большинстве случаев контрольный таймер доступен прямо в BIOS-е. Впрочем, некоторые производители материнских плат страдают недоверием к пользователям и оснащают свои платы только самыми безопасными и «пользовательскими» функциями. Если вам так не повезло – увы, доступ к настройкам WDT вам закрыт. К счастью, таких производителей немного.
Как работает контрольный таймер
WDT запускается вместе со стартом системы и тут же начинает отслеживание её действий. Впрочем, некоторые модели плат имеют технологическую особенность: первый шаг WDT в них является холостым, а значит, по-настоящему работу таймер начнет только по прохождении 0,6 секунды. Стандартное значение WDT– 4h, что означает 4 шага. Если программа не успевает выполнить операцию за четыре шага (1,8 – 2,4 секунды) система принудительно останавливает её и производит корректировку программы. Ну или перезагружает/выключает компьютер, если эта программа системная. При этом вы получите BSoD (Blue Screenof Death) с описанием произошедшей ошибки, например DPC_WATCHDOG_VIOLATION.
Максимальное значение WDT– 3Fh, то есть 62 шага или 37,5 секунд, но устанавливать его не стоит: в случае какого-либо сбоя вы потеряете доступ к ПК не на жалкие две секунды, а почти на полминуты. К тому же любой современный ПК способен выполнить стандартную операцию меньше чем за секунду, а значит, даже двухсекундная задержка уже сбой.
Стоит ли включать эту опцию?
Да, определенно. WDT крайне необходим при работе с нестабильными или зараженными системами, так как он помогает находить и устранять программные и аппаратные ошибки, мешающие нормальной работе вашего ПК. Но вот если вы работаете с очень устаревшим оборудованием (или же невероятно сложными и/или плохо написанными программами), то значение WDT в BIOS стоит сделать побольше или же вообще выключить, если другие варианты не работают. Только помните, что в этом случае ваш компьютер может начать чаще зависать и тратить процессорное время на выполнение некорректно совершенных запросов.
Лето благополучно закончилось, а значит приходит время покидать насиженные места, родные дачные кооперативы и стаями отправляться в город. Все бы хорошо, но как-то боязно оставлять на целых полгода хозяйство без присмотра. Задался и я подобным вопросом. В итоге решил оборудовать участок нехитрым комплектом из веб-камеры и доступа в интернет (скорее всего 3G). Начал, как водится, с малого — с поиска подходящей по бюджету камеры. Бюджет мой составлял примерно около 20$.
Что-то нормальное в эту сумму попасть не могло, в принципе, поэтому оставались варианты вроде «DIR-320+openwrt+UVC камера из ноутбука» запаянные в герметичный полиэтиленовый пакет и подвешенные на дерево. Но как-то вечером я просматривая объявления местной барахолки натолкнулся на продажу IP-камеры D-link DCS-5220A1, да еще и функцией PTZ за какие-то смешные 10$. Для тех, кто не в курсе, приведу выдержку из википедииPan-tilt-zoom-камера (PTZ-камера) — камера, которая поддерживает удалённое управление направлением и зумом. PTZ — это аббревиатура от панорамирования, наклона и зума (pan, tilt, zoom), которая описывает возможности управления камерой.
Да, насторожился. Но жаба пересилила, а ей вторила самоуверенность («да неужели не разберемся?!»). Камера оказалась старой, но с отличным светочувствительным сенсором (как-раз то что нужно, чтобы наблюдать ситуацию вечером). Решено и камера у меня на столе.
- Максимум разрешения — это 640х480. Камера, как видно адская (сразу думал что вообще подключена по lvds, уж очень похож разъем.
- Сложности с первичным подключением. Камера подключается к компу _только через хаб_ или кабелем кроссовером. И неизвестно какой IP адрес.
Фотографии с авторскими пометками, это дает о себе знать прошлое в мастерской по ремонту сотовых. Все время делаешь себе cолюшены на случай прихода аналогичной модели :). Вдоволь посмотрев на плату, я собрал все обратно и решил посмотреть как камера будет работать с родным ПО (благо с сервера d-link удалось скачать какие-то огромные пакеты).
Несмотря на внимательно изучение сначала русского, потом и английского мануала, мне так и не стало ясно, как обнаружить камеру. Пришлось искать на антресолях старый хаб, подключать к нему камеру, устанавливать wireshark и слушать ethernet. Прослушивание дало ip-адрес «192.168.0.99». Забив его в ручные настройки программы d-link Network Camera Installation, камера подхватилась. Для работы с подобными камера предназначена другая утилита от d-link D-ViewCam. В ней также пришлось вводить адрес вручную, камера обнаружилась и я даже смог проверить работу PTZ. Камера действительно неплохо управляется и ездит вправо-влево/вверх-вниз с разрешением «один зубчик передаточной шестеренки» :). Правда постоянно щелкать мышкой немного утомляет.
После окончания работы с камерой, настоятельно рекомендую выключить телнет, делается это аналогичным образом, через запрос~ $ ps ax
PID Uid VmSize Stat Command
1 root 344 S init
2 root SW [keventd]
3 root SWN [ksoftirqd_CPU0]
4 root SW [kswapd]
5 root SW [bdflush]
6 root SW [kupdated]
7 root SW [mtdblockd]
30 root SWN [jffs2_gcd_mtd1]
80 root 260 S /sbin/watchdog 60 5
89 root 200 S /usr/sbin/hresetd /dev/gpio4
179 root 320 S /sbin/syslogd -m 0 -o 64000
196 root 336 S /usr/sbin/drmd
198 root 336 S /usr/sbin/drmd
199 root 336 S /usr/sbin/drmd
233 root 312 S /usr/sbin/inetd /etc/inetd.conf
254 root 316 S /usr/sbin/urecorder
265 root 320 S /usr/sbin/smbrecorder
288 root 260 S /usr/sbin/swatchdog -t 60 -p /var/run/swatchdog.farseer.pid -a /usr/bin/soft-reboot-bg
293 root 2716 S /usr/sbin/farseer.out -d -c /tmp/farseer.fifo
294 root 2716 S /usr/sbin/farseer.out -d -c /tmp/farseer.fifo
296 root 2716 S /usr/sbin/farseer.out -d -c /tmp/farseer.fifo
297 root 2716 S /usr/sbin/farseer.out -d -c /tmp/farseer.fifo
298 root 2716 S /usr/sbin/farseer.out -d -c /tmp/farseer.fifo
299 root 2716 S /usr/sbin/farseer.out -d -c /tmp/farseer.fifo
300 root 2716 S /usr/sbin/farseer.out -d -c /tmp/farseer.fifo
321 root 2716 S /usr/sbin/farseer.out -d -c /tmp/farseer.fifo
322 root 2716 S /usr/sbin/farseer.out -d -c /tmp/farseer.fifo
323 root 2716 S /usr/sbin/farseer.out -d -c /tmp/farseer.fifo
329 root 2716 S /usr/sbin/farseer.out -d -c /tmp/farseer.fifo
330 root 2716 S /usr/sbin/farseer.out -d -c /tmp/farseer.fifo
337 root 2716 S /usr/sbin/farseer.out -d -c /tmp/farseer.fifo
338 root 2716 S /usr/sbin/farseer.out -d -c /tmp/farseer.fifo
354 root 372 S /usr/sbin/crond -l 0
435 root 188 S /usr/sbin/ledctrl /dev/cfc2 1000000
454 root 836 S /bin/sh /usr/bin/detectnet
458 root 364 S /sbin/getty -L ttyS0 38400 vt100
21042 root 372 S telnetd
21045 admin 440 S -sh
21207 root Z [sh]
21208 root 268 S sleep 2
21212 admin 364 R ps ax~ $ ls /dev/
cfc0 dsp0 gpio2 gpio_i2c hda13 hda4 i2c mtd0 ptmx ptyp4 ram2 stdin tty1 tty7 ttyp1 ttyp7 watchdog
cfc1 dsp1 gpio3 hda hda14 hda5 i2c_slave mtd1 pts ptyp5 ram3 stdout tty2 ttyAM0 ttyp2 urandom wdt
cfc2 fd gpio4 hda1 hda15 hda6 i2s mtdblock1 ptyp0 ptyp6 ramdisk tracer tty3 ttyAM1 ttyp3 vma_ae zero
cmmap gpio gpio5 hda10 hda16 hda7 log mtr1 ptyp1 ptyp7 random tracerU tty4 ttyS0 ttyp4 vma_be
console gpio0 gpio6 hda11 hda2 hda8 mem null ptyp2 ram0 rtc tty tty5 ttyS1 ttyp5 vma_me
dsp gpio1 gpio7 hda12 hda3 hda9 mmap ppp ptyp3 ram1 stderr tty0 tty6 ttyp0 ttyp6 vma_vpe~ $ lsmod
Module Size Used by Tainted: P
8139too 12460 1
mii 2344 0 [8139too]
cfc 1264 1
hwinfo 2200 0 (unused)
vaudio 4112 1
motor 5424 1
mmap 1136 1
cmmap 1128 1
vma_ae 2792 0 (unused)
vma_be 2856 2
vma_me 2616 4
vma_vpe 4040 1
i2c_slave 3304 0 (unused)
gpio 2552 8
rtc 2908 0 (unused)
gpio_i2c 2584 1 [rtc]
wdt 992 1~ $ cat /proc/cpuinfo
Processor : FA526id(wb) rev 1 (v4l)
BogoMIPS : 136.80
Features : swp half thumb
Hardware : Vivotek VVTK1000
Revision : 0000
Serial : 0000000000000000На заметку/напоминание всем кто решится повторять подобные эксперименты — к выходу UART подключайтесь через преобразователь уровней (у меня это был FTDI232).
Внимательно проанализировав консольные логи загрузки, стало примерно ясно, что ядро напрямую распаковывается в оперативную память. Теоретически, на сайте можно найти GPL прошивки если не для всех, то по крайней мере, для многих продуктов d-link. Но именно для моей модели cкачать последнюю прошивку не удалось. Ладно, взял первую попавшуюся (файл *.pkg) и скормил ее binwalk.
$binwalk DCS-5220_A2_v1.05.pkg
DECIMAL HEXADECIMAL DESCRIPTION
__________________________________________
54_0x36_uImage header, OS Kernel Image, compression type: none, image name: "linux-2.4.26"
11770 _0x2DFA _gzip compressed data, maximum compression,
897238_0xDB0D6_gzip compressed data, maximum compression, file name: "initrd.img"
2935070_0x2CC91E_gzip compressed dataПеред тем, как заниматься дальнейшими изысканиями, по диагонали посмотрел есть ли какие-то упоминания о разборке и/или пересборке прошивок для таких камер. Натолкнулся на ресурс Firmware unpackers for IP cameras, где собраны скрипты для распаковки прошивок IP-камер D-Link и аналогичных им по железной начинке камер Trendnet. К сожалению, моей модели там в наличии не было. На всякий случай попробовал написать автору. К моему удивлению, последний ответил, и подтвердил информацию выданную binwalk — внутри прошивки простые архивы. Запуск binwalk с ключом -e дал следующую картину:
Простенькие TAR архивы легко извлекаются командой tar -xvf. Содержимое там следующее:
www/
www/ret.html
www/logout.html
www/common.js
www/navbar/
www/navbar/statusnav.html
www/navbar/helpnav.html
www/navbar/setupnav.html
www/navbar/helpnav.js
www/navbar/topnav.html
www/navbar/maintainnav.html
www/navbar/homenav.html
www/client.html
www/help/
www/help/htool.html
www/help/menu.html
www/help/hadv.html
www/help/hhome.html
www/help/hstatus.html
www/plugindef.js
www/clientset.js
www/indexreal.html
www/RtspVaPgDec.cab
www/dlink.css
www/realqt.mov
www/index.html
www/camctrl.js
www/setup/
www/setup/accesslist.html
www/setup/devinfo.html
www/setup/config_index.html
www/setup/audiovideo.html
www/setup/wireless.html
www/setup/definepatrolname.js
www/setup/videoclip.html
www/setup/network.html
www/setup/edituser.html
www/setup/application.html
www/setup/accesslist.js
www/setup/firmwareupdate.html
www/setup/time_date.js
www/setup/wireless.js
www/setup/maintain.html
www/setup/netstat.js
www/setup/config.html
www/setup/recording.html
www/setup/ddns.js
www/setup/ddns.html
www/setup/network.js
www/setup/snapshot1.html
www/setup/security.html
www/setup/security.js
www/setup/audiovideo.js
www/setup/time_date.html
www/setup/wizard/
www/setup/wizard/wizardutil.js
www/setup/wizard/network.html
www/setup/wizard/wiznetwork.js
www/setup/wizard/wizard.html
www/setup/wizard/motion.html
www/setup/wizard/wizmotion.js
www/setup/patrolname.js
www/setup/image.html
www/setup/mailftp.html
www/setup/motion.html
www/setup/camctrl.html
www/setup/syslog.html
www/snapshot.html
www/webinfo.html
www/home.html
www/pic/
www/pic/ctrlhome.jpg
www/pic/helpzoom.jpg
www/pic/helppause.jpg
www/pic/helpstop.jpg
www/pic/ctrldown.jpg
www/pic/autopan.jpg
www/pic/ctrlup_g.jpg
www/pic/wlan_masthead.jpg
www/pic/ctrlleft.jpg
www/pic/sideright1.jpg
www/pic/ctrldown_g.jpg
www/pic/ctrlright_g.jpg
www/pic/helpvolume.jpg
www/pic/ctrlhome_g.jpg
www/pic/stop.jpg
www/pic/ctrlleft_g.jpg
www/pic/sideleft1.jpg
www/pic/ctrlright.jpg
www/pic/autopatrol.jpg
www/pic/helpmute.jpg
www/pic/sideleft2.jpg
www/pic/sideright2.jpg
www/pic/short_modnum.jpg
www/pic/ctrlup.jpg
www/pic/wireless_bottom.jpgsetup/
setup/writewebpage
setup/writebootimage
setup/install
setup/writebootenv
setup/.svn/
setup/.svn/props/
setup/.svn/format
setup/.svn/prop-base/
setup/.svn/prop-base/writel1l2.svn-base
setup/.svn/prop-base/writewebpage.svn-base
setup/.svn/prop-base/writebootenv.svn-base
setup/.svn/prop-base/install.svn-base
setup/.svn/prop-base/writebootimage.svn-base
setup/.svn/all-wcprops
setup/.svn/entries
setup/.svn/text-base/
setup/.svn/text-base/writel1l2.svn-base
setup/.svn/text-base/writewebpage.svn-base
setup/.svn/text-base/writebootenv.svn-base
setup/.svn/text-base/install.svn-base
setup/.svn/text-base/writebootimage.svn-base
setup/.svn/tmp/
setup/.svn/tmp/props/
setup/.svn/tmp/prop-base/
setup/.svn/tmp/text-base/
setup/writel1l2
Так как внутри — ничего интересного не обнаружилось, было решено лезть внутрь initrd.img . Для анализа достаточно просто смонтировать образ командой:Попутно я установил, что прошивки для камеры 5220 ревизии A1 и ревизии A2 идентичны и полностью взаимозаменяемы. А вот прошивки от ревизии B к камерам с аппаратным обеспечением ревизии А категорически не подходят.
В общем, теоретически подогнать прошивку под свои нужды не составляет труда. Так же, как и добавить необходимый драйвер (при замене miniPCI карты например). Прошить камеру можно через стандартный интерфейс программы D-ViewCam или Installation Wizard (о которых я говорил в самом начале).
Но есть и другой вариант. Закинуть готовую прошивку (заранее переименованную во flash.pkg) на внутренний фтп камеры (сервер фтп должен стартовать с телнет-сервером, но в целях безопасности телнет по-умолчанию отключен и требует принудительного запуска спец. запросом). Возможно ничего из этого не выйдет — не хватило времени проверить. Все, что есть — это лог процесса прошивки из стандартного приложения, снятый с помощью wireshark:
35 438.799789 192.168.0.99 192.168.0.56 FTP 114 Response: 220 Network-Camera FTP server (GNU inetutils 1.4.2) ready.
337 438.800105 192.168.0.56 192.168.0.99 FTP 66 Request: USER admin
339 438.803092 192.168.0.99 192.168.0.56 FTP 88 Response: 331 Password required for admin.
341 438.803503 192.168.0.56 192.168.0.99 FTP 61 Request: PASS
342 438.805896 192.168.0.99 192.168.0.56 FTP 81 Response: 230 User admin logged in.
344 438.806687 192.168.0.56 192.168.0.99 FTP 62 Request: TYPE I
345 438.818062 192.168.0.99 192.168.0.56 FTP 74 Response: 200 Type set to I.
347 438.818488 192.168.0.56 192.168.0.99 FTP 60 Request: PASV
348 438.820099 192.168.0.99 192.168.0.56 FTP 100 Response: 227 Entering Passive Mode (192,168,0,99,4,1)
353 438.821111 192.168.0.56 192.168.0.99 FTP 70 Request: STOR flash.pkg
354 438.838508 192.168.0.99 192.168.0.56 FTP 112 Response: 150 Opening BINARY mode data connection for 'flash.pkg'.
356 438.839333 192.168.0.99 192.168.0.56 FTP 81 Response: 214-firmware upgrade begin
358 438.843916 192.168.0.56 192.168.0.99 FTP-DATA 5894 [TCP Window Full] FTP Data: 5840 bytes (PASV) (STOR flash.pkg)
360 438.845280 192.168.0.56 192.168.0.99 FTP-DATA 2406 FTP Data: 2352 bytes (PASV) (STOR flash.pkg)
381 439.300480 192.168.0.99 192.168.0.56 FTP 123 Response: It will takes about 3-5 minutes.
385 439.426777 192.168.0.99 192.168.0.56 FTP 128 Response: Do not turn off the power or remove the network cable during upgrade!
391 439.926748 192.168.0.99 192.168.0.56 FTP 123 Response: System will restart automatically when upgrade is finished.
395 440.399163 192.168.0.99 192.168.0.56 FTP 123 Response: Please wait.
1763 460.987774 192.168.0.56 192.168.0.99 FTP-DATA 4671 FTP Data: 4617 bytes (PASV) (STOR flash.pkg)
1775 478.867766 192.168.0.99 192.168.0.56 FTP 69 Response: Processing
На этом все, написать решил по причине полного отсутствия какой-либо информации по данной разновидности камер и чтобы статья служила напоминанием о том, что надо бы до конца разобраться с прошивкой. Буду рад, если кто-то подтвердит или опровергнет мои домыслы.
Важно! Все обновления и промежуточные заметки из которых потом плавно формируются хабра-статьи теперь можно увидеть в моем телеграм-канале lab66. Подписывайтесь, чтобы не ожидать очередную статью, а сразу быть в курсе всех изысканий :)
Как уважаемый хабрапользователь наверняка знает, «драйвер устройства» — это компьютерная программа управляющая строго определенным типом устройства, подключенным к или входящим в состав любого настольного или переносного компьютера.
Основная задача любого драйвера – это предоставление софтового интерфейса для управления устройством, с помощью которого операционная система и другие компьютерные программы получают доступ к функциям данного устройства, «не зная» как конкретно оно используется и работает.
Обычно драйвер общается с устройством через шину или коммуникационную подсистему, к которой подключено непосредственное устройство. Когда программа вызывает процедуру (очередность операций) драйвера – он направляет команды на само устройство. Как только устройство выполнило процедуру («рутину»), данные посылаются обратно в драйвер и уже оттуда в ОС.
Любой драйвер является зависимым от самого устройства и специфичен для каждой операционной системы. Обычно драйверы предоставляют схему прерывания для обработки асинхронных процедур в интерфейсе, зависимом от времени ее исполнения.Любая операционная система обладает «картой устройств» (которую мы видим в диспетчере устройств), для каждого из которых необходим специфический драйвер. Исключения составляют лишь центральный процессор и оперативная память, которой управляет непосредственно ОС. Для всего остального нужен драйвер, который переводит команды операционной системы в последовательность прерываний – пресловутый «двоичный код».
Как работает драйвер и для чего он нужен?
Основное назначение драйвера – это упрощение процесса программирования работы с устройством.
Он служит «переводчиком» между хардовым (железным) интерфейсом и приложениями или операционными системами, которые их используют. Разработчики могут писать, с помощью драйверов, высокоуровневые приложения и программы не вдаваясь в подробности низкоуровневого функционала каждого из необходимых устройств в отдельности.
Как уже упоминалось, драйвер специфичен для каждого устройства. Он «понимает» все операции, которые устройство может выполнять, а также протокол, с помощью которого происходит взаимодействие между софтовой и железной частью. И, естественно, управляется операционной системой, в которой выполняет конкретной приложение либо отдельная функция самой ОС («печать с помощью принтера»).
Если вы хотите отформатировать жесткий диск, то, упрощенно, этот процесс выглядит следующим образом и имеет определенную последовательность: (1) сначала ОС отправляет команду в драйвер устройства используя команду, которую понимает и драйвер, и операционная система. (2) После этого драйвер конкретного устройства переводит команду в формат, который понимает уже только устройство. (3) Жесткий диск форматирует себя, возвращает результат драйверу, который уже впоследствии переводит эту команду на «язык» операционной системы и выдает результат её пользователю (4).
Как создается драйвер устройства
Для каждого устройства существует свой строгий порядок выполнения команд, называемой «инструкцией». Не зная инструкцию к устройству, невозможно написать для него драйвер, так как низкоуровневые машинные команды являются двоичным кодом (прерываниями) которые на выходе отправляют в драйвер результат, полученный в ходе выполнения этой самой инструкции.
При создании драйвера для Линукса, вам необходимо знать не только тип шины и ее адрес, но и схематику самого устройства, а также весь набор электрических прерываний, в ходе исполнения которых устройство отдает результат драйверу.
Написание любого драйвера начинается с его «скелета» — то есть самых основных команд вроде «включения/выключения» и заканчивая специфическими для данного устройства параметрами.
И чем драйвер не является
Часто драйвер устройства сравнивается с другими программами, выполняющими роль «посредника» между софтом и/или железом. Для того, чтобы расставить точки над «i», уточняем:
- Драйвер не является интерпретатором, так как не исполняется напрямую в софтовом слое приложения или операционной системы.
- Драйвер не является компилятором, так как не переводит команды из одного софтового слоя в другой, такой же.
Ну и на правах рекламы – вы всегда знаете, где скачать новейшие драйвера для любых устройств под ОС Windows.
Читайте также:
- NVIDIA GeForce MX150 2 Gb;
- Intel Core i7-8550U, 1.8 ГГц (4 ядра с частотой до 4.0 ГГц в режиме Turbo Boost, 8 потоков, кэш L3 8 Мб);