SmartPipe. О проекте.

Блог им. trapper
Этим постом я открываю цикл статей по проекту SmartPipe.
Проект SmartPipe — это моя попытка разработать небольшой «комерческий» проект, а также проанализировать спрос и перспективность такого рода занятия. Слово «комерческий» я использую в кавычках, потому как прекрасно понимаю, что к сожалению, в нашей стране пока комерческими могут быть только проекты по производству колбасы и перепродаже нефти.
Поэтому основная цель этого блога получить feedback от сообщества, узнать мнения ну и получить критику конечно.

smartpipe inside
SmartPipe — это «умный» USB-Serial адаптер.

«Умность» у него заключается в том что, помимо обычной функции передачи UART пакетов в компьютер
через USB, он может форматировать проходящие через него данные.
Зачем это нужно? Всего для одной, но очень важной задачи — анализа логов из тестового устройства.
Сложность современных электронных устройств быстро растет. Уже никого не удивишь Linux-ом на устройстве с размером в SD-карту. Но когда вы используете Linux возникает соблазн воспользоваться всей мощью открытого ПО для реализации проектов.
Использовать все это богатство достаточно просто, если делать что-то на уровне «моргания светодиодов» и «посылки пинга», но когда необходимо сделать что-то посложнее в системе неожиданно появляются, так сказать «демоны», «изгнать» которых можно только «куря» доки и «исследуя» логи :).
Вот для исследования логов и может пригодиться SmartPipe.
SmartPipe может перехватывать, анализировать и обрабатывать строки лога, что позволяет:
  • Изменять цвет/фон строки для выделения важных строк лога.
  • Добавлять дамп времени к строке.
  • Добавлять подстроки в строку.
  • Пропускать ненужные при анализе строки.
Таким образом отформатировав приходящие от устройства логи можно значительно упростить их анализ а значить облегчить поиск багов и изгнание других «демонов» :).
smartpipe diag

35 комментариев

avatar
Мягко говоря не вижу смысла… Гораздо удобнее разобрать логи на ПК… Там хоть форматируй, хоть в эксель закидывай…
Может я чего-то не понял? Я обычно быстренько набрасывал программку на C# которая визуализировала мне все данные со стрелочками, графиками и прочими свистоперделками… А еще есть LabView (я просто его не знаю)…
avatar
Мне кажется мы говорим о разных сценариях отладки. Ваш сценарий применим, когда устройство уже «в поле» так сказать и вам просто надо исследовать лог который пользователь прислал вам на почту. Я же говорю о сценарии поиска бага, когда вам необходимо включать разные уровни логирования, добавлять свои логи, комментировать куски кода и тд. и так большое количество раз… в этом случаем постоянно сохранять лог в файл и натравливать на него grep/sed/excel достаточно утомительно по сравнению скажем с подсветкой всех логов которые вы добавили на последней итерации отладки… конечно это просто вопрос удобства и привычки… но когда что-то пресобираешь 20+ раз хочется как то упростить технологию
avatar
Что-то как-то не прочувствовал тему
avatar
Честно говоря, не очень понял что такое «не прочувствовал»… Могу порекомендовать только, включить логи при сборке ядра Linux / DirectFB или чего-то подобного и оценить «глубину» проблемы анализа этого лога и поиска в нем информации.
avatar
Дак, можно этот лог направить в файлик и после этого смотреть разные дебаг левелы. А если дебаг левел задать сразу, то ядро придется пересобирать просто чтобы посмотреть лог с разными левелами или разной подсветкой.

Единственный плюс — уменьшение времени передачи данных. Передача по UARTу действительно, периодически тормозит. Беда в том, что тормоз в деле анализа логов не принимающая сторона, а передающая.

Вообщем, смысла мало вижу :(
avatar
Ну дебаг левлел обычно дает очень много информации не нужной тебе в данный момент, а отключить все ненужное это еще то «квест» (хотя бы потому что ты сначала должен знать что не нужно ;)). Заганять это все в файл и натравливать grep/sed, писать регулярные выражения и тд. — тоже очень утомително, если приходиться пересобирать soft много раз… а если ты фиксиш баг — то полюбому прийдется.
Например баг: в один из пяти раз куда-то не приходит сообщение.
Конечно тебе повезет если в функции отправки этого сообщение стоит просто rand… но в реальной жизни тебе прийдется анализировать очень большой лог чтоб уловить связи в soft-e и поймеш ты эти связи далеко не сразу а с так 20+ итерации. И работать через файл/grep/sed быстро устанешь (конечно если ты не гуру bash/grep/sed/регулярных выражений и прочих esc-последовательностей).
Можно провести аналогию с операцией по «закрутке шрупа». Для «закрутке шрупа» можно использовать:
ответку (в нашем случае анализировать лог глазами);
дрель (файл/grep/sed);
или специальное устройство — шуруповерт
Первые два способа вполне работоспособны — ведь закручивали же люди шурупы до шуруповертов :)
avatar
Давайте рассмотрим вопрос реализации:

Вы таки хотите сказать, что разработать прошивку для микроконтроллера, которая будет поддерживать загрузку набора правил фильтрации логов, программу для создания конфига, содержащего набор правил фильтрамии логов, и утилиты, которая будет загружать результат работы программы по созданию конфига, содержащего набор правил по фильтрации логов будет ПРОЩЕ, чем воспользоваться grep/sed?
я и коллеги выше не можем понять именно этого момента.

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

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

троллейбус-буханка.jpg.to/
avatar
Я здесь предлагаю рассмотреть вопрос использования SmartPipe как инструмента.
Вопрос реализации (прошивка микроконтроллера и далее по тексту) я уже решил.
Мне кажеться что написать правила для SmartPipe будет проще чем писать реглуярные выражения в grep/sed… да grep/sed намного мощнее и универсальнее но это не всегда надо ИМХО.
Ну «абсолютно любой мыслемой и немыслемой ситуации» конечно в правилах для SmartPipe описать нельзя — но наиболее полезные случаю для анализа логов я пытаюсь охватить, что не будет — можно будет добавить в последствии.
По поводу «открытости» — вы же используете логический анализатор soft для которого придумали американцы а железку спаяли китайцы… и вас обычно не сильно беспокоит что они могут терять критические импульсы… например. Не вижу разницы с SmartPipe.
avatar
«На что только не идут люди, лишь бы не учить регулярные выражения».

А что касается логических анализаторов и прочих измерительных приборов — их показания должны соответствовать действительности. И все эти измерения проводятся у меня перед глазами. Более того, основная часть используемого мной оборудования внесена в госреестр средств измерений и только поэтому я могу им доверять, как измерительным приборам.
И раз уж вы коснулись темы потери критических импульсов, то у измерительных приборов есть характеристика достоверности результатов измерений — абсолютная или относительная погрешность, указанная в паспорте на прибор. Она может стремиться к нулю, но она НЕ нулевая. т.е. я всегда знаю, с какой достоверностью мне относиться к результатам измерений. Эта наука называется Метрология.

Какую погрешность фильтрации вы можете гарантировать пользователям?
Например UART может внезапно сожрать половину ключевого слова, по которому происходит фильтрация и все, сообщение не попало в лог. При нестабильном тактовом генераторе и некорректной настройке UART это возможно.

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

Лучше добавьте в ваше устройство SD-карту, поддержку записи лога с устройства на эту карту автономно — с питанием от исследуемого устройства, а со стороны USB обеспечьте возможность чтения этой SD-карты, желательно в виде внешнего накопителя.
Такое устройство будет полезно, в том числе и мне, когда к автономному устройству можно подключить такой самописец на пару тройку суток, а потом на компьютере обработать данные.
avatar
Пока у меня нет таких далеко идущих планов, как регистрация моего устройства в госреестре поэтому я не думал о измерении и испытании надежности работы soft-а и hard-а.

Сейчас в SmartPipe предусмотренна возможность выдачи логов от устройства по двум каналам один с фильтрацией так сказать для анализа и второй «на прямую» для архива и уточнения.

Про устройство с SD картой. Вы предлагаете сделать устройство другого типа это устройство-логер для автоматческого сбора логов, которому фильтрация логов действительно не очень нужна, так как предполагается, что вы их будете анализировать целиком для поиска любой особености или бага. А вот если вы там увидете баг, то вы его запостите на разработчика… вот для фикса этого конкретного бага разработчику и может пригодиться SmartPipe, для выделения нужных логов при пересбрках soft-а при попытки воспроизвести и зафиксить баг.
avatar
Где взять такой корпус, как на первой картинке???
avatar
Такой вопрос возник вот почему: я заказывал себе китайский st-link в очень похожем корпусе и переделал его в программатор Versaloon (прошивает кучу контроллеров + spi,uart,i2c,pwm,gpio конвертер). Хочу ещё несколько штук собрать, но подходящий корпус найти не могу, а этот идеален как по габаритам, так и по интерфейсам (miniUSB + IDC-10) даже дорабатывать напильником не надо.
avatar
Я заказывал такой корпус в Китае szomk.en.alibaba.com/product/949648440-218413719/custom_electronic_enclosure.html

Вот дорабатывать напильником все таки прийдется… по крайней мере они мне прислали корпус без вырезов, хотя контур для mini-usb явно просматривается.

Собираюсь договориться чтоб они сделали вырезы когда буду новую партию заказывать.
avatar
Хм, а если будете заказывать такие доработанные, можно будет штук 10 купить? Сколько примерно выйдет за корпус?
PS: в китайском st-linke в крышке ещё есть 2 отверстия под обычные выводные светодиоды. (вот)
avatar
Без проблем, но когда это будет я не знаю… заказ с доработкой должен быть крупным, так что пока до этого дойдет пока не знаю. Стоили мне эти корпуса 1$. Позиции для светодиодов на корпусах видны, но так как в моей конструкции они не предусмотрены то делать их не буду.
avatar
Нашёл на алиэкспрессе продавца с похожим корпусом, описал, какой именно вариант мне нужен, и уже на следующий день они выставили необходимый товар в магазине аж в 4 вариантах (10,20,50 и 100 штук в одном заказе) в чёрном и сером цветах, на выбор. Попробуйте списаться с этим продавцом, судя по фото у них есть нужный Вам корпус (без отверстий для светодиодов), дополнительную плату за добавление в магазин нового товара не взяли, итого с доставкой вышло 63р за корпус (для 20штук).
avatar
O! Большое спасибо! Как раз то что мне нужно.
avatar
Кончились ст-линки? Не переживайте, еще остались усб-бластеры.
avatar
Согласен с radiolok'ом — без открытых исходников есть место тревоге чтоб фильтр там лишнего не пофильтровал, и в серьезном дебаге будет желание перепроверить все с сырым логом.
Судя по планам коммерциализации, проект не будет открытым?
avatar
SmartPipe поддерживает «выдачу» логов по двум каналам (если надо) один фильтрованный, один нет. К тому же все зависит от правил, которые пользователь задал. Например если вы задали только покрасить самые интересные для вас логи в красный цвет, то вы получите абсолютно полный лог просто некоторые строки будут подкрашены.

Да, пока проект планируется с закрытым исходным кодом… но возможно, что это обычные предрассудки и в конце концов коммерциализация будет производиться по схеме BusPirate например.

В любом случае «тревога по поводу фильтрации» скорее проблема доверия — вряд ли вы будете копаться в 300K+ байтах кода если он будет открыт. Плюс(а при «раскрученном» проекте скорее минус), когда код закрыт — я за него отвечаю, когда открыт уже нет.
avatar
Мысль хорошая. Я даже задумался чтобы запилить такой себе. А вот комерциализировать — ну не знааю. Очевидно, что основная ЦА — разработчики и не новички к тому же. А раз так, при необходимости каждый себе может такой сваять. Даже если с USB и композитным устройством раньше не работал, всегда можно взять у х893 его DualCDC и дописать логику раскраски логов. И даже если нет под рукой отладки с F103, можно просто перешить любую отладку от стм серии дискавери (где стлинк2 и выведен уарт) или нуклео.
avatar
Да, я согласен, что основной «контингент» для этого устройства «разработчики+». И обычно такие разработчики делают что-то свое и не хотят отвлекаться на изготовление «инструментов» так сказать.

Я тоже по началу любил делать сам USB-Serial адаптеры(на FT232), Jtag-отладчики и тд. а не покупать, но когда мои амбиции выросли а проекты «подросли», мне стало не интересно этим заниматься и уже логический анализатор и нормальный JTAG-отладчик я покупал.

Я совершенно уверен, что достаточно просто сделать какую-нибудь «поделку», которая раскрашивает логи и пользоваться которой может только разработчик (так получаеться из-за того, что цель разработки — «раскрасить логи» достигнута, а довести проект до ума требует много нудной и неинтересной работы). Именно поэтому пользоваться вы ей не будете, так как это не инструмент а скорее прототип инструмента, а когда перепрошьете «дискавери» на что-то другое то и забудете зачем это надо было (у меня у самого таких «проектов» навалом).

Вообщем мне кажеться, что инструменты надо покупать, а не делать… но это конечно кому как нравиться :).
avatar
Ну, usb-serial, jtag (jlink/stlinkv2), всякие usb-бластеры с USBee совсем не показатель, т.к. китайцы их продают готовыми, да еще и в корпусе дешевле комлектующих.
И то, что это заготовка инструмента согласен лишь отчасти. Т.е. в главном — что это заготовка, согласен. Вот только это своё собственное. И поправить модификацию логов в своей программе дело буквально нескольких минут. А вспоминать где что править в любом случае придется, т.к. это устройство не первой необходимости, и не ежедневного использования, и конфигуратор через консоль. А значит подсмотреть в доки придется в любом случае, т.к. настройка все таки чуточку ;) сложнее того же USBee. Да и в многочисленных дискавери лично я не путаюсь, а у меня они есть и родные, и с версалуном, и с нуклео, и даже просто перешитая когда экспериментировал.
Ну и о цене вопроса, хоть вы и не озвучивали. Ценник явно будет сильно больше пятерки-десятки баксов. Правильно? А уже за двадцатку лично я предпочту за вечер допилить тот же самый DualCDC до базового состояния и потом при необходимости просто править правила.
Вообщем мне кажеться, что инструменты надо покупать, а не делать… но это конечно кому как нравиться :).
Я не удивлен. :D
Смотря какой инструмент и смотря какой ценник. Точнее насколько оправдан. А еще точнее сколько стоит час моей работы, насколько оно по фану самому запилить и насколько сильно поджимают сроки.
avatar
Ну и попутный вопрос. Если КДПВ прототипа — зачем такой многоногий камень? Неужели в 48-выводном корпусе нельзя было поставить?
avatar
Мне надо было три функции: по больше частота, ОЗУ > 64Кб, Flash > 512КБ. Камень с такими характеристиками да еще и 48-и ногий «в пределах моей досягаемости» я не нашел.
avatar
У вас под это дело >512KB кода? Боюсь даже спросить на чем это писалось.
avatar
Писалось как обычно на С. Но вы конечно понимаете что кроме основного кода надо еще где-то правила хранить, код загрузчика для обновления ПО плюс в устройстве огранизован USB диск для help-а, драйверов и тд. Так что 512КВ еще хватает но уже не так и много.
avatar
Ну если еще и
в устройстве огранизован USB диск для help-а, драйверов и тд.
тогда да,
512КВ еще хватает но уже не так и много.
Но как по мне это уже совсем лишнее.
avatar
Ну может и лишнее, что-то я тоже стал в диске сомневаться… с другой стороны его всегда можно отключить а так help, драйвера всегда подрукой не надо в инете искать…
avatar
Но это лишние деньги. Причем необоснованно потраченные. Как по мне фишечка прикольная, но не более того. Если так хочется большую флешку, и прикидываться флешкой с драйверами — уж лучше микроSD поставить. Гиговая стоит около 20 центов в первом попавшемся ларьке. Заодно можно логи туда кидать. Кста дарю идею — можно еще и автономный логгер навесить и сливать на флешку с/без фильтрации.
avatar
Учитывая что мелких быстрых контроллеров с >64Кб как-то не видно то тут на этом не сэкономиш.

Мне кажеться что SmartPipe и автономный логгер это все таки принципиально разные устройства. Логгер должен собирать ВСЕ логи и только потом на компьютере к его диску можно подключить SmartPipe для облегчения анализа этого лога. Да и входной интерфейс у логгера какой-нибудь RS-485.
avatar
103CB — 48 ног, 128К флеша, правда рамы только 20к.
Как по мне, раскрашивалка логов вполне комфортно поместится.
avatar
Ну в каком-то виде безусловно поместится, например если не подключать стандартные С библиотеки и все работу со строками и другие «вкусности» писать самому.
avatar
Да цена больше, где-то пятнадцать-двадцать баксов… меньше не позволяют маленькие объемы производства — тут до китайцев на всем далеко.

Насчет запилить самому… необязательно даже DualCDC можно просто взять пример виртуального COM- порта из ST и добавить туда фильтрацию. Но «дьявол» в мелочах… как вы будете менять правила? как хранить правила? как обрабатывать ошибки при вводе правила и работе системы? и тд… Да можно все решать перепрошивкой и изменением кода. Вот только врядли это будет удобно даже вам, для отладки сложного проекта правила надо менять очень часто и для этого каждый раз пересобирать и перепрошивать «инструмент» (вылавливая и фикся свои ошибки на ходу) очень неудобно. Польза от такокого проекта только гордость и опыт — тут я согласен это можно получить только от своего проекта. Эти бонусы SmartPipe не предоставляет :)

А есди вы преодалеете все трудности то у вас и получится свой SmartPipe, как он получился у меня… вот правда у меня он получился далеко не за вечер.

Насчет сложности настройки… да в современном мире «визуального программирования» такая проблема имеется, но как сделать проще пока не знаю.
avatar
Насчет запилить самому… необязательно даже DualCDC можно просто взять пример виртуального COM- порта из ST и добавить туда фильтрацию.
DualCDC я вспомнил просто как проект с двумя виртуальными уартами в который легко дописать фильтрацию. Зачем два — да как у вас отфильтрованный и исходный каналы.
вот правда у меня он получился далеко не за вечер.
Я «за вечер» говорил применительно к базовому варианту с захадкоженными фильтрами. Обновлять прошивку, а с ней и фильтры тоже не вижу особых проблем если предусмотреть бутлодырь скажем по Змодему. В принципе можно заливать даже просто одну функцию фильтрации, делается это несложно.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.