Контроллер дистанционного управления для ПК-сервера с текстовой консолью, без паяльника и Arduino

от автора

Аннотация

Хотя один из героев второго плана — ИК-порт на материнской плате, не стану я рассказывать про пульты от телевизоров и переключение ими треков в любимом медиаплеере. В продолжение истории про сервер FreeNAS, построенный из старого железа, я расскажу, как снабдить его столь же нехитрым бортовым контроллером с последовательным портом (консолью) поверх IP (Serial-over-LAN), дистанционным сбросом (RESET) и управляемым питанием. Спрашивается: зачем? Ведь *nix и так неприхотлив в дистанционном управлении: включил тот же SSH и управляй себе на здоровье. Но что будет при аварии? Стартовом сбое операционной системы? Что, если надо нажать RESET? Сделать апгрейд системы? Или запустить fsck в single user? Или восстановить спиленный сук неверно настроенный firewall? Не ехать же на площадку каждый раз, подключать монитор, клавиатуру и торчать ночью в офисе на регламентных работах… или мозолить глаза днём сердитому Бизнесу.

Ещё один NAS своими руками, часть 4: призрак Чернобыля

Я давно понял, что лень — основной двигатель человеческого прогресса. Наверное, самые изящные формы лени встречаются в самой прогрессивной области: сфере информационных технологий, где лень уже часть профессии. Это мы внедряем сложные helpdesk-регламенты, чтобы не устанавливать пользователям нужные программы. Это мы два дня отлаживаем скрипт, чтобы потом сэкономить себе полчаса. Это мы управляем рабочим столом в соседней комнате, используя для этого сервер на соседнем континенте. Это мы придумали мораторий на работы, чтобы отдыхать ещё за неделю до Нового Года. Кто это там ждёт лифт в вечерний час пик, чтобы чинно спуститься на нём со второго этажа на первый? Бизнес снисходительно зовет нас айтишниками, но мы гордо величаем себя Инженерами ИТ…

Напрашивается устройство, часто именуемое off-band (baseboard) management controller, или автономный бортовой контроллер дистанционного управления. Это такая серебряная посеребрённая пуля, уменьшающая чрезмерные нагрузки на священный сисадминский зад. По функциям наше изделие близко к IPMI за некоторым вычетом, и до настоящих серверных продуктов вроде iLO или DRAC тут, конечно, далеко. Да, лучше купить готовый контроллер за половину стоимости старого компьютера (или серверную платформу за пятикратную стоимость), если того требует важность данных и связанные риски. Я же собрал рабочее устройство немногим дороже $70, которое к моменту публикации поста успело выручить меня уже несколько раз, чего и всем желаю.

Используете старый ПК-сервер Linux дома или в офисе? Некому нажать RESET? Не хватает денег на серверную платформу? Возможно, вы узнаете новые способы упростить себе жизнь. Программировать почти не будем, паяльник и Хор Друидов не потребуются, зато вспомним весёлые 90-е. Микроэлектроника — это просто!

DISCLAIMER

Информация предоставляется AS-IS без какой-либо ответственности за её использование кем-либо, где-либо и когда-либо. Все ненароком упомянутые торговые марки являются собственностью соответствующих владельцев. Некоторые из них в рекламе уже настолько не нуждаются, что я придумываю им шуточные названия.

Технические требования

Итак, в первой части мы собрали сервер NAS из хлама и палок старого железа, во второй части подобрали флэш-память для загрузчика ОС, а в третьей части практически затолкали в обычную «башню» десяток шпиндельных дисков, не опасаясь за их неудачный старт или перегрев. Пройдемся по контрольному списку серверности:

Контрольный список серверности

Материнская плата с ECC-памятью Не предусмотрено бюджетом
SMP-архитектура ЦП Одно ядро, но зато с HyperThreading
Избыточный блок питания Не предусмотрено бюджетом
Технологии SAN и Fiber Channel Шутка юмора:)
Продуваемый корпус, рассчитанный на X* дисков Есть
Дисковый массив Есть
Специализированная файловая система ZFS UFS (из-за ОЗУ)
Мониторинг здоровья и телеметрия Есть
Физическая безопасность Нет в требованиях
Сторожевой таймер Нет
Серверная ОС FreeNAS (встраиваемая)
Дистанционное управление платформой TBD**

* X — римская «десять»
**TBD — To Be Done (англ.: надо сделать)

Да, далековато нашему изделию до Настоящего Сервера… И признаемся сразу: обычная материнская плата по последовательному порту в BIOS нас не пустит:

0. Удалённый доступ в BIOS

Но это свойство самой материнской платы, и если оно слишком мешает, рекомендую читателю прерваться и поискать либо решение в виде серверной платформы (где должен быть встроен бортовой контроллер дистанционного управления), либо плату расширения PCI с KVM-over-IP (наподобие eRIC G4). Будет, конечно, дороже. А мы пока продолжим писать требования для нашего DIY решения.

1. Подключиться к последовательному порту сервера по TCP/IP

Это вполне типовая задача, решаемая обычным конвертером интерфейсов RS232-Ethernet. Буквально первое, что попалось под руку — MOXA NE-4110S стоимостью примерно $50. Знакомьтесь, главный герой нашей сегодняшней истории — бескорпусное, немного брутальное изделие:

Конечно, это далеко не единственный вариант: есть конвертеры, выпускаемые под торговыми марками WIZnet, TIBBO. А помимо конвертеров, я совершенно случайно открыл ещё один тип устройств, и даже посвятил этому спойлер далее по тексту (читайте, оно того стоит 😉
Итак, «моху» мне оказалось проще заказать в ближайшем магазине, да и бренд проверенный. Как выяснилось, работает она на добром старом i80186 и, похоже, использует IP-стек BSD. Кстати, есть у NE-4110S программируемый брат, зовут его NE-4110S-P, к нему же доступен и Network Enabler SDK. Стоит «брат» в полтора раза дороже «сестры», продается реже, и от написания прошивки всё равно не избавляет. Поэтому не я стал заказывать «брата». И, ура, практически сбылась ещё одна мечта детства: «поработать на 80186». Мне всегда как-то не хватало этого пропущенного звена эволюции…

Флэшбек из весёлых 90х

Я застал IBM PS/2 с i8086, ваял на ассемблере IBM PC/XT с i8088 (на том старом мониторе в промежутки между пикселами, пожалуй, можно было бы и спичку засунуть). Играл на i80286 (причем и на AT, и на XT; а до чего же сочной казалось тогда графика VGA!).
Но долго не давала покоя мысль: куда же, черт возьми, подевался 186-ой? Что же это за процессорный бенладен такой?
Во времена FidoNet была такая фирма US Robotics, известная модемами Sportster и Courier. Они были как два брата: младший Sportster (для дома) и старший Courier (для бизнеса), и оба построены на i80186.


Бюджетная «мыльница» Sportster 14400, но разогнаться на ней больше 9600 было удачей; была ещё зелёненькая 28800

Поскольку система команд x86 была широко известной в определённых кругах, появились тогда и ордена магов-прошивальщиков, способных своими заклинаниями превратить дешевую «мыльницу» Sportster в Courier, эдакий бульдозер для российского телефонного бездорожья, на гусеничном полудуплексном протоколе HST. Интернета тогда не было, поэтому фрекать можно было и на полудуплексе. А как звучал HST! Продвинутые юзеры не выключали динамик модема, чтобы вслушиваться в шумы модуляции и по ретрейнам определять качество связи. Но у HST это была просто симфония: можно было почти физически ощутить, как потоки битов на полном ходу уворачиваются от плавающих бревен старых советских АТС, будто направляемые умелой рукой невидимого капитана. На целых 16,8кбит/с, но поверьте, тогда это было совсем неплохо.
Переделанный из «мыльницы» бульдозер, правда, глючил, и часто получался с одной «передачей»: либо только «вперёд» (на дозвон), либо на прием звонка, в зависимости от ДНК «мыльницы» (это уж как повезет). И потому до прихода Интернета все уважающие себя фидошники мечтали заполучить красноглазого дьявола электросвязи с настоящим логотипом Courier.


Красноглазый дьявол электросвязи, гроза всех помех и бульдозер городских телефонных сетей

Но лишь немногие счастливцы засыпали под автоматные очереди курьерского реле импульсного набора номера. Труднее всего спалось тем, у кого телефонный номер босса содержал нолики, девятки и прочие особо длинные и трескучие комбинации. Настоящие ниндзя, конечно, припаивали бесшумные герконовые реле, о чем потом смачно рассказывали в эхах, вызывая жгучую зависть обладателей простых «мыльниц». И при этом все дружно мечтали, что когда-нибудь наступит Новая Эра, и наши городские АТС тоже начнут понимать тональный набор, как в очень далеких и очень счастливых странах…
Ровесники, достаём салфетку и ловим ею скупую слезу… Привет, 80186, давно не виделись.

Итак, пока заказанное мною блюдо пересекало государственные границы, я обнаружил интересный факт: оказывается, многие конвертеры интерфейсов снабжают до кучи цифровым вводом-выводом (GPIO или DIO). Наверное, чтобы чем-нибудь поуправлять, не так ли?

Нужен ли Хор Друидов

Словосочетание «без Аль Дурильо» в некоторых кругах означает что-то вроде знака качества: дескать, не лохи дилетанты какие-то собрались, а реальные электронщики. Да простят меня дорогие читатели, но выбор свой я тогда сделал не вопреки, а по простому незнанию, и посему предлагаю обойтись без сломанных копий, холиваров и прочих капслоков. Пропустив успехи любительской микроэлектроники, я под влиянием старых рефлексов просто ринулся искать конвертер интерфейсов…

Против программирования МК

Правильно ли я сделал, уклонившись от программирования микроконтроллеров? Вроде бы простая пересылка байт туда-сюда, и всего дел на пять минут, как говорил один мой приятель. Но бегло окинув взглядом форумы по предметной области, я достаточно рельефно представил себе эдакое кодирование IP-сервера на ассемблере. Прикинул, что мне надо минимум две UART: одну на консоль RS232, вторую на прямую связь с хостом (не сбрасывать же сторожевой таймер по IP!). Затем начал считать количество UART на МК, используемых в популярных моделях Ай Дробино. За редким исключением, считать получалось только до одного. Посему пришлось вообразить и заталкивание битов в провод популярным в AVR методом научного ногодрыга (bit bang, soft serial). Продолжив мысленный эксперимент, я поставил всё это в параллель с воображаемым IP-сервером на ассемблере… Брр! Нет, это уже какое-то долгое и острое азиатское блюдо для всей семьи, а я просил легкий, диетический обед для одного человека.
Не навязываю свою точку зрения, но есть субъективное ощущение, что межсетевое взаимодействие — очень слабое звено у микроконтроллеров, порой усугубляемое нехваткой у хардкорных «железячников» элементарных навыков информационной безопасности (код получается очень уязвимым). Кесарю — кесарево.

За программирование МК

Если уж на то пошло, лично мне кажется здесь более уместной платформа STM32 с её нафаршированной периферией. И в очередной раз не могу не упомянуть в этой связи проект EasyElectronics. Как можно предположить, челябинские электронщики настолько суровы, что запускают микроконтроллеры собственным пальцем. Сомневаетесь? Прочитайте про FUSE и метод пальца. Если этим ребятам дать в руки паяльник (или поставить на руководящую инженерную должность в солидный концерн), я вообще боюсь представить последствия для мировой электронной промышленности…
Есть отладочная плата для эдаких амбидекстров микроэлектроники, со сменными мезонинами AVR, STM32, PIC и ПЛИС. Но смотреть я прошу не на саму плату, а на неприметное изделие LAN Ethernet Адаптер на ENC28J60. Смысл в том, что на спине у LAN Ethernet Адаптера гнездо для той же платы-мезонина AVR или STM32. На борту получается вся необходимая обвязка для МК, на штыревые разъёмы выведены и ноги USART от STM32. Для решаемой задачи останется прикрутить переходники с USART на RS232 и USB, снабдить устройство питанием. Возможно, для промышленных нужд не помешает и PoE вкупе с более теплостойким исполнением и виброзащитой, но это уже другая история…
Казалось бы, вот уже почти готовое изделие на базе программируемого МК, но… кто вдохнет в него жизнь? Прошивку никто не отменял, а это ещё развлечений на мифический человеко-месяц. Нет ничего невозможного, но вы же идёте в ресторан пообедать, а не пожить недельку-другую, не так ли? Задумайтесь, пока на берегу…

Не буду связываться с МК, наиграться всегда успеется. Вот, кстати, из недавнего: habrahabr.ru/post/208026
А под моими добрыми шуточными названиями читатель, конечно, без труда узнал популярную платформу, используемую и любителями, и профессионалами по всему миру. Рынок всё сам расставляет по местам…

Итак, с задачей Serial-over-LAN всё понятно, но дополним наше основное меню технических требований первым блюдом:

2. Удалённый сброс сервера, используя линию RESET на материнской плате

Посмотрим, что уже было сделано на эту тему. Стоило мне увидеть пост благородного дона workDNK, как полученный в институте багаж знаний ожил и запросился на работу. Уважаемый дон совершенно обоснованно посадил оптореле прямо на цифровой вывод МК, но у меня с «мохой» вышла незадача. Стр. 3-8 NE-4100 Users Manual весьма недвусмысленно намекает:

The output current for digital output channels carries only 1 mA.

Т.е. в отличие от PIC18F1320-I/P, цифровой порт на «мохе» больше 1мА из себя не выдавит, а для надежного открытия оптореле надо больше раз в десять. Тут из дальних закоулков памяти вдруг является транзисторный ключ (я удивился, потому что последний раз это было лет пятнадцать назад). Эскизную схему закидываем прямо в стоящий рядом с хабром тостер, и что вы думаете? Почти сразу получаем пару полезных ответов от благородных донов. Тут уже скупую слезу, наверное, уронил бы сам Господин Гейтс (вы ничего такого не подумайте, это его знаменитая речь про информацию на кончиках пальцев).

В теории всё довольно просто, и на этом я почти было остановился; но аппетит, как известно, приходит во время еды.

А можно ли управлять выключенным ПК? Конечно, можно. Более того, мы это и делаем постоянно, нажимая большую кнопку на корпусе ПК (у кого-то она маленькая и не на корпусе, да и не на ПК, но не в этом суть). Даже самые простые блоки питания ATX имеют линию +5VSB, питающую материнскую плату в состоянии STANDBY (рубильник включен, компьютер выключен). Включение ПК с клавиатуры — это всё оттуда же. Кстати, в STANDBY на некоторых материнских платах можно даже что-нибудь сжечь, переставляя планки памяти, но речь сейчас не об этом. Обычно мощность в режиме STANDBY около 10Вт, но для питания нашего контроллера хватит, чай не адронный коллайдер. Поэтому добавим-ка ещё салат и гарнир:

3. Независимое питание контроллера в режиме STANDBY
4. Удаленное включение и выключение питания хоста, используя линию PWR_BTN

Внимательный читатель, конечно, возразит на п. 4: а как же Wake-on-LAN? И будет совершенно прав: действительно, даже самая обычная материнская плата сегодня позволяет пробудить компьютер от спячки особым сетевым пакетом. И, кстати, не ищите ethtool во FreeNAS, там для этих целей служит ifconfig(8). Всё это достаточно востребовано и потому хорошо разжёвано, есть примеры настроек для популярных домашних роутеров, утилита-пускач для Linux и многое другое. Что ж, гарнир можно и не заказывать, я не настаиваю. Но и без десерта оставлять читателя не собираюсь.
На сладкое у нас сегодня яблочное желе зелёный индикатор питания:

5. Удалённый мониторинг включенного питания с полным сохранением функций визуального индикатора на корпусе

Мой сервер не отзывается на ping… Ха-ха, проверьте, подключён ли шнур питания включён ли сервер. Конечно, я имею в виду считывание состояния светодиодного индикатора PWR_LED, хотя можно и линию +5V считывать, это как больше нравится. Мне вот нравится именно идея со светодиодом, благо он наиболее доверенный свидетель и соседствует на материнской плате со всеми остальными ингредиентами. На что проще всего заменить зелёный светодиод в схеме, чтобы компьютер ничего не заметил? Очевидно, на другой светодиод, встроенный в оптореле, а сигнал на корпусной светодиод просто вернуть обратно по другой линии. Дальше, я думаю, объяснять не надо, на схеме всё будет понятно.
Наши кнопки RESET и PWR_BTN для нормальной работы компьютера должны быть отпущены, но в теории может либо транзистор пробить, либо враг отправить неверный логический сигнал. В результате наш контроллер несанкционированно замкнёт оптореле, и кнопки окажутся, так сказать, «нормально нажатыми». От этого хочется защититься, не разбирая нашу гипотетическую плату. Также на этапе отладки мы хотим визуально контролировать происходящее. Поэтому не забываем про соль, перец и прочие приправы к нашему столу:

6. Аппаратная блокировка управления линиями RESET и PWR_BTN
7. Контрольные светодиоды на линии RESET и PWR_BTN
8. Дублирующие светодиоды на линии LED_100M и LED_10M

А компот? Морс из лесных ягод красный индикатор дисковой активности на корпусе всё равно отображает только два дисковых порта из десяти имеющихся, поэтому найдем ему более полезное применение:

9. Визуальный мониторинг готовности контроллера (READY_LED) на корпусе ПК через индикатор HDD_LED

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

Вот, что получилось (да простят мне читатели некоторые негостовые вольности):

Схема


Принципиальная электрическая схема бортового контроллера управления; если мелко, откройте изображение отдельно
Комментарий для начинающих электроников

Убедитесь, что верхний спойлер со схемой открыт. Поехали.
Ядро схемы: маленький квадратик слева посередине — это как разъём J2 MOXA NE-4110S, с него всё начинается.
Ограничительные резисторы R4, R7, R8 для светодиодов и R1, R2 для оптореле считаются (вы не поверите!) по закону Ома. Чтобы и открыть оптореле, и зажечь светодиод (но не сжечь насмерть!), нужен ток порядка 10мА. Исходим из того, что на диоде упадёт от полутора до двух вольт (и ток, и напряжение смотрим в характеристиках приборов). Поскольку шина питания даёт 5В, на резисторе нужно «потерять» 3В при токе 10мА, т.е. нужно сопротивление порядка 300Ом. Ничего сложного, и без калькуляторов. Позвольте, а куда делся ограничительный резистор для оптореле по линии PWR_LED? Туда же, куда для индикатора READY_LED (HDD_LED): они оба встроены в схемы наших готовых изделий, один на материнской плате, второй на «мохе». Без обмана.
Подтягивающие резисторы R3, R5, R6 (см. wikipedia) номиналом 10кОм. Подтягивать будем логические уровни, дабы не болтались в воздухе и не ловили нам помехи оттуда.
Транзисторные ключи. Чтобы решить проблему с нехваткой управляющего тока (надо 10мА, но есть всего 1мА), поставим пару ключей 2N7000. Полевые транзисторы — приборы, управляемые напряжением: когда «моха» даёт высокий уровень, транзисторный затвор открывается, но ток при этом практически не потребляет. При этом замыкается цепь сток-исток, и электричество бежит себе с шины +5В через ограничительный резистор на «землю», по дороге зажигая светодиод, либо открывая оптореле. Полевик — хороший прибор, только статического электричества боится до смерти в буквальном смысле.
Оптореле сдвоенное однонаправленное, нормально разомкнутое. Этот полезнейший прибор позволяет замыкать (или размыкать в нормально замкнутом случае) электрические цепи, при этом изолируя их друг от друга. Управляющий ток подаётся по тем же законам, что и на светодиод, через ограничительный резистор. Наше реле однонаправленное: это значит, что управляемый (ведомый) ток через него можно пускать строго в одном направлении: «плюс» нужно соединять с контактом №6 или №8, иначе ток не пойдет, реле будет как будто закрытым. Оптореле тоже боится электростатики.
Как видите, совсем не квантовая теория.

Ну и напомню в конце, что мы имеем дело со встраиваемым бескорпусным изделием. Если его не закрепить должным образом, при неосторожном рывке за Ethernet-кабель наш контроллер будет болтать в корпусе ПК, как трусы в стиральной машине. Чтобы этого не произошло, подадим столовые приборы:

10. Жестко закрепленный на корпусе компьютера порт Ethernet

Задачу удалось решить так:

Зачем на самом деле нужны внутренние модемы и адаптеры 10/100BaseT на шину PCI

Оказывается, есть отличное применение старым, ненужным платам PCI с квадратными разъёмами.


Конвертер интерфейса на скобе от внутреннего модема PCI

Расстояние между крепёжными отверстиями на «мохе», понятное дело, не совпали со скобой, поэтому вместо второго болта я использовал обычную нейлоновую стяжку: держится достаточно крепко, а широкое окошко под два телефонных разъёма позволило комфортно разместить RJ-45 от «мохи».


Вместо второго болта — туго затянутая нейлоновая стяжка

Если под рукой не оказалось внутреннего модема PCI (бывает), подошла бы скоба от сетевого адаптера PCI (лучше всего подойдет 10 или 100 мегабит, но 1000 тоже можно). Допуск на размещение болтов, конечно, будет несколько другим, но нет ничего невозможного.

Итак, ваш заказ принят, готовим блюда и приступаем к еде!

Ещё одно интересное решение удалённого доступа

Занимаясь дачными Интернетами, наткнулся на скромное изделие TP-LINK MR3020.

Этот, на первый взгляд, несерьезный карманный роутер размером с небольшую пачку печенья может превратится в многоцелевую платформу удалённого доступа с функциями, о которых производитель изделия и близко не догадывался. Под корпусом у него спрятан Atheros AR7240@400MHz, 4Мб флэш-памяти, ОЗУ 32Мб, а также (при некоторой смекалке и паяльнике) последовательный порт и GPIO. Связь с миром через USB-модем, Ethernet или WiFi (правда, встроенная антенна слабовата). Узнайте, сколько ещё интересных вещей можно получить всего за $25: http://wiki.openwrt.org/toh/tp-link/tl-mr3020. Кстати, USB-модемы идут с microSD (почитайте на всякий случай пост про флэш-память и приготовьте познания Linux, они будут очень кстати).
В принципе, эту штуку можно по-шпионски прилепить внутрь корпуса ПК, запитав от тех же +5VSB и подключив последовательный порт (внимание: там TTL-уровень, для RS232 нужен переходник, а для USB — переходник плюс поддержка в ОС). Только следите за безопасностью, удалённый доступ — палка о двух концах, и слово «шпион» тут не просто так…

Чтобы не связываться пока с агрессивными средами, паяльником и его другом утюгом (это уже не герои из 90-х, так платы сейчас делают в домашних условиях), но обкатать всё на реальном железе, я решил собрать свое нехитрое изделие на беспаечной макетной плате (breadboard). Кстати, весьма практичная штука, особенно для тех, кто на «вы» с паяльником. Что касается самодельных макетных перемычек, я уважаю профессионалов, но не люблю все эти «взрывы на телефонном коммутаторе», поэтому купил красивый фирменный набор разнокалиберных перемычек.

Душераздирающая сцена


Заимствовано с сайта: www.rfcafe.com/references/electrical/bob-pease-breadboard.htm
Успокоительное средство


Набор «усталый айтишник» для снятия стресса

Хоть перемычки и стоят денег, зато можно часами сидеть и втыкать их в макетку так и эдак, подбирая оптимальную длину. Это такая специальная терапия для измученных стрессами тружеников информационного цеха, успокаивает не хуже склеивания корабликов с самолётиками: нету ни бело-оранжевого, ни бело-зелёного, ни бело-синего, ни бело-коричневого, всё специально однотонное. Более стрессоустойчивые коллеги могут, конечно, перемычек из одножильной витой пары нарезать, сечение подходящее.
А вообще начинающим рекомендую прочитать бестселлер: habrahabr.ru/post/148656/, после него я еле удержался от покупки всего ассортимента ближайшего радиолюбительского магазина.

Схема беспаечной макетной платы в вольной системе обозначений


Трафарет для Visio брал отсюда: www.sandrila.co.uk/articles/visio-articles/electronics-breadboards/

Кстати, если кто-то пожелает это изготовить в виде настоящей платы, дайте знать в личку, возможно, я даже поучаствую.

Наверняка это не новость, но попутно я нашёл (буквально) прикольный способ для сопряжения беспаечной макетки с окружающим миром разъёмами на плоский шлейф (Insulation-Displacement Connector, IDC): накалываем на один конец шлейфа разъём типа DIP (с шагом 2.54мм, войдёт в макетку), а другой конец расчленяем и обжимаем кримпером, затем обуваем нужным штыревым разъёмом BLS/BLD (клещи-кримпер использую те же, что в другом посте). Либо не расчленяем шлейф, но просто накалываем другой IDC-разъём. Можно их много наколоть, как на шлейфах для старых дисков IDE. О сколько нам открытий чудных готовит магазин электроники.

По этому принципу я собрал два шлейфа: один (простой) для связи моей платы с MOXA NE-4110S, а второй (хитрый) для сопряжения с разъёмами на материнской плате. Очень рекомендую цветной шлейф: он не только порадует глаз веселой радугой цветовой маркировки, но на нестандартных задачах ещё и сильно сэкономит дорогостоящие ресурсы вашей центральной нервной системы, освободив её для более интересных задач. Скучный серый шлейф хорош для простых и прямых вариантов, всякие перевёрнутые фигуры на нём лучше не исполнять.

Если кто не видел веселье


Цветной весёлый шлейф


Этот IDC разъём-вилку с шагом 2.54мм накалываем на дальний от макетной платы конец шлейфа


Хитрый шлейф
Слева: подключаем кнопки и светодиоды от корпуса ПК к вилке (IDC-разъёму) на шлейфе; от разъёма дальше пошли две пары…
Cправа: две пары дошли до стандартных контактов RST_SW и PWR_SW на материнской плате, почти все нужные цепи замкнулись


Эти два разъёма IDC (шаг 2.54мм) накалываем на ближние концы шлейфов, они «сядут» на макетную плату


Макетная плата с двумя подключёнными шлейфами.

Монтаж сосредоточен слева, а на правом краю одиноко торчит Запасное Имущество Прибора (полевой транзистор, если пробьёт имеющийся). По-моему, получилось аккуратно, даже несмотря на циклопических размеров ограничительные резисторы (ваш покорный слуга немного поспешил при закупках).

О правильном питании

Чтобы выполнить требование №3 по независимому питанию в режиме STANDBY, поищем что-нибудь подходящее на материнской плате. Ну не врезаться же в 20-контактный разъём питания ATX, в самом деле. Вот так удача: судя по стр. 17 руководства P4i65G, совершенно бесполезный разъём ИК-порта как раз и питается линией +5VSB (забегая вперед, отмечу, что это оказалось циничным обманом). Отлично, добавляем в корзину соответствующий 2-рядный 6-контактный разъёмчик с шагом 2.54мм, обозначаемый иногда как BLD 2×3.


Почти бесполезный разъём для подключения ИК-устройств к материнской плате P4i65G, BLD 2×3

Кстати, если читатель вдруг пожелает +5VSB, я бы рекомендовал искать питание его где-то на внутренних разъёмах USB, либо на клавиатурном разъёме PS/2. Зайдите в раздел управления питанием BIOS и посмотрите, от чего компьютер может просыпаться. Те устройства, которые способны выдернуть компьютер из отключки, как раз и связаны с +5VSB.


Разъём J2 на MOXA NE-4110S, BLD 2×7

Помимо последовательного порта J1 в стандарте RS232 (аналог того, что торчит на материнских платах), на «мохе» имеется недвусмысленный разъём J2 для подключения питания, GPIO (DIO), контрольных светодиодов и отладочного последовательного порта TTL-уровня (TXD1, RXD1, GND). На всякий случай скажу, что TTL UART требует линейный драйвер для сопряжения с RS232, там напряжения другие; но мы этот порт подключать и использовать не будем. Просто добавим к покупкам 14-контактный разъём типа «мама», с известным шагом 2.54мм (1/10").
Стоп, а почему у «мохи» два контакта VCC +5V? Начитавшись профилактория о вкусном и здоровом питании микроконтроллеров, я уже начал было подозревать раздельную шину. Но увидев весьма недвусмысленную спайку на плате перед единственным стабилизатором напряжения (и даже померяв на всякий случай её сопротивление), я понял, что такой двойной ввод питания к внутренней обвязке не имеет отношения. Поэтому повернём ситуацию в своих корыстных целях: приведём на один контакт питание с +5VSB, а с другого тут же заберём его же на свою макетку. И волки целы, и овцы сыты. Может, для меня и оставили эти два контакта?

Немного об электростатике

Я последний раз был на радиорынке, наверное, в конце 90-х. Недавно я вообще ничего не знал ни про беспаечные макетки, ни про AVR и их Хор Дробленый. Всё это погружение в микроэлектронику заняло около двух недель в режиме хобби, в течение которых пришлось много читать.
Заодно я решил всё-таки сперва сдать самому себе зачёт по макетированию, прикупив для упражнений 7-сегментный индикатор и всякую микруху с рассыпухой. Понятное дело, что вместо общего катода я взял общий анод, и при подключении к микросхеме 4511 мой индикатор показывал цифры инверсно и требовал много транзисторов. Хорошо, что мои микроэлектронные издевательства никто не видел…
Не только от лени, но и ради эксперимента я решил почти полностью пренебречь электростатической безопасностью, взяв пару защитных пинцетов и десяток полевых транзисторов про запас. И как в воду глядел: в процессе сдачи зачёта смертью храбрых пали аж семь из десяти «полевиков». Вывод: если работаете с полевыми транзисторами или другими КМОП-деталями, защищайте ноги этих нежных приборов от электростатики, реальность проблемы подтверждена теперь ещё одним экспериментом. Вариантов защиты много: от ритуального заматывания в фольгу в чем мать родила до специальных браслетов и ковриков. Только если в квартире нет настоящей «земли», учтите, что во время ваших электронных медитаций какой-нибудь добрый сосед по законам жанра обязательно уронит фазу заземлит стиральную машину на ту же трубу. И тогда, если ваша защита сама не защищена, то можно из фольгированной шапочки ненароком получить шлем виртуальной реальности, как в одном давно забытом фидошном баяне (тогда ещё не было понятия «я пацталом», но теперь я знаю, как это называется). Лично я предпочел заплатить парой пинцетов и несколькими пробитыми транзисторами (вечная им память). И простите меня, монстры-электронщики. А если серьезно, погуглите по теме электростатический браслет.

Безопасность

Не будем, однако, забывать о дверях, окнах и тому подобных заборах. Наше устройство NE-4110S паролями не закрывается, но может использовать простые ACL на IP-адреса, которые рекомендуется ограничить административной сетью. Операционная система сервера должна обязательно запрашивать логин и пароль для входа через последовательный порт. Всё содержимое Serial-over-LAN передаётся по сети в открытом виде (telnet), поэтому передачу по публичным сетям без шифрованных VPN делать никак нельзя (иначе уйдёт пароль root, который вы наверняка будете вводить). По этой же причине нужен и отдельный VLAN (простой сетевой коммутатор Ethernet с переполненными таблицами ARP превращается в хаб, который начинает звонить пакетами на все порты сегмента). Все устройства удалённого доступа к серверам — это потенциальные уязвимости, относится к ним нужно с должным уважением, ошибки редко прощаются.
Кстати, как обнаружили некоторые пользователи, и у FreeNAS около релиза 9.2.x оказалось не все гладко с реализацией serial console (https://bugs.freenas.org/issues/4266). Будьте осторожны, если используете эту систему.

Ленивый нуль-модем

Нуль-модемный кабель RS232 для соединения последовательных портов сервера и контроллера я изготовил из шнура от картридера-инвалида, которому Бизнес некоторое время назад вывихнул десяток ног. Пришлось заказывать новые 2-рядные 10-контактные разъёмы типа «мама», т.к. старая защита от дурака (в виде «залитой ножки») как раз и не давала подключить кабель USB к разъёму COM-порта. Можно легко изготовить такой кабель из плоского шлейфа, просто я ленив, и потому взял готовый шнур, обжимать кримпером пришлось всего пару проводков вместо двух десятков. Опять же, читателю рекомендую использовать для таких задач весёлый цветной шлейф.


Схема полного нуль-модемного кабеля, заимствована с bogpeople.com/networking/SerialComms/rs232pinouts.shtml

Спрашивается: а нужны ли все эти DTR, DSR, RTS, CTS? И вообще, зачем DCD в нуль-модеме? Давным-давно я подключал консоль к коммутатору Frame Relay тремя проводками (RXD, TXD, GND) по витой паре, и всё работало. Но посмотрим на устройство последовательной консоли во FreeNAS. Использует она записи типа freenas_serial9600 из gettytab(5), и при этом признака «nc’’ там не видно. А в теории это означает, что при отсутствии сигнала DCD последовательный порт будет считаться «мертвым», и консоль по нему не поедет, по крайней мере, без вмешательства в код FreeNAS. Я могу ошибаться и не учитывать электрические свойства висящей в воздухе линии, но философские практики Крепсондо рекомендуют в таких случаях именно обжимать линию DCD, а не курочить прошивку FreeNAS на read-only файловой системе, потея потом при каждом дистанционном апгрейде сервера. Не читайте историй в Интернете про нестандартные нуль-модемы, делайте стандартный. Потом пригодится ещё где-нибудь.
Итак, приведу схему обжимки нуль-модема к виду на воображаемые 10-контактные разъёмы типа «мама», сидящие на воображаемом кабеле. Схема, кстати, в момент испытаний чуть не довела меня до цугундера, но об этом позже.


Схема нуль-модема, вид на разъёмы типа «мама», цветовая маркировка USB-кабеля (два чёрных: один потолще, второй потоньше)

Софт

Братцы, посмотрите на длину этого поста, а ведь мы даже не собираемся программировать микроконтроллер! Тем не менее, самый простенький скрипт на языке perl для удаленного нажимания кнопок я всё-таки добавлю для полноты повествования. Он немного избыточен, но это для красоты.

Отправка секундного нажатия на кнопку питания

#!/usr/bin/perl  use IO::Socket::INET;  $|=1; #flush  my $s = new IO::Socket::INET (         PeerHost => '10.100.200.1', # NE-4110S host         PeerPort => 5001, # DIO port         Proto => 'tcp', ) or die "IO::Socket::INET: $!\n";  my $CMD_PWR_ACTIVE = pack('C7',         2,      # command number, fixed         2,      # version, fixed         0,      # this byte is only used in response         3,      # data length, fixed         3,      # desired DIO channel number         1,      # 1: set to output mode         1,      # 1: set to high         );  my $CMD_PWR_INACTIVE = pack('C7',         2,      # command number, fixed         2,      # version, fixed         0,      # this byte is only used in response         3,      # data length, fixed         3,      # desired DIO channel number         1,      # 1: set to output mode         0,      # 0: set to low         );  my $res; my ($hdr_cmd, $hdr_ver, $hdr_err, $hdr_len); my @data;  print "PWR_ACTIVE\n"; print $s $CMD_PWR_ACTIVE; $s->recv($res, 4); ($hdr_cmd, $hdr_ver, $hdr_err, $hdr_len) = unpack('C4', $res); printf("result: CMD %d VER %d ERR %d LEN %d\n", $hdr_cmd, $hdr_ver, $hdr_err, $hdr_len); $s->recv($res, $hdr_len); @data = unpack("C$hdr_len", $res); sleep(1); print "PWR_INACTIVE\n"; print $s $CMD_PWR_INACTIVE; $s->recv($res, 4); ($hdr_cmd, $hdr_ver, $hdr_err, $hdr_len) = unpack('C4', $res); printf("result: CMD %d VER %d ERR %d LEN %d\n", $hdr_cmd, $hdr_ver, $hdr_err, $hdr_len); $s->recv($res, $hdr_len); @data = unpack("C$hdr_len", $res); sleep(1); $s->close(); exit(0);

Отправка секундного нажатия на кнопку RESET

#!/usr/bin/perl  use IO::Socket::INET;  $|=1; #flush  my $s = new IO::Socket::INET (         PeerHost => '10.100.200.1', # NE-4110S host         PeerPort => 5001, # DIO port         Proto => 'tcp', ) or die "IO::Socket::INET: $!\n";  my $CMD_RST_ACTIVE = pack('C7',         2,      # command number, fixed         2,      # version, fixed         0,      # this byte is only used in response         3,      # data length, fixed         2,      # desired DIO channel number         1,      # 1: set to output mode         1,      # 1: set to high         );  my $CMD_RST_INACTIVE = pack('C7',         2,      # command number, fixed         2,      # version, fixed         0,      # this byte is only used in response         3,      # data length, fixed         2,      # desired DIO channel number         1,      # 1: set to output mode         0,      # 0: set to low         );  my $res; my ($hdr_cmd, $hdr_ver, $hdr_err, $hdr_len); my @data;  print "RST_ACTIVE\n"; print $s $CMD_RST_ACTIVE; $s->recv($res, 4); ($hdr_cmd, $hdr_ver, $hdr_err, $hdr_len) = unpack('C4', $res); printf("result: CMD %d VER %d ERR %d LEN %d\n", $hdr_cmd, $hdr_ver, $hdr_err, $hdr_len); $s->recv($res, $hdr_len); @data = unpack("C$hdr_len", $res); sleep(1); print "RST_INACTIVE\n"; print $s $CMD_RST_INACTIVE; $s->recv($res, 4); ($hdr_cmd, $hdr_ver, $hdr_err, $hdr_len) = unpack('C4', $res); printf("result: CMD %d VER %d ERR %d LEN %d\n", $hdr_cmd, $hdr_ver, $hdr_err, $hdr_len); $s->recv($res, $hdr_len); @data = unpack("C$hdr_len", $res); sleep(1); $s->close(); exit(0);

Комплектация

Перечень ингредиентов с ценами

Наименование Кол-во Стоимость
Конвертер интерфейса MOXA NE-4110S 1шт. $50
Плата макетная беспаечная 1шт. от $10
Сдвоенное оптореле КР293КП4Б, корпус DIP8 2шт. $4
Полевой транзистор 2N7000, корпус TO92 2шт. $1
Ограничительный резистор 330Ом 5%, «выводной» корпус 5шт. $0.30
Подтягивающий резистор 10кОм 5%, «выводной» корпус 3шт. $0.20
Светодиод красный АЛ307ЛМ d=5мм 1шт. $0.30
Светодиод желтый АЛ307ЖМ d=5мм 1шт. $0.30
Светодиод зелёный АЛ307НМ d=5мм 2шт. $0.60
Переключатель DIP, 4 контакта 1шт. $1
Разъем-вилка 2.54мм IDC (на шлейф), двухрядный 10 контактов 1шт. $0.50
Разъем DIP IDC (на шлейф), 10 контактов 2шт. $0.50
Шлейф цветной, 10 контактов $2.40
Разъём-гнездо 2.54мм на кабель BLD 2×7 (для MOXA J2) 1шт. $0.50
Разъём-гнездо 2.54мм на кабель BLD 2×5 (для COM-порта) 2шт. $1
Разъём-гнездо 2.54мм на кабель BLD 2×3 (для IR-порта) 1шт. $0.30
Разъём-гнездо 2.54мм на кабель BLS 2×1 (для подключения к мат. плате) 3шт. $0.45
Ненужная плата внутр. модема PCI завалялась
Маленькая нейлоновая стяжка была
Клещи для обжима контактов разъёмов BLS и BLD тоже были, но вообще от $20
Патч-корд Cat5e нашёл;)
Перемычки для макетной платы купите или сделайте сами
Время не считается
ИТОГО чуть дороже $70

Все приборы в DIP, либо в «выводных» (не SMD, не планарных) корпусах — для беспаечной макетной платы


Конвертер MOXA NE-4110S (на скобе), а также плата и кабели

Дух эксперимента

Вечер пятницы. Слегка гудя малыми оборотами вентиляторов, методично сосет близлежащую офисную пыль наш трудяга Zeus, приютив на своей спине обнимающуюся пару из коммутатора и домашнего роутера. Сохранены все данные. Разогнаны по домам и кабакам все пользователи. Уютно мигают светодиоды, и в воздухе уже витает Дух Эксперимента.
Первым делом заменим домашний роутер на дикий. Это, конечно, отдельная история; стоит сказать, что принесённый дикий роутер уже полностью приручён на стенде: обновлены все прошивки, заданы все настройки, адреса, пароли, явки и файрволы. Тратим несколько минут на возню с проводами, и всё поехало с первого раза. Ай, какой я молодец. Домашний роутер поедет на дачу.
Затем возвращаемся к основной цели визита и пробуем реализовать исходный замысел, полагаясь на наличие обещанных +5VSB на разъёме ИК-порта.
Достаём наш конструктор, собираем и включаем. Темно и тихо, но пахнет пока не дымом, а всё ещё духом эксперимента. Ищем перемычку PS2_USB_PWR1. Чёрт, она под воздуховодом кулера. Разобрав на время наш управляемый вектор тяги (см. habrahabr.ru/post/214707/), пробуем её так и эдак. Ничего не получается.
Как говорится, прочтите, наконец, инструкцию. На стр. 26 руководства P4i65G в разделе 3.3.3 ACPI Configuration из устройств упомянуты Ring-In (модем), PCI (Wake-on-LAN) и PS/2 (клавиатура). Порт IR в явном виде не упомянут. Хм. И про USB вообще ни слова. Хорошо, пробуем клавиатуру PS/2. При правильном положении перемычки PS2_USB_PWR1 клавиатура PS/2 в режиме STANDBY действительно светит индикатором и выводит компьютер из спячки. Ага, в крайнем случае одолжим питание с PS/2. Клавиатура USB в режиме STANDBY глуха, как рыба об забор, и будить компьютер явно не хочет. Значит, название перемычки PS2_USB_PWR1 следует читать как PS2_PWR1, а обещанные +5VSB на разъёме IR — как шутку производителя. USB в состоянии STANDBY эта материнская плата не питает вовсе. Видимо, разработчики подумали, что никто и не заметит столь циничный мухлёж.


Перемычка PS2_USB_PWR1, которая на самом деле к USB отношения не имеет

Но как же запитать наше хозяйство без неэстетичных соплей, торчащих из PS/2 снаружи корпуса? Снимаем перемычку PS2_USB_PWR1 совсем и подключаем питание нашей схемы к выводу №3. Включаем. Сервер как-то обиженно и возмущенно пискнул, и стартовать, похоже, не собирается. И вот уже в воздухе почудился еле уловимый Призрак Чернобыля… Мозг рефлекторно вычисляет возможный расход: одна материнская плата, один блок питания, что там ещё можно спалить? Не смертельно, но бегать в субботу за железом, да ещё и с ощущением проигрыша никак не входило в планы великого комбинатора. Ладно, быстро вырубаем от греха подальше и снова смотрим на наш электронный ребус.


Электронный ребус: сколько положений есть у перемычки?

Что-то мы не учли. Наверное, пятивольтовую шину питания, на которой сидит клавиатурный контроллер и ещё, наверное, полдюжины полезнейших устройств. Видимо, это её вход торчит у нас прямо под носом в виде контакта №2. Слева под №1 выход с линии +5V, а справа под №3 — выход с +5VSB. Спасибо, Капитан Очевидность, и где же Вас носило 26 апреля 1986г.? «Приезжайте в Киев, вы будете поражены!» — пошутил тогда один респектабельный джентльмен. «Идиот, запитай мне пятивольтовую шину!» — пищал мне компьютер…

Причём тут вообще авария на Чернобыльской АЭС? А вы вспомните себя в известной позе Данилы-мастера с каменным цветком: сколько раз приходилось доставать шаманский бубен, соединять бегемотов с носорогами и полагаться на авось? Сколько раз приходилось включать то, чего включать нельзя, и выключать то, что лучше бы вообще не трогать? Я недавно читал какое-то глобальное исследование, из которого достаточно чётко следовало: значительная часть аварий в ИТ-сфере происходит по вине персонала, в процессе того, что обычно принято называть регламентными работами. Этот айтишный авось не русский, он общемировой. Вот и меня понесло туда же. Авось, пронесёт…


Очередная авось-схема

Ставим перемычку в положение 1-2 (даём обычные +5V на шину), а наше изделие запитываем прямо с контакта №3 +5VSB, одолжив «землю» у бесполезного разъёма ИК-порта. Обязательно обуваем клемму в термоусадку или разъём BLS 1×1 (иначе обязательно коротнёт; это обычно не смертельно, но защита блока питания не даст запустить машину). Делаем глубокий вдох и включаем рубильник… Выдыхаем под веселое перемигивание светодиода LED_100M. Вентиляторы и вся прочая механика молча стоят и ждут. Telnet бодро выдает главное меню контроллера. Ура, теперь мы действительно управляем выключенным компьютером! Призрак Чернобыля благополучно тает в воздухе, оставляя белесое облачко детских воспоминаний. Занавес.

Стоп, стоп, какой занавес? Читатель прекрасно знает, что так красиво серверы стартуют только в сказках. Поэтому да, между включением рубильника и результатом было получасовое ползанье по полу вокруг глухого последовательного порта, сопровождаемое попытками переключения скорости/режима потока, чесаниями репы и командами UNIX, вперемежку с матом. Потому что при обжимке обоих концов шнура я смотрел на одну и ту же картинку (оба раза на левую), собрав вместо нуль-модема обычный прямой кабель…


Один разъём надо обжимать по левой картинке, а другой по правой; порядок неважен

Тьфу! Обнаружив столь эпичный косяк, я сразу воспрянул духом, выдавил из офисного степлера скрепку и принялся разгибать ею разъём обратно. Переделав кабель как надо, я получил в награду консольное меню FreeNAS. Цугундер миновал. Конечно, был и самый волшебный момент проверки, когда стоящий в полуметре ящик послушно глох и оживал, подчиняясь незримым командам с сервера в далекой стране. Помигали контрольные светодиоды, телеметрия на цифровом вводе (зелёного светодиода) показала «вниз» при включенном сервере и «вверх» при выключенном, и всё это под немое, но веселое перемигивание индикатора LED_100M.
Не считая косяка с нуль-модемным кабелем, эксперимент удался с первого раза.
Как того и требовала её величество Инженерия.

На прощание ещё один давно забытый, но любимый баян из 90-ых неизвестного автора:

Было ортогонально

Мерно покачиваясь на волнах синусоиды, аргумент плавно скользит в бесконечность. Мимо стремительно проносятся гипотенузы и катеты. Со свистом пролетают пределы.
Медленно тащатся обратные тригонометрические функции, уступая дорогу важным Производным Высших порядков. По обочинам безмолвно стоят модули и флаговые подпространства. Изредка промелькнет и исчезнет, волоча за собой свой хвост, степенной ряд. На коротких ножках, подпрыгивая и спотыкаясь, бегут группы, алгебры, области D, Омега, сопровождаемые стайкой неугомонных идеалов.
Вектор нормали клонился к факториальности, фазовое пространство стремилось к предельной точке, уже супремум с инфинумом, пораскинув мощностью, аппроксимировались константой, сошки помельче, вроде директрисы и центра масс уже сколько угодно близко приблизились к малому числу Дельта, все плохие точки вытеснены без ограничения общности, распределение Дирака применено к системе со связями; приближалась сходимость. Еще не приведенные многочлены векторно умножались на матрицу перехода, а те, кто не успели, были задавлены экспонентой. Повсюду шастали волнистые координаты. Маленькие бесправные логарифмы гонялись за эпсилоном, беспомощно размахивая суммируемой особенностью.
Было ортогонально.
В наступившей неустойчивости там и сям раздавался хруст колец. На них действовала вторая квадратичная форма.
Фактор-пространство, донимаемое поточечной сходимостью, слонялось между двойными и повторными интегралами, которые гордо брались и аккуратно подбирали выражения в элементарных функциях.
Гомоморфизмы, выбрав уголок полокальнее, занимались любовью с матрицами Грама и Якоби.
Непрерывность шла своим чередом. Комплексные переменные — блюстители порядка, сужаясь на класс эквивалентности, раскладывались в ряд Фурье и быстро понижали порядок, если какой-нибудь условный экстремум, уделанный алгоритмом Евклида, пытался последовательностью зажать с двух сторон бесконечно малую. О-большое и о-малое, с точностью до величин первого порядка, оценивали условно сходящийся ряд. Мягкой периодичностью лилась тригонометрическая система функций. За ними вовсю ухлестывали обобщенные. Гладкость не менялась, линейность не нарушалась, сингулярность проявлялась только в точках накопления. Риманово многообразие подернулось дымкой субгармоничности, импликация с детерминантом молча удовлетворяли краевые условия.
Начинался следующий шаг. За ним последуют еще и еще, и так далее, до бесконечности. Так будет продолжаться до тех пор, пока для любого эпсилон существует дельта, пока суммы — Дарбу, правило — Лопиталя, принцип — Максимума Модуля. Пока не придет новый Гаусс, Коши, Лагранж, Пифагор, Ферма, Фурье, новый Остроградский и не явит миру новое, неведомое ранее знание,
новое Откровение,
новую Математику.

Занавес.

ссылка на оригинал статьи http://habrahabr.ru/post/217299/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *