Skip to content

FreeBSD драйвер для приёмника кодов с пульта управления 433МГц (или 315 МГц)

FreeBSD kernel driver for gpio based remote control codes receiver. Я рад представить свой новый FreeBSD драйвер для радиомодуля MX-RM-5V. Хочу заострить внимание, что это приёмник радио сигнала - моя задача была именно в получении кода нажатой кнопки с пульта управления и выполнения соответствующей этому коду задачи. Драйвер, как раз, и занимается получением и декодированием радио импульсов до того момента, пока не сочтёт, что получилось что-то похожее на RC-код. Поиском соответствующей задачи и её выполнением будет заниматься отдельный сервис (aka daemon), который большую часть времени проводит в ожидании события kevent (или poll) от драйвера. Получение данного события для демона означает, что у драйвера для него есть новый код, который можно считать непосредственно с символьного устройства драйвера или с помощью вызова ioctl(). В моём случае, пара драйвер и демон, служит для ручного включения и выключения света и аэрации аквариума, которые в обычном режиме управляются по расписанию моим OrangePI Zero. "Апельсинка" скрыта от посторонних глаз за аквариумом, а для ручного управления используется 4х-кнопочный пульт rf-433МГц от китайских настенных выключателей "miniTiger", закреплённый в распечатанном на 3D-принтере держателе.
Продолжить чтение "FreeBSD драйвер для приёмника кодов с пульта управления 433МГц (или 315 МГц)"

Миграция загрузки FreeBSD с BIOS на UEFI

После замены материнской платы на домашнем FreeBSD сервере с ASRock j1800m на q1900m, неожиданно (для меня, по крайней мере), сервер перестал загружаться в UEFI режиме: большие буквы на экране, разрешение 640x480, смена разрешения посреди загрузки, пустые поля между строками и прочее. Он не перестал загружаться совсем, благо я при установке запасся обоими разделами и efi, и freebsd-boot, и сервер автоматически перешёл на загрузку в режиме BIOS. В UEFI BIOS переключиться на вариант загрузки UEFI с HDD более невозможно, т.к. он отсутствует, утилита efibootmgr не запускается, в Интернете - статьи о похожих проблемах пятилетней давности и предлагаемых решениях перенести ядро с модулями со ZFS на efi раздел. У Вас что-то похожее? Я полагаю, Вам будет интересно прочитать эту статью.

Продолжить чтение "Миграция загрузки FreeBSD с BIOS на UEFI"

И снова про tm1637 на FreeBSD

tm1637 4-digit 7-segment displayСегодня снова речь пойдёт про недрогой 7 сегментный дисплей tm1637, пригодный для отображения 4х цифр и двоеточия, характерного для электронных часов. Особенность дисплея в том, что он не следует стандарту i2c, хотя подключение его к GPIO шине и протокол передачи данных по ней очень похож.
Несмотря на то, что я уже написал библиотеку для tm1637 на FreeBSD и в целом она меня вполне устраивает (два года на этом дисплее моя "малинка" показывала время), отчасти из-за некоей обиды, что такое простое устройство для простого общения с ним требует весьма непростых усилий, а отчасти из-за желания попробовать свои силы, я решил написать простенький драйвер для символьного устройства, на которое можно было бы просто отправить строку цифр.
Теперь же, с помощью этого драйвера, отображение на этом дисплее возможно и из PHP, и из Python, и, даже, из bash с помощью команды echo.

Продолжить чтение "И снова про tm1637 на FreeBSD"

FreeBSD на armv7. Подключение датчиков dht11/dht22 и ds18b20

АквариумИдея подключить термометр к arm-платформе, да ещё и под управлением ОС FreeBSD появилась у меня в процессе автоматизации управления аквариумом. Не буду углубляться в причины выбора FreeBSD, тогда как выбор платформы мне видится очевидным большинству (невысокая стоимость, удобство разработки, привычное ПО, многообразие доступных датчиков, да и моду на SoC следует упомянуть). Собрав воедино Orange PI Zero, 4-хканальное реле на 250в и четыре розетки, написав ПО на python для управления ими по 7-дневному расписанию и визуализировав управляемые события с помощью веб-связки nginx + php-fpm я с удивлением осознал "... что это хорошо" (копирайт не указываю). Захотелось добавить рюшечек и цветочков. Отображение температуры воды в банке стало одной из таких рюшечек. Беда в том, что информация о том, как подключить разнообразные устройства к ПК под FreeBSD значительно глубже закопана и найти её сложнее, чем аналогичные примеры и даже уроки по подключению устройств к Linux Armbian и Raspbian.
Продолжить чтение "FreeBSD на armv7. Подключение датчиков dht11/dht22 и ds18b20"

Температура процессора на Orange Pi Zero под FreeBSD

Внимание!!!
С версии r354736 разработчиками дополнен оверлей sun8i-h3-sid.dtso и добавлен оверлей sun8i-h3-ths.dtso. Для чипсета h2+, по-прежнему, рекомендуется исправить объявление совместимости с "allwinner,sun8i-h3" на "allwinner,sun8i-h2-plus", предварительно скопировав файлы с новыми именами. Статья утратила актуальность.


Просто не смог пройти мимо интересной информации...

Угнетающе неторопливое реализация возможностей SoC-платформ под FreeBSD стимулирует поиск крупиц информации по этой тематике в поисковых системах. Уж не помню, что я искал, но натолкнулся на обсуждение патча к дереву устройств (DT), предлагаемого FreeBSD коммитером по имени Emmanuel Vadot, для объявления устройства aw_thermal - датчика температуры для ряда процессоров семейства Allwinner. Несмотря на десяток неудачных попыток реализовать DT-оверлей, используя патчи разной достоверности от разных авторов, этот патч все-же показался интересным тем, что, вдобавок к примелькавшимся описаниям устройства aw_thermal, содержал дополнительный фрагмент кода к устройству aw_sid. Вот этот фрагмент:
CODE:
--- a/arch/arm/boot/dts/sun8i-h3.dtsi +++ b/arch/arm/boot/dts/sun8i-h3.dtsi @@ -145,6 +145,25 @@   sid: eeprom@1c14000 {   compatible = "allwinner,sun8i-h3-sid";   reg = <0x1c14000 0x400>; + + ths_calib: calib@234 { + reg = <0x234 0x2>; + }; + }; + + ths: thermal_sensor@1c25000 { + compatible = "allwinner,sun8i-h3-ths"; + reg = <0x01c25000 0x100>; + interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&ccu CLK_BUS_THS>, <&ccu CLK_THS>; + clock-names = "apb", "ths"; + resets = <&ccu RST_BUS_THS>; + reset-names = "apb"; + #thermal-sensor-cells = <0>; + status = "disabled"; + + nvmem-cells = <&ths_calib>; + nvmem-cell-names = "ths-calib";   };     mali: gpu@1c40000 {


Thanks to Emmanuel Vadot for this thread: [PATCH 2/7] ARM: dts: sun8i: h3: Add thermal sensor controller node

Продолжить чтение "Температура процессора на Orange Pi Zero под FreeBSD"

Дисплей tm1637 на FreeBSD

Всё началось с покупки нового телевизора...
С полки исчезла DVB-T2 приставка, почти ненужная, но Чемпионат по футболу смотрел именно на ней! Через пару-тройку дней, когда интерес к новым возможностям телевизора угас, я осознал, что с приставкой потерял нечто важное - часы! Простенькие электронные часы на лицевой панели приставки, самосинхронизирующиеся как-то там, всегда на виду... были... Но, вроде бы, не всё безнадёжно - рядом на полке стоит мой... эээ... мини-сервер точного времени для домашней сети - Raspberry Pi 2 c GLONASS-приёмником и под управлением FreeBSD (и кому, как не ему, знать точное время?), а в ящике стола завалялся 7-сегментный цифровой дисплей tm1637 0.36" с двумя точками как на часах и четырьмя контактами (рублей 50 за него отдал на Aliexpress.com)... Четыре проводка с F-F-контактами для соединения с "малинкой" тоже найдутся.
Посмотрим, что мы с этим можем сделать...


Продолжить чтение "Дисплей tm1637 на FreeBSD"

Скорость консоли в Raspberry Pi 2 во FreeBSD

При подключении к последовательному порту Raspberri Pi 2 на скоростях, отличных от 115200, обязательно столкнётесь с проблемами, будь то приёмник GPS или просто консоль. Мой интерес - подключить GPS-приёмник NEO-6m... Да-да, тот самый, с Aliexpress с закопчённым чипом, но реально работающий и по замечательной цене. Почему-то разработчики "Малинки" решили, что пора приучать себя и покупателей к "скоростям", и зашили 115200 как скорость консоли в DTB (Device Tree Blob). По некоторым причинам, менять скорость передачи на GPS-приёмнике, мне не подходит, значит надо изменить скорость консоли на "Малине".
Продолжить чтение "Скорость консоли в Raspberry Pi 2 во FreeBSD"

FreeBSD и device tree overlays

Хочу рассказать простыми словами, т.е., как дилетант для другого дилетанта, то, что пришлось вычитывать, додумывать и подбирать достаточно длительное время: как собрать и использовать device tree overlays на SOC компьютере в ОС FreeBSD.

Для начала о програмно-аппаратном обеспечении:

CODE:
$ uname -a FreeBSD rpi2 12.0-CURRENT FreeBSD 12.0-CURRENT #8 r328806: Sat Feb  3 08:06:35 +04 2018     root@host.domain:/usr/obj/usr/src/arm.armv7/sys/RPI2_CUSTOM  arm

Т.е., это Raspberry PI 2 с 32-разрядной архитектурой armv7 под управлением ОС FreeBSD 12.0-CURRENT ревизия r328806 с кастомным ядром, собранной на другом ПК host.domain с архитектурой amd64 с помощью кросскомпиляции (Как это сделать, худо бедно, но описано в предыдущей статье).
Дисковое пространство организовано с помощью двух разделов (msdos и ufs):
CODE:
$ mount /dev/mmcsd0s2a on / (ufs, local, noatime, soft-updates) devfs on /dev (devfs, local) /dev/mmcsd0s1 on /boot/msdos (msdosfs, local, noatime) tmpfs on /tmp (tmpfs, local) procfs on /proc (procfs, local) fdescfs on /dev/fd (fdescfs)

На разделе msdos лежат файлы, необходимые для загрузки ОС с помощью u-boot, а на ufs - собственно, сама операционная система.
Причина, по которой производились изыскания, это желание сократить связанное с добавлением дополнительных устройств внесение изменений в системный исходный код ОС, а использовать для этого "понятный и доступный" механизм по подключению оверлеев (или, плагинов) к существующему дереву устройств, в сочетании с условностями и ограничениями реализации этого "понятного и доступного" механизма во FreeBSD на текущий момент.
Итак...
Продолжить чтение "FreeBSD и device tree overlays"

Обновление FreeBSD на Raspberry Pi 2

В сети есть много руководств по созданию образа MicroSD с FreeBSD для Raspberry Pi 2. Это очень полезный опыт в плане разворачивания этой ОС из исходников, со своим ядром (Да! Там и для ARM есть что менять!). Но, для меня уже ясны пара моментов: во-первых, обновление ОС через чистый образ диска - не самая лучшая затея в плане сохранения предыдущих наработок на RPI2. Если у Вас не релизная ветка, то этот вопрос вас волнует. Во-вторых, не очевидно, но техника, используемая для создания образа диска, с небольшой коррекцией прекрасно подходит и для обновления ОС, как мы это обычно делаем на "взрослых" платформах.
Давайте определимся с некоторыми необходимыми пунктами:
  • Подразумеваем, что у Вас уже есть установленная FreeBSD на Raspberry PI 2, например, с помощью готового образа с оффициального сайта FreeBSD.org
  • Сборка мира и ядра производится кросс-компиляцией на той самой "взрослой" платформе (Она же "хост");
  • Для сборки мы будем использовать дерево исходников /usr/src на хосте. Оно же у Вас есть, правда?
  • Обновление производится на хосте на смонтированный диск RPI2 (MicroSD). Я для себя отвел папку /mnt/rpi2;
  • Для процесса инсталляции на MicroSD требуется установить порт sysutils/u-boot-rpi2;
  • Исходя из вышеупомянутых учебников по сборке образа, у нас на MicroSD два раздела: / (/dev/da0s2a) ufs2 и /boot/msdos (/dev/da0s1) msdosfs. При условии, что флешка единственная, предполагаем, что она монтируется как /dev/da0.
Приступим.

Продолжить чтение "Обновление FreeBSD на Raspberry Pi 2"

Автомонтирование флешек во FreeBSD

FreeBSD и флеш-дискХотите верьте, хотите нет, но с того далёкого 2009-го, когда вышел XFCE 4.6, а линуксоиды отменили hald, я живу без автоматического монтирования USB-флешек. На FreeBSD, конечно, если не понятно по первому предложению. Поддержку hald выпилили из XFCE, и после подключения PnP-накопителя к домашнему серверу, каждый раз заново приходилось вспоминать параметры команды mount_msdosfs, что-то там про UTF-8. Есть в этом факте что-то... постыдное, что-ли?...
Почти сразу, явно растерянные БСДишники заговорили про то, что devd ничем не хуже, чем udev, и появилось даже несколько костылей, выкованных "на коленке" и разной элегантности. Продолжить чтение "Автомонтирование флешек во FreeBSD"

Устранение задержек в World Of Tanks для XBOX 360


World of Tanks для XBOX 360Последствия вчерашнего обновления XBOX 360 и World Of Tanks были ужасны...


Предыдущее обновление World Of Tanks уже привнесло дико раздражающую задержку после выхода из боя в Ангар: секунд 20-30 невозможно ничего сделать, только смотреть на недогруженные картинки Ангара, ни переключитья на другую машину, ни посмотреть награды. Особенно это выводит из себя после досадного поражения, когда ты в возбужденном состоянии, если не сказать больше - взбешён!!!


Продолжить чтение "Устранение задержек в World Of Tanks для XBOX 360"

FreeBSD, Serendipity и UTF-8


При установке CMS Serendipity (aka s9y) столкнулся с некрасивым поведением некоторых плагинов, а именно, в плане отображения локализованных значений. Вот, например, при сконфигурированной локали UTF-8, календарь никак не хочет отображать название месяца и дней недели "по нашему".


В разделе FAQ разработчика что-то там говорится, о необходимости совпадений списков локалей s9y и операционной системы, и всё такое... Наверное, это верно для Linux, но верно ли для FreeBSD?


Продолжить чтение "FreeBSD, Serendipity и UTF-8"

Freebsd Asrock d1800m (q1900m). Звуковая карта ALS662 нет звука

Использую для домашнего сервера мат. плату Asrock d1800m c Atom'ом (извиняюсь, теперь уже Celeron'ом) на борту. Celeron, как я понимаю, в данном случае отличается от Atom только отсутствием технологии HyperThreading. ОС установлена FreeBSD 10.1. И всё бы хорошо, но долгое время не удавалось запустить звук...


Продолжить чтение "Freebsd Asrock d1800m (q1900m). Звуковая карта ALS662 нет звука"