пятница, 2 августа 2013 г.

Небыстрый путь к STM32

Почитав в интернете статьи про дешевизну и богатые возможности STM32, я решил, что хочу "пощупать" эти чудесные и недорогие контроллеры на практике. Для начала был прикуплен программатор J-Link, и собрана простенькая схема, только питание и разъём программирования (JTAG).

Тот самый китайский J-link.

Один из вариантов минимальной схемы на отладочной плате.


Однако, схема работать не стала. Подавляющее большинство статей в интернете про самоделки на ST сводилось к миганию светодиодиком на готовой макетной плате типа Discovery, и на вопрос о том, почему не работает самопал, ответа они не давали.
Один из вариантов после многочисленных перепаек.

Ещё одна попытка.


Далее я распаял ещё несколько плат, но уже с использованием паяльной станции, чтобы избежать перегрева кристалла - но и они работать не стали.


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

Discovery, содержащий на борту SWD-программатор.

Путём проб и ошибок я выяснил, что для работы STM32 необходимо подключение питания не только на VCC и на VDD, но и на AVCC и AVDD, даже если Вы не планируете использовать аналоговые устройства (ЦАП, АЦП, компараторы). Без подачи питания на аналоговую часть - микросхема работать не будет. Кроме питания для запуска ничего не требуется, внешние кварцы не нужны. На внутреннем генераторе микросхема неплохо разгоняется, и при заявленых 24 МГц контроллер стабильно работает на 56МГц, и при этом никакого заметного нагрева микросхемы нет.

Заработало!

Теперь, по мере возможностей по времени, я буду продолжать эксперименты, и постепенно делать систему управления светом в доме на STM32.

среда, 10 июля 2013 г.

Собираем ядро и настраиваем звук в Gentoo на Raspberry Pi

В этой заметке я обобщу свой длительный опыт "борьбы" с пересборкой ядра Gentoo Linux на Raspberry Pi.

Итак, вы хотите пересобрать ядро, например для того, чтобы заработал звук. Приступим!

1) Вместе с образом Gentoo на Pi идут тексты старого (3.2.*) ядра, они лежат в /opt/raspberrypi/, и имеют размер порядка 1Гб. Для экономии места на SD-карте, целесообразно удалить их.

2) Собирать ядро будем через genkernel, вытягивать тексты - через git (обычное, vanilla-ядро работать НЕ будет, нам нужно ядро, содержащее в себе патчи для raspberry pi). Устанавливаем необходимые инструменты:

root # emerge --ask git genkernel

3)После того, как git и genkernel установились, скачиваем тексты ядра, я предлагаю скачать прямо в /usr/src:

root # cd /usr/src
root # 
git clone --depth 1 git://github.com/raspberrypi/linux.git

После успешного выполнения этих команд, получаем в /usr/src/linux исходные тексты ядра, которые подойдут для нашего Pi. Осталось собрать!

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

root # genkernel --kernel-config=/proc/config.gz kernel

Эта команда будет выполняться порядка нескольких часов, было бы разумно оставить её работать на ночь. В результате её работы мы получаем в /boot следующее:


Как можно видеть, появились файлы kernel-genkernel-arm-3.6.11+, initramfs-genkernel-arm-3.6.11+ и System.map-genkernel-arm-3.6.11+ (версия может отличаться, зависит от того, что было скачано из git) - это и есть новое ядро. Осталось добавить его в настройки загрузки.
Настройки загрузки лежат в /boot/config.txt, нам нужно в конец файла дописать следующую строку:


kernel=kernel-genkernel-arm-3.6.11+
(там может вообще не быть строки kernel=..., это нормально, просто дописываем строку с указанием на новое ядро в конец файла)

Сделать это можно или текстовым редактором (nano -w), или командой:

root # echo "kernel=kernel-genkernel-arm-3.6.11+" >> /boot/config.txt

Первый шаг сделан, после этого мы уже имеем обновлённое ядро. Перезагружаемся:

root # reboot

После перезагрузки факт обновления ядра можно увидеть через команду uname -a

5)Конфигурируем новое ядро под себя.
Конфигурирование ядра уже проходит несколько проще, чем обновление. Нужна всего одна команда:

root # genkernel --kernel-config=/proc/config.gz kernel --menuconfig all

После выхода из menuconfig начнётся сборка и установка ядра, ничего нигде прописывать больше не нужно.

Вот пара моментов, на которые стоит обратить внимание при настройке ядра:

1) Нужно включить поддержку сжатой initram fs, иначе при сборке появится ошибка. Для включения идём в General Setup, и включем поддержку, как на картинке:


2) Как показывает практика, лучше вносить изменения в конфигурацию по небольшому числу пунктов, чем сразу включить все требуемые опции. У меня при этом вываливалась ошибка компиляции, и приходилось вспоминать по новой, что же хотелось включить. Если же добавлять опции по одной - это займёт больше времени, но это как-то удобнее.


После настройки ядра можно попробовать включить звук. Для этого нам нужно установить alsa-utils:

root # emerge alsa-utils

После установки, пробуем подключить модуль, отвечающий за звук:

root # modprobe snd_bcm2835

Для проверки работы alsa запустим alsa-mixer:

root # alsamixer

Должна быть примерно такая картинка:


Если оно так - УРА, звук заработал! Если вылезло сообщение об ошибке - скорее всего, не собран модуль ядра, запускаем конфигурацию, и внимательно исследуем секцию device drivers->sound devices
Звуковая система у Pi имеет несколько выходов (HDMI, джек 3.5мм), и возможна ситуация, когда плеер музыку играет, но звука нет - это может быть из-за того, что выбран не тот выход, который есть по факту. Выбор выхода производится так:

Автоматический выбор выхода:
root # amixer cset numid=3 0

Ручной выбор - выход 3.5мм:
root # amixer cset numid=3 1

Ручной выбор - выход HDMI:
root # amixer cset numid=3 2

Для того, чтобы каждый раз не набирать команды руками - стоит создать в /etc/local.d файлик с именем типа 02_local.start, сменить ему права на 755 (командой chmod 755 /etc/local.d/02_local.start), и вписать в него те команды, которые должны быть выполнены при запуске системы.

понедельник, 13 мая 2013 г.

Использование Google Drive в Linux

Подключаем Google Drive в Linux на манер Dropbox.

Google предлагает для своего диска (Google drive) офицальные клиенты под Windows, iOS, Android, но не для Linux. Однако, есть неофицальный клиент grive, c помощью которого можно настроить синхронизацию какой-либо папки в системе с google drive - и получить некое подобие dropbox, только с большим количеством свободного места.

понедельник, 15 апреля 2013 г.

Использование ZRAM в Gentoo Linux

Linux обладает одной интересной возможностью - возможностью создания в части оперативной памяти сжатой области, в которой возможно расположить раздел подкачки (swap). Благодаря сжатию этой области, в том же объёме оперативной памяти можно разместить больше (в 3-8 раз) данных, правда ценой некоторой потери скорости (сжатие требует процессорного времени), однако потеря скорости практически незаметна в сравнении с потерей скорости при подкачке с физического диска. 

понедельник, 18 марта 2013 г.

Переход от Mysql к MariaDB в Gentoo


Быстро и просто переходим от использования СУБД Mysql на использование MariaDB в Gentoo.

понедельник, 11 февраля 2013 г.

Из глубин FIDO - сказка про Йожа

В глубинах FIDO'шных архивов была почти случайно найдена вот такая штука:
(осторожно, внутри много специфической кащенитской лексики)

*СКАЗКА О ЦАРЕ ЙОЖЕ И ЦАРЕВИЧЕ ЙОЖОHКЪЕ*