Anda di halaman 1dari 25

Embedded

Labworks

Yocto Project

Board Support Package

Embedded
Labworks

O QUE UM BSP?

Um BSP (Board Support Package) contm documentao e


cdigo-fonte para adicionar o suporte determinada
plataforma de hardware.
Para adicionar o suporte a uma plataforma de hardware no
Yocto Project, necessrio adicionar uma camada de BSP.
Por padro, o Yocto Project j possui algumas camadas de
BSP implementadas (beaglebone, edgerouter, etc).
Ao desenvolver o seu produto, verifique se j existe um BSP
do Yocto Project para a sua plataforma. Caso contrrio, ser
necessrio desenvolv-la.

Embedded
Labworks

CAMADA DE BSP

Uma camada de BSP tem a mesma aparncia de uma


camada de distro ou de software:

Contm um arquivo de configurao da camada ( layer.conf).


Contm diversas receitas para a compilao do BSP
(bootloader, kernel, servidor grfico, ferramentas de
profiling).
Contm a implementao de classes adicionais que sero
usadas pelas receitas da camada.

Porm, diferentemente das camadas de distribuio e


software, a camada de BSP possui tambm arquivos de
configurao de mquinas (machines).

Embedded
Labworks

META-YOCTO-BSP
$treeL3metayoctobsp/
./metayoctobsp/
conf
layer.conf
machine
beaglebone.conf
edgerouter.conf
genericx8664.conf
genericx86.conf
include
mpc8315erdb.conf
recipesbsp
recipescore
recipesgraphics
recipeskernel

Embedded
Labworks

CRIANDO UMA CAMADA DE BSP

Uma camada de BSP pode ser criada manualmente


ou atravs da ferramenta yoctobsp:
$yoctobsph

Um guia para a criao de BSPs no Yocto Project


est disponvel no link abaixo:
http://www.yoctoproject.org/docs/1.6/bsp-guide/bspguide.html

Embedded
Labworks

ADICIONANDO UMA MACHINE

O segredo da implementao da camada de BSP est na


definio do arquivo de configurao da mquina (machine).
Neste arquivo deve-se definir informaes sobre o bootloader,
kernel, drivers, parmetros de otimizao do compilador, etc.
Dentre as variveis mais comuns, temos:

TARGET_ARCH:

arquitetura da mquina.

PREFERRED_PROVIDER_virtual/kernel:

permite definir a receita do


kernel que ser utilizada para esta mquina.

Use a definio das mquinas existentes para identificar as


variveis que podem ser usadas na definio de uma
mquina.

Embedded
Labworks

wandboard-quad.conf
includeconf/machine/include/imxbase.inc
includeconf/machine/include/tunecortexa9.inc
SOC_FAMILY="mx6:mx6q:wandboard"
PREFERRED_PROVIDER_virtual/kernel?="linuxwandboard"
UBOOT_MACHINE="wandboard_quad_config"
KERNEL_DEVICETREE="imx6qwandboard.dtb"
SERIAL_CONSOLE="115200ttymxc0"
MACHINE_FEATURES+="pciwifibluetooth"
MACHINE_EXTRA_RRECOMMENDS+="broadcomnvramconfig"

Embedded
Labworks

imx-base.inc
includeconf/machine/include/fsldefaultsettings.inc
includeconf/machine/include/fsldefaultversions.inc
includeconf/machine/include/fsldefaultproviders.inc
includeconf/machine/include/socfamily.inc
#Setspecificmaketargetandbinarysuffix
UBOOT_MAKE_TARGET="uboot.imx"
UBOOT_SUFFIX?="imx"
UBOOT_ENTRYPOINT_mx3="0x80008000"
[...]
XSERVER_DRIVER="xf86videofbdev"
[...]
#FloatPointsetting
DEFAULTTUNE_mx6?="cortexa9hfneon"

Embedded
Labworks

MACHINE FEATURES

As features de mquinas podem ser definidas com a varivel


MACHINE_FEATURES.
Elas permitem habilitar determinadas opes de hardware,
como por exemplo:

touchscreen:

wifi:

bluetooth:

o hardware tem uma interface de touchscreen.

o hardware tem uma interface wifi.


o hardware tem uma interface bluetooth.

A principais features de mquinas esto disponveis no link


abaixo:
http://www.yoctoproject.org/docs/1.6/ref-manual/refmanual.html#ref-features-machine

Embedded
Labworks

USANDO O BSP

Para usar o BSP, basta adicionar sua camada no


bblayers.conf.
BBLAYERS="${BSPDIR}/sources/poky/meta\
${BSPDIR}/sources/poky/metayocto\
${BSPDIR}/sources/metaopenembedded/metaoe\
${BSPDIR}/sources/metafslarm\
${BSPDIR}/sources/metafslarmextra"

E configurar a varivel MACHINE no local.conf com o


nome utilizado no arquivo de configurao da
mquina.
MACHINE??='wandboardquad'

Embedded
Labworks

ESTENDENDO O BSP

Para estender um BSP existente, aconselhvel


criar uma camada para centralizar as alteraes
que sero realizadas.
Use arquivos de append para customizar as receitas
do BSP.
Use arquivos de patch para controlar as alteraes
no componentes de software (bootloader, kernel,
etc).

Embedded
Labworks

CONFIGURANDO O KERNEL

Uma necessidade comum na customizao do BSP


a alterao da configurao do kernel.
A configurao do kernel pode ser aberta
diretamente pelo BitBake atravs da tarefa
do_menuconfig.
$bitbakelinuxyoctocmenuconfig

Neste caso, a configurao ser realizada


diretamente no diretrio de compilao do kernel
em tmp/work/, e poder ser perdida em uma
eventual recompilao do kernel ou da imagem.

Embedded
Labworks

CONFIGURANDO O KERNEL (cont.)

Portanto, necessrio um mecanismo para salvar e


manter uma configurao customizada do kernel.
Existem basicamente duas formas para salvar uma
configurao customizada do kernel:

Sobrescrever a configurao padro fornecida pelo


BSP.
Criar fragmentos de configurao.

SOBRESCREVENDO A
CONFIGURAO

Embedded
Labworks

Para sobrescrever a configurao padro do BSP,


voc deve:

Criar na sua camada a estrutura de diretrios recipes


kernel/linux/files/.
Criar um arquivo de append da receita de compilao
do kernel e salvar em recipeskernel/linux/.
Salvar o arquivo de configurao do kernel com o
nome defconfig em recipeskernel/linux/files/.

SOBRESCREVENDO A
CONFIGURAO (cont.)
$treeL4recipeskernel/
recipeskernel
linux
files
defconfig
linuxmyboard.bbappend
$catlinuxmyboard.bbappend
FILESEXTRAPATHS_prepend:="${THISDIR}/files:"
SRC_URI+="file://defconfig"

Embedded
Labworks

Embedded
Labworks

FRAGMENTOS DE CONFIGURAO

Os fragmentos de configurao permitem a adio de


novas opes no arquivo de configurao do BSP.
Para customizar a configurao padro do BSP usando
fragmentos de configurao, necessrio:

Criar na sua camada a estrutura de diretrios recipes


kernel/linux/files/.
Criar um arquivo de append da receita de compilao do
kernel e salvar em recipeskernel/linux/.
Salvar o arquivo que contm os fragmentos de
configurao no diretrio recipeskernel/linux/files/
com a extenso .cfg.

SOBRESCREVENDO A
CONFIGURAO (cont.)
$treeL4recipeskernel/
recipeskernel
linux
files
ntfs.cfg
linuxmyboard.bbappend
$catfiles/ntfs.cfg
CONFIG_NTFS_FS=y
$catlinuxmyboard.bbappend
FILESEXTRAPATHS_prepend:="${THISDIR}/files:"
SRC_URI+="file://ntfs.cfg"

Embedded
Labworks

Embedded
Labworks

APLICANDO PATCHES

Para aplicar patches ao kernel original do BSP


necessrio:

Criar na sua camada a estrutura de diretrios recipes


kernel/linux/files/.
Criar um arquivo de append da receita de compilao
do kernel e salvar em recipeskernel/linux/.
Salvar

os

patches
kernel/linux/files/.

no

diretrio

recipes

Embedded
Labworks

APLICANDO PATCHES (cont.)


recipeskernel/
linux
files
0001fixbug.patch
linuxmyboard.bbappend
$catlinuxmyboard.bbappend
FILESEXTRAPATHS_prepend:="${THISDIR}/files:"
SRC_URI+="file://0001fixbug.patch"

Embedded
Labworks

MDULOS DO KERNEL

Para compilar um mdulo do kernel, basta criar uma


receita herdando a classe module.bbclass.
Algumas variveis precisam ser definidas, incluindo
SUMMARY, LICENSE, LIC_FILES_CHKSUM e SRC_URI.
Uma receita de exemplo para compilar um mdulo
do kernel est disponvel no Poky em meta
skeleton/recipeskernel/hellomod/hellomod_0.1.bb.

Embedded
Labworks

hello-mod_0.1.bb
SUMMARY="ExampleofhowtobuildanexternalLinuxkernel
module"
LICENSE="GPLv2"
LIC_FILES_CHKSUM="file://COPYING;md5=12f884d2ae1ff87c09e5b7c
cc2c4ca7e"
inheritmodule
PR="r0"
PV="0.1"
SRC_URI="file://Makefile\
file://hello.c\
file://COPYING"
S="${WORKDIR}"

ALTERANDO OS FONTES DO
KERNEL

Embedded
Labworks

Para utilizar uma verso customizada do kernel voc


pode criar uma nova receita.
Um exemplo de receita para este caso est
disponvel
no
Poky
em
metaskeleton/recipes
kernel/linux/linuxyoctocustom.bb.
Copie a receita para a sua camada e renomeie o
arquivo no padro <project_name>_<kernel_version>.bb.
Altere as variveis da receita de acordo com a
configurao do seu kernel.

Embedded
Labworks

linux-yocto-custom.bb
inheritkernel
requirerecipeskernel/linux/linuxyocto.inc
SRC_URI="git://git.kernel.org/pub/scm/linux/kernel/git/
torvalds/linux.git;protocol=git;nocheckout=1;name=machine"
LINUX_VERSION?="3.4"
LINUX_VERSION_EXTENSION?="custom"
SRCREV_machine="76e10d158efb6d4516018846f60c2ab5501900bc"
PR="r1"
PV="${LINUX_VERSION}+git${SRCPV}"
COMPATIBLE_MACHINE="(^$)"

Embedded
Labworks

OUTRAS OPES DE
CONFIGURAO

A varivel APPEND permite


comandos do kernel.

alterar

linha

de

APPEND+="printk.time=yinitcall_debugdebug"

O arquivo de device tree (DTB) pode ser definido na


varivel KERNEL_DEVICETREE.
KERNEL_DEVICETREE="imx6qwandboard.dtb"

A varivel SERIAL_CONSOLE permite definir a console


serial do target.
SERIAL_CONSOLE="115200ttyS0"

Embedded
Labworks

LABORATRIO

Customizando o BSP

Anda mungkin juga menyukai