• Дистрибутив собранный в Yocto Project

    Berserk

    Мультимедиа центр - платформой для которого является Raspberry PI базируется на версии Kodi 17.6 Версия операционной системы собрана с помощью системы сборки "Yocto Project". читать далее

    Коди в Yocto Project
  • Yocto Project

    Роутер на Raspberry PI

    Сборка маршрутизатора c "нуля" для Raspberry Pi c использованием системы сборки "Yocto Project" читать далее

    Маршрутизатор с нуля
  • Феерический хранитель экрана

    Kodi Universe

    Проект является простым плагином для Kodi. Проект показывает как можно создать очень красивый хранитель экрана целиком опираясь на работу "open source" мирового сообщества. читать далее

    Феерический Хранитель экрана
  • примеры проектов

    Raspberry Pi

    Разное → Raspberry Pi — что можно сделать на основе «малинки»?read more

    Ссылка на статью с Хабрахабра
  • Дистрибутив собранный в Yocto Project

    Berserk

    Мультимедиа центр - платформой для которого является Raspberry Pi базируется на версии Kodi 17.6 Версия операционной системы собрана с помощью системы сборки "Yocto Project". читать далее



Роутер на "Raspberry PI"
c использованием "Yocto Project"





Основная статья находится на сайте losst.ru и называется

Сетевой шлюз на Orange Pi R1





вся функциональность для Raspberry Pi - находится на ветке raspberry-sumo
т.е. основное отличие при сборке см. пункт ниже "Краткая инструкция по созданию проекта"
         git clone https://github.com/berserktv/router-bs.git -b raspberry-sumo



предыдущая версия статьи: Маршрутизатор на Raspberry Pi (28.12.2016 версия v0.7.1)


Знакомство с Yocto Project

Показать/Скрыть

The Yocto Project – это Open Source-проект, целью которого является упрощение разработки специальных дистрибутивов Linux для встраиваемых систем и обеспечение их переносимости между различными платформами.





Знакомство с Yocto Project


Будучи проектом совместного сотрудничества (иногда такие проекты называются "зонтичными"), Yocto Project охватывает различные составляющие процесса разработки. Эти составляющие именуются проектами в рамках общего проекта Yocto Project и включают в себя инструменты для сборки, метаданные инструкций по сборке (называемые рецептами), библиотеки, утилиты и графические интерфейсы.



Poky


Poky – это эталонная система сборки в рамках проекта Yocto Project. Она включает в себя BitBake, OpenEmbedded-Core, пакет поддержки платформы (Board Support Package, BSP), а также прочие пакеты и компоненты, объединенные в единую сборку. Название Poky также относится к эталонному дистрибутиву Linux, который создается этой системой сборки и может быть чрезвычайно минималистичным (core-image-minimal) или же представлять собой полноценную систему Linux с графической оболочкой (core-image-sato)


Систему сборки Poky можно рассматривать как эталонную систему для всего проекта – рабочий пример реального процесса. При загрузке Yocto Project фактически вы получаете экземпляр этих инструментов, утилит, библиотек, вспомогательных средств и метаданных, которые можно использовать для создания системы по умолчанию, как это описывается в нашей статье. Как эталонная система, так и эталонный дистрибутив, который она создает, называются Poky. Вы можете использовать Poky как начальную точку для создания ваших собственных дистрибутивов, которые, конечно же, могут называться как угодно.


Для всех систем сборки требуется наличие инструментария toolchain, состоящего из компилятора, ассемблера, линковщика и прочих двоичных утилит, необходимых для создания исполняемых файлов для той или иной архитектуры. Poky использует набор GNU Compiler Collection (GCC), но вы можете указать и другие наборы компиляторов. В Poky используется механизм кросс-компиляции: использование набора компиляторов одной архитектуры для создания исполняемых файлов другой архитектуры (например, сборка ARM-дистрибутива, выполняемая на компьютере с x86-архитектурой). Разработчики часто используют кросс-компиляцию при разработке встраиваемых систем, поскольку их рабочие компьютеры намного мощнее, чем типичная встраиваемая система.


Набор метаданных


Набор метаданных разделен на слои, каждый из которых обладает дополнительной функциональностью по отношению к нижележащим слоям. Базовый слой называется OpenEmbedded-Core (или oe-core) и содержит общие рецепты, классы и связанные с ними функции, необходимые для любой сборки. Эти сборки впоследствии можно настраивать под собственные нужды, добавляя новые слои поверх слоя oe-core.


OpenEmbedded-Core совместно поддерживается проектами Yocto Project и OpenEmbedded. Слой, отделяющий проект Yocto Project от проекта OpenEmbedded, называется meta-yocto и содержит конфигурацию дистрибутива Poky, а также базовый набор эталонных BSP-пакетов. Сам по себе проект OpenEmbedded является отдельным Open Source-проектом, обладающим собственными схожими рецептами и задачами, но со своей отдельной командой руководителей и областью применения.





Установка Yocto Project в Ubuntu


     Для установки Yocto Project вы можете использовать "bash" скрипт следующего содержимого:

	
	#!/bin/bash
	
	# скрипт предназначен для загрузки среды сборки дистрибутива "Router-bs" для
	# одноплатного компьютера "Raspberry Pi", autor "Alexander Demachev", site https://berserk.tv
	# license -  The MIT License (MIT)
	#
	# система сборки "poky" устанавливается в каталог выше
	# скрипт должен запускаться под обычным пользователем,
	# но в начале выполнения требует установку пакетов через команду "sudo"
	#
	# cоздание дистрибутива Linux "Router-bs" для встраиваемых систем осуществляется
	# с помощью Yocto Project
	# Poky – это эталонная система сборки в рамках проекта Yocto Project.
	# Она включает в себя BitBake, OpenEmbedded-Core, пакет поддержки платформы
	# Board Support Package, BSP), а также прочие пакеты и компоненты,
	# объединенные в единую сборку.
	
	
	SYSTEM_BUILD="poky-router"
	META_ROUTER="meta-router-bs"
	
	BBLAYERS_CONFIG="build/conf/bblayers.conf"
	LOCAL_CONFIG="build/conf/local.conf"
	CONFIG_MACHINE="raspberrypi2"
	TYPE_PACKAGE="deb"
	
	# версия "yocto-project" выбраная в качестве базовой, ветка sumo от 5 сентября 2018
	GIT_YOCTO="git://git.yoctoproject.org/poky.git"
	REV_YOCTO="51872d3f99e38f9d883ab0a8782ceecb41822fd0"
	
	
	DIR_RASPBERRYPI="meta-raspberrypi"
	GIT_RASPBERRYPI="http://git.yoctoproject.org/cgit/cgit.cgi/$DIR_RASPBERRYPI"
	# перешел на ветку sumo от 20 июля 2018
	REV_RASPBERRYPI="05f21adb99f97140e874fa2a4ed66d5e3554cd33"
	
	
	
	get_git_project() {
	    local git_path="$1"
	    local git_rev="$2"
	    local project_dir="$3"
	    local cur_dir=`pwd`
	    
	    git clone --no-checkout $git_path $project_dir
	    
	    cd $project_dir
	    git checkout $git_rev
	    cd $cur_dir
	}
	
	
	sudo apt-get install -y --no-install-suggests --no-install-recommends \
	     sed wget subversion git-core coreutils \
	     unzip texi2html texinfo libsdl1.2-dev docbook-utils fop gawk \
	     python-pysqlite2 diffstat make gcc build-essential xsltproc \
	     g++ desktop-file-utils chrpath libgl1-mesa-dev libglu1-mesa-dev \
	     autoconf automake groff libtool xterm libxml-parser-perl
	     
	
	old_dir=`pwd`
	cd ..
	
	
	get_git_project "$GIT_YOCTO" "$REV_YOCTO" "$SYSTEM_BUILD"
	
	cd $SYSTEM_BUILD
	poky_dir=`pwd`
	get_git_project "$GIT_RASPBERRYPI" "$REV_RASPBERRYPI" "$DIR_RASPBERRYPI"
	
	
	#####################################################################
	# инициализация переменных Yocto Project
	#####################################################################
	source oe-init-build-env ""
	cd $poky_dir
	# создаем символическую ссылку на слой сборки дистрибутива "Router-bs"
	ln -v -s $old_dir/$META_ROUTER $META_ROUTER
	
	
	# изменение настроек по умолчанию в конфигурационном файле системы сборки "Poky"
	# добавление собственного слоя в список слоев BBLAYERS
	# и добавление слоя сборки для "Raspberry Pi"
	sed -i "s|meta-yocto-bsp.*|&\n  $poky_dir/$META_ROUTER \\\|g" $BBLAYERS_CONFIG
	sed -i "s|meta-yocto-bsp.*|&\n  $poky_dir/$DIR_RASPBERRYPI \\\|g" $BBLAYERS_CONFIG
	sed -i "s|MACHINE ??=.*|MACHINE ??= \"$CONFIG_MACHINE\"|" $LOCAL_CONFIG
	
	# тип бинарных пакетов для установки ПО 
	F="PACKAGE_CLASSES ?= \"package_rpm\""
	R="PACKAGE_CLASSES ?= \"package_$TYPE_PACKAGE\""
	sed -i "s|$F|$R|" $LOCAL_CONFIG
	
	

После запуска установочного скрипта система сборки Poky будет располагаться каталогом выше, например если вы запустили установочный скрипт install.sh из каталога /home/user/router-bs, то система сборки Poky, будет установлена в каталог /home/user/poky-router


	Примечание: название корневого каталога системы сборки задается в скрипте установки:
	SYSTEM_BUILD="poky-router"


Общие впечатления от работы


Итак нашему "Малышу" router(у) на Raspberry Pi 2 исполнилось два годика,
и хотелось бы подвести некоторые итоги его работы:


После устранения некоторых детских болезней, router-bs перешел на режим работы "Подключил и забыл" т.е. router работает 24 часа, 7 дней в неделю, в течении более 730 дней, и за это время роутер выключался по питанию буквально несколько раз, и это скорее связано с перерывом в работе электросетей, нежели с самим маршрутизатором.

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



Общие недостатки Router(а)


  • В самом начале работы, пришлось заменить дешевую внешнюю сетевую плату KY-88772A, на более дорогую "TP Link UE 300", так как плата KY-88772A перегревалась и требовала сброса по питанию где-то два раза в сутки и после этого проблема исчезла.
  • Дороговизна решения, как говориться за хобби надо платить (но так как на тот момент у нас на шкафу валялось еще несколько плат, решение в общем то оправданное)


  • Зато главный недостаток нашего "Шлюза" - дороговизну, мы может исправить прямо сейчас.


    Итак "Встречайте" - шлюз мечты:


    "Формула R1" - на Orange Pi




    общая стоимость нашего шлюза теперь в 4 раза меньше и едва доходит до 1100 - 1200 рублей
    (И это даже притом, что курс доллара где то по 68-69 рублей)


    И у вас есть возможность изменять исходный код вашего дистрибутива, т.е. в любой момент вы можете подключить нужный вам патч в Linux Kernel, обновить DHCP, обновить NTP, обновить Shorewall, установить любой дополнительный Open Source Soft под ваши нужды.





    Краткая инструкция по использованию


    1) Загрузите готовый образ проекта:
    2) Запишите проект на карту памяти - "microSDHC"
    3) Перенастройте проект под ваше сетевое окружение:
    	сетевые настройки на целевом устройстве храняться в файле
    	/etc/network/interfaces, после переподключения карты памяти
    	"microSDHC" будут доступны два раздела:
    	
    	Первый раздел => fat16 будет содержать ядро, загрузчик и драйверы
    	                       для поддержки Raspberry Pi (dtb образы)
    	Второй раздел => ext3  будет содержать корневую файловую систему, rootfs
    	                       вот на этом разделе и необходимо отредактировать
    	                       файл etc/network/interfaces
    	Примечание:
    	Редактировать файлы необходимо с правами администратора
    	
    	см. главу: Настройка сетевого интерфейса шлюза
    		

    4) Подключите карту памяти "microSDHC" к Raspberry Pi
    	В большинстве вариантов для работы Роутера
    	достаточно изменить только сетевые интерфейсы, учитывая что:
    	 eth0 - внешний сетевой интерфейс (Интернет), 
    		связанный с устройством размещенным на плате Raspberry Pi
    	 eth1 - внутренний сетевой интерфейс (локальная сеть), 
    		связанный с USB сетевой платой
    	
    	Правила Брандмауэра связаны с именами этих сетевых интерфейсов,
    	и для типового использования подходят в большинстве случаев
    	
    	В случае если вам этого не достаточно, вам необходимо добавить свои правила
    	см. главу: Фильтрация сетевых пакетов - функции Брандмауэра
    	
    	
    	То же самое касается DHCP сервера, настройка по умолчанию вам подойдет только если
    	вы оставите в качестве локальной сети адрес 10.0.8.1 для сетевого интерфейса eth1
    	
    	см. главу: Настройка DHCP сервера на шлюзе
    	  

    5) Удостоверьтесь что оба сетевых кабеля подключены к Raspberry Pi и включите питание.


    Краткая инструкция по созданию образа дистрибутива


    1) Загрузите проект с github:
    	git clone https://github.com/berserktv/router-bs.git -b raspberry-sumo
    		

    2) Установите Yocto Project (Poky):
    	cd router-bs
    	chmod u+x install.sh
    	./install.sh
    		

    3) Соберите проект:
    	cd ../poky-router
    	. ./oe-init-build-env
    	bitbake router-bs-image
    		

    4) Время сборки проекта:
    	Время сборки образа дистрибутива достаточно длительное
    	и может занимать от двух до N часов в зависимости от производительности
    	компьютера, также в процессе сборки из "Интернета" должны быть
    	загружены исходные коды всех программ входящих в дистрибутив,
    	часто это полные git базы
    	
    	(т.е. время сборки также зависит от скорости подключения сети "Интернет")
    	
    	например на машине: Процессор     - Intel(R) Core(TM) i5-3570 CPU @ 3.40GHz
    	                    ОЗУ           - 8 Гбайт
    	                    Жесткий диск  - внешний USB-3.0  1Tбайт
    	
    	                    Время сборки  - 2 часа 25 минут
    	                    Размер образа - 184 Мбайт
    	
    	ПРИМЕЧАНИЕ: размер образа можно значительно уменьшить,
    	            более чем в три раза, если перейти на
    	            сжатую файловую систему squashfs,
    	            а диски перевести в режим только чтения
    	            но это совсем другая история ...
    	
    	Размер каталога poky-router/build после завершения сборки
    	(cache сборки, исходный код всех программ входящих в образ,
    	в разных форматах, в случае с git базами они загружается целиком
    	со всей историей, промежуточные файлы сборки, обьектные файлы,
    	файлы пакетов и т.п.)
    	                            занимает примерно 26 ГБайт
    	
    	Из этих 26 Гбайт, размер каталога build/downloads
    	(git базы приложений и tar.gz архивы)
    	занимают 4.8 Гбайт
    			

    5) Запишите проект на карту памяти - "microSDHC"


    Запись проекта Router-bs на карту памяти
    "microSDHC"



    Cобранный образ после сборки будет располагаться по пути
    poky-router/build/tmp/deploy/images/raspberrypi2


    На последний успешно собранный образ всегда будет указывать символическая ссылка:
    router-bs-image-raspberrypi2.rpi-sdimg


    т.е. poky-router/build/tmp/deploy/images/raspberrypi2/router-bs-image-raspberrypi2.rpi-sdimg,
    cам файл будет содержать достаточно длинное имя c датой создания и временем в UTC например такое:
    router-bs-image-raspberrypi2-20181220192232.rootfs.rpi-sdimg


    Для записи образа дистрибутива на карту памяти используется команда dd. Запуск команды dd выполняется от имени администратора, при этом необходимо указать входной файл и устройство подключения карты памяти "microSDHC", например /dev/sdX, где X может быть a,b,c и т.д. в зависимости от предыдущих подключенных дисковых разделов


    Проще всего название определить по выводу команды blkid
    наберите команду sudo blkid до подключения карты памяти - "microSDHC"


    и далее =>
    наберите команду sudo blkid после подключения карты памяти - "microSDHC"
    и тот новый раздел который появился в выводе последней команды и будет искомым


    Отмонтируйте разделы карты памяти - "microSDHC" например так, если разделов несколько

    		umount /dev/sdX1
    		umount /dev/sdX2
    		


    В команде dd указывается имя диска целиком т.е. без номера раздела так как в образе также содержится и основная загрузочная запись MBR и таблица(ы) разделов


    Примечание:
    текущем каталогом в примере указанном ниже является каталог poky-router/build



    ВНИМАНИЕ: все предыдущие данные на карте памяти "microSDHC"
    после выполнения операции записи будут удалены.

    		sudo bash
    		cd tmp/deploy/images/raspberrypi2
    		dd if=router-bs-image-raspberrypi2.rpi-sdimg of=/dev/sdX bs=1M
    		sync
    		


    Запись дистрибутива Router-bs
    скаченного с нашего ресурса на карту памяти


    После загрузки уже собранного дистрибутива (раздел Download) вы можете воспользоваться тем же набором команд что и выше, за исключением того, что:


    1) Вам необходимо распаковать zip архив с дистрибутивом в какую нибудь временную папку

    2) Перейти в этот временный каталог

    3) Выполнить команду dd смотри главу Запись проекта Router-bs на карту памяти


    		sudo bash
    		dd if=router-bs-raspberrypi2-v0.7.2_rpi.rpi-sdimg of=/dev/sdX bs=1M
    		

    Примечание:
    название файла образа (rpi-sdimg) может быть другим, в зависимости от версии




    Загрузка дистрибутива Router-bs



    Описание дистрибутива вы можете посмотреть в статье


    Вы можете загрузить следующие версии образа дистрибутива:

    	версия       - v0.7.2
    	описание     - Введение в Yocto Project
    	               cборка сетевого шлюза на Orange Pi
    	aрхитектура  - Orange Pi R1
    	               Orange Pi Zero 
    	дата         - от 20.09.2018
    	MD5          - b95ec06fb3befa9c663d42d13f5376fd
    	               (контрольная сумма MD5 zip архива)
    	               размер архива 30.6 Мбайт
    	
    	примечание:    Дополнительно в слое meta-sunxi доступны 
    	               следующие платформы:
    	               bananapi
    	               cubieboard2
    	               cubieboard
    	               cubietruck
    	               forfun-q88db
    	               mele
    	               meleg
    	               nanopi-neo-air
    	               nanopi-neo
    	               olinuxino-a10lime
    	               olinuxino-a10s
    	               olinuxino-a13
    	               olinuxino-a13som
    	               olinuxino-a20
    	               olinuxino-a20lime2
    	               olinuxino-a20lime2-emmc
    	               olinuxino-a20lime
    	               olinuxino-a20som
    	               orange-pi-one
    	               orange-pi-pc
    	               orange-pi-pc-plus
    	               orange-pi-zero-plus2
    	               pcduino
    	
    	               но проверялась сборка только
    	               для трех плат Orange Pi R1,
    	               Orange Pi Zero и Orange Pi PC Plus
    	
    	имя файла    - router-bs-orange-pi-zero-v0.7.2.sunxi-sdimg.zip
    	


    	версия       - v0.7.2_rpi
    	описание     - cборка сетевого шлюза на Raspberry Pi
    	архитектура  - arm
    	платы        - Raspberry Pi 2 Model "B"
    	дата         - от 20.12.2018
    	MD5          - 7f7f4babc8dd94e105f7a77ad8315f8c
    	               (контрольная сумма MD5 zip архива)
    	               размер архива 44.3 Мбайт
    	
    	примечание:    Дополнительно в слое meta-raspberrypi доступны следующие
    	               архитектуры:
    	               raspberrypi
    	               raspberrypi0
    	               raspberrypi0-wifi
    	               raspberrypi2
    	               raspberrypi3-64
    	               raspberrypi3
    	               raspberrypi-cm3
    	               raspberrypi-cm
    	               
    	
    	               но проверялась сборка только
    	               для платы Raspberry Pi 2 Model "B"
    	
    	имя файла    - router-bs-raspberrypi2-v0.7.2_rpi.rpi-sdimg.zip
    	


    	версия       - ver-0.7.1
    	aрхитектура  - Raspberry Pi «2B»
    	               (плата SoC Broadcom BCM2836, процессор Cortex-A7)
    	флаги сборки - "arm armv7ve vfp thumb neon vfpv4 callconvention-hard cortex"
    	дата         - от 25.12.2016
    	MD5          - 6b8eaeebef50b185043f2acdef3bd66d
    	               (контрольная сумма MD5 zip архива)
    	               размер архива 43 Мбайт
    	
    	имя файла    - router-bs-image-ver-0.7.1.rpi-sdimg.zip
    	


    	версия       - ver-0.7.1
    	aрхитектура  - Raspberry Pi (ранние версии устройства)
    	               (процессор ARM1176JZ-F)
    	флаги сборки - "arm armv6 vfp arm1176jzfs callconvention-hard"
    	дата         - от 27.12.2016
    	MD5          - 278dfeb77f389ae5229f3936cf48db12
    	               (контрольная сумма MD5 zip архива)
    	               размер архива 43 Мбайт
    	
    	имя файла    - router-bs-image-arm1176jzfs-ver-0.7.1.rpi-sdimg.zip