Это лето оказалось прямо таки адски жарким. И дело не столько в жаре, с колько в количестве дел и дедлайнов, в том числе и на моей в меру унылой работе. Так что я порядком забыл про все, включая этот унылый бложик. Однако как только напряженка немного спала, руки зачесались опять с чем-нибудь поковыряться. И атк получилось, что для моих дачных нужд мне потребовался еще один линуксовый одноплатник. Вместо того, чтобы привычно заказывать оный с алиэкспресса, я решил заглянуть в короб с пометкой «хлам» и извлек оттуда вот такую вот хреновину:
Автор: ncrmnt
тяжелая наркомания: Сборка VPI расширения и запуск Verilog тестов при помощи cmake/ctest
Недавно потребовалось для нужд кровавой отладки сделать свое VPI расширение для verilog HDL и встал вопрос как интегрировать это добро с какой-нибудь нормальной системой сборки. К сожалению, в плане инструментов для сборки, отладки и тестирование люди проектирующие СБИС живут если не в каменном веке, то в своем особом мирке, со своей особой атмосферой. Опенсурсный iverilog в этом плане ничуть не лучше коммерческих тулов, которые кладут огромный болт на многие общепринятые в мире linux практики.
Ну да хрен с ними. Надо решать как с этим жить. В этой заметке я постараюсь пройтись по основным нюансам написания CMakeLists.txt для сборки vpi расширения и его unit-тестирования.
SkyForge: Создаем корневую ФС Debian на основе конфигурации в стиле Dockerfile
Для кучи проектов, как для работы, так и для дома я использую Debian. Однако, когда работаешь со встраиваемыми системами (напр. ARM СнК) под рукой нет установочного диста debian… Да и вообще привода для чтения дисков. Корневая ФС формируется вручную, отдельно собирается вручную ядро. Впрочем, как обычно.
Процесс не особенно быстрый, если следовать официальной документации на debootstrap и multistrap, а новичкам просто взрывает мозг. (К сожалению, я уже тут не нуб зеленый, старею)
Самое неприятное, что мало просто сформировать корневую ФС, надо ее еще настроить более или менее вменяемым способом, напр. выставить пароль по умолчанию, сгенерировать ssh ключи, прописать fstab… В общем, обычный набор действий.
В большом Ынтерпрайзе ™ существуют такие инструменты, как vagrant который создает базовую виртуальную машину заданной конфигурации и chef или puppet, которые собственно ее настраивают. Хотя нам никто не запрещает использовать chef или chef-solo на armhf плате (а почему бы и нет?) нам все равно нужен какой-то базовый образ, который мы будем в дальнейшем настраивать, так?
CMake + atom + .clang_complete
С некоторый пор я переехал с emacs’а на atom, который выглядел как более современная замена. Что для меня было важным — у него очень хорошая работа с CMake и автодополнение для оного. Вскоре ко всему этому делу я прикрутил lint и autocomplete через clang. И то и другое мне понравилось, но хотело актуального .clang_autocomplete в корне проекта. Однако, если проект получает от системы сборки кучу дефайнов, то управлять этим файликом руками становится больно и неприятно. Выход — генерить его на лету. Вот мой костыль для CMake:
message(STATUS "Generarating ${CMAKE_SOURCE_DIR}/.clang_complete") get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES) file(WRITE ${CMAKE_SOURCE_DIR}/.clang_complete "") foreach(dir ${dirs}) file(APPEND ${CMAKE_SOURCE_DIR}/.clang_complete "-I${dir}\n") endforeach() string(REPLACE "'" "" CMAKE_C_FLAGS_SPLIT ${CMAKE_C_FLAGS}) string(REPLACE " " ";" CMAKE_C_FLAGS_SPLIT ${CMAKE_C_FLAGS_SPLIT}) foreach(flag ${CMAKE_C_FLAGS_SPLIT}) file(APPEND ${CMAKE_SOURCE_DIR}/.clang_complete "${flag}\n") endforeach() |
Очевидно, если мы используем C++ в проекте, то и обрабатывать схожим образом надо переменную CMAKE_CXX_FLAGS. У этого кода есть очевидное ограничение: Если мы передаем через -D дефайны с несколькими словами — нас ждет облом (напр. -DRELEASE_CODENAME=»Black Burned Cookies»)
Jenkins + armhf + deb
Эта заметка о том, как я разворачивал CI для около-железячных софтовых проектов и каких проблем я огреб с этим безобразием, пока добился рабочего (хоть и при помощи лома и мата) решения. Возможно даже первая из серии.
Начнем с проблемы. Совсем просто, на случай если это читают дети. У нас есть несколько software проектов. Нам надо периодически делать следующие рутинные действия:
- Собрать проект и проверить, что он вообще собирается где-то, кроме ноутбука разработчика
- Прогнать unit-test’ы (Ведь мы же не ленимся писать unit-test’ы, не так ли?)
- Собрать deb-пакеты, и загрузить куда-нибудь, чтобы пользователи были счастливы
Казалось бы, все давно отлажено, есть OpenSuse Build Service / Open Build Service, Travis, Jenkins. Есть такие страшные штуки как sbuild, schroot и целый выводок утилит от debian-разрабов и просто классных людей, какие могут проблемы? Как всегда, дьявол в деталях. Сразу предупреждаю — текста будет много.
Больше гламура в текстолите: Базовая платка для Android TV стиков
Что-то я как-то давно не постил сюда ничего гиканутого, надо срочно исправляться. Впрочем, у меня был важный повод — запиливал базовую платку для Android TV стиков, которая приведена на картинке ниже. А под катом можно вычитать целую кучу вкусных подробностей. (далее…)
Сказка о траферетах
Когда паяешь что-то штучное, обычно о трафарете и прочей фигне не думаешь, но когда запустил свою какую-то примочку в полукустарную серию и перед тобой стоит задача оперативно спаять штук 15 однотипных плат ощущаешь себя как-то демотивировано, словно жизнь не удалась, ты не инженегр, а какой-то китаец-монтажник где-то в деревне ХреньВпень.
Doxygen && gh-pages
У гитхаба есть классная возможность прикреплять к репозиториям html странички. И если конструктор сайтов в стиле yandex.narod’а времен начала нулевых интересует мало кого, то вот постить туда html сгенеренный doxygen’ом — милое дело.
Другое дело, что хранить историю в ветке gh-pages нельзя, иначе она будет распухать c каждым коммитом в основную репу. Да и не нужно ее фиксировать. Потому правильным тут будет:
- Создавать чистый бранч, куда коммитить сгенеренные доки
- Делать push с —force, чтобы при этом выкидывать прошлую историю для бранча gh-pages
- Хочется делать это прямо из дерева исходников, не переключаясь на бранч с документацией
- Потенциально интегрировать это с CI/Jenkins: Прошел билд, юнит-тесты и статический анализ — бампаем документацию
Делается проще, чем звучит. Ниже, чтобы не забыть, мой сниплет для этого безобразия:
doxygen: -rm -Rfv doxygen/ ( cat Doxyfile ; echo "PROJECT_NUMBER=0.1" ) | doxygen cd doxygen/html;\ rm -Rfv .git;\ git init .; git checkout --orphan gh-pages;\ git add *;\ git commit -m "documentation-for-gh-pages";\ git remote add origin git@github.com:MY_GITHUB_USERNAME/MY_GITHUB_PROJECT.git;\ git push -u -f origin gh-pages |
D-Link DNS-327L NAS теперь и в мейнлайне
Да, как-то так. Несмотря на адов треш и угар со временем, я все же пропихнул оба патча в мейнлайн, так что начиная с 4.1 можно будет просто скомпилить ядро с kernel.org и запустить на вышеупомянутом железе (Ура!)
Только не забываем вырубать режим ‘deep idle’ из режимов cpuidle. Он вызывает зависания раз в несколько часов, и скорее это проблема либо в самом железе (маловероятно) либо в собранном дибилинками загрузчике (Мне до сих пор лень попробовать и запилить туда мейнлайн убут)
echo 1 > /sys/devices/system/cpu/cpu0/cpuidle/state1/disable |
//Рыба для «ачивки» честно стыбзена тут
Псс, парень, не хочешь немного Б\У микросхем?
Как много чудных открытий ждет инженера, который для своих хобби-нужд хочет сэкономить и заказывает в китае. Вот и еще одна сказка на тему на кой человеку внимательность. Надо было мне для прототипа проекта взять RTC, и решил я взять DS1307. Заказывал как обычно у китаез. И в очередной раз приехал треш, ад, и угар.
Нет, на этот раз они не написали на стикере с таможенной декларацией содержимого «sex toy — 3$», как у меня было с пачкой симисторов на прошлой неделе (Или, быть может, я всю жизнь неправильно применял симисторы? Надо было запросить инструкцию!)
В общем, приехали мне Б\У-шные микросхемы. Упакованы в трубочку, как положено, от флюса отмыты, выдают только шарики припоя на лапках. Не распаковвывая трубки постарался сделать пару фоток этого треша. Изиняюсь за качесто фоток, но усб микроскоп я свой убрал куда-то ну слишком далеко.