Ставим ядро
Итак для начала нам надо установить ядро Zephyr. Для этого создаём папку и клонируем туда код с GitHub.
1 | $ mkdir zephyr |
Потом переходим в скачанную папку с зефиром и ставим все зависимости. Для этого у нас должен быть установлен python версии 3. У меня оно уже стояло. На установке python останавливаться не буду.
1 | $ cd zephyr |
Ставим SDK
SDK скачивается в виде самораспаковывающегося скрипта. В общем-то тут тоже всё довольно тривиально — качаем и запускаем. Оно спросит куда установить — я не стал спорить и дал ему установиться куда оно просило — в /opt/zephyr-sdk
1 | $ wget https://github.com/zephyrproject-rtos/meta-zephyr-sdk/releases/download/0.9.2/zephyr-sdk-0.9.2-setup.run |
Ну и для полного счастья нужно задать пару переменных окружения в конфиг зефира в домашней папке пользователя.
1 | $ cat <<EOF > ~/.zephyrrc |
Так-же наду куда-то в автозагрузку запихать скрипт из папки с ядром zephyr-env.sh
. Он пропишет ещё какие-то свои пути и переменные. Я пока глубоко не рыл, но вроде там просто путь к файлам ядра указывается.
На этом всё. Можно приступать к сборке.
Пробуем собрать проект
Запускаю zephyr-env.sh
— только ради переменной $ZEPHYR_BASE
. Ну и переходим в папку с кодом для beacon-а.
1 | $ source zephyr-env.sh |
Теперь нужно создать папку для своего проекта. Это фактически папка для сборки под конкретную железку. Для каждой железки под которую хочется собрать код нужно создавать свою. Я собираю код под nrf51822
поэтому папку проекта обозвал как nrf51
1 | $ mkdir -p build/nrf51 && cd build/nrf51 |
По умолчанию сборка зефирных проектов выполняется с помощью cmake
и ninja
. CMake в этом случае только генерирует файлы для сборки, а ninja уже занимается сборкой, прошивкой и прочей грязной работой. Вообще можно организовать сборку и через make и в доках у зефира были описаны ещё варианты сборки, но я пока буду использовать то, что рекомендуют авторы проекта т. к. ожидаю, что те средства которые они используют и будут наиболее сьабильно работать.
Итак генерируем файлы для сборки — указываем, что сборка будет проводиться с помощью ninja и указываем конфигурацию используемой платы. В моём случае тестирую я только beacon и распиновка мне не важна, поэтому взял наугад какую-то плату под nrf51 — nrf51_pca10028
. Вот тут про неё поподробнее. Запускаем генерацию.
1 | $ cmake -GNinja -DBOARD=nrf51_pca10028 ../.. |
Ну и запускаем сборку — просто стартуем ninja.
1 | $ ninja |
Вроде мелочь, а приятно — ninja в итоге выдал некую статистическую сводку по использованию ресурсов контроллера. Кому как, а я люблю такие приятные мелочи.
Ну и та-дааам — заливаю прошивку в устройство. Получилось со 2-го раза. Для работы с чипами nrf ninja пытается использовать утилиту nrfjprog
, которая на самом деле ни что иное как SEGGER Jlink, только завёрнутый в их программу со своими ключами — ну типа всё заточено под nrf чипы. У меня она была просто скачана в отдельной папке — пришлось установить готовый пакет под мою OS. Как вариант можно было просто путь к nrfjprog прописать в системные пути. Но тем не менее дальше всё прошло абсолютно гладко.
1 | $ ninja flash |
После этого просканировал с телефона beacon-ы и обнаружил вот это:
Более того. Андроид на телефоне сам нашёл bacon и запустил какое-то приложение Nearby, которое сказало мне что в радиусе 0,13 метров от меня есть ссылка www.zephyrproject.org
.
Итоги и первые впечатления
В общем могу сказать, что Zephyr офигенен. Не хочу перегружать статью подробностями, но сам код маяка по сравнению с Mynewt гораздо понятнее и лаконичнее. В нём только именно то, что нужно без всякой лишней ерунды. И это при том, что в итоге получившийся маяк вышел гораздо функциональнее того, что удалось получить с Mynewt. Он сходу подхватился андроидом, в то время как Mynewt-оновский был виден только специальной программой.
Ну и опять же сравнивая с Mynewt — сборка примера прошла вообще без проблем. Ни одного мало-мальски значимого косяка с запуском кода или со сборкой. В общем Zephyr на голову выше Mynewt — совершенно другой уровень.
Буду изучать дальше. На самом деле доки я уже перечитал — там много вкусного и есть, что попробовать.
Источники
- https://www.youtube.com/watch? v=YNYamQ2qWE0
- https://www.youtube.com/watch? v=H-rUGKCln0A
- https://www.youtube.com/watch? v=1NwNgY-Zs58
- https://www.youtube.com/watch? v=iWhvK7DXv70
- http://docs.zephyrproject.org/boards/arm/nrf51_pca10028/doc/nrf51_pca10028.html
- http://docs.zephyrproject.org/getting_started/getting_started.html
Комментарии