Skip to content

Instantly share code, notes, and snippets.

@pblxptr
Last active November 15, 2021 19:57
Show Gist options
  • Select an option

  • Save pblxptr/23b28b00d2c21f1abfe250abb7d5390c to your computer and use it in GitHub Desktop.

Select an option

Save pblxptr/23b28b00d2c21f1abfe250abb7d5390c to your computer and use it in GitHub Desktop.
Yocto

Raspberry Pi Zero W

Useful links / guides etc.

YOCTO

Resources

ESSENTIAL COMMANDS

  • bitbake core-image-minimal - build image
  • bitbake core-image-minimal -c populate_sdk - build image with sdk

USEFUL COMMANDS

  • -g - create dependency graph e.g. bibake -g foo example

???

MACHINEL_EXTRA_RRECOMMENDS_append - do obrazu (NIE DLA obrazów typu core-image) dodane zostaną zdefiniowane paczki (np. sterownik wifi) CHYBA, że taki steronik znajduje się już w kernelu. Wtedy nie zostanie dodany, ale build się nie wywali.

MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS_append - do obrazu (nawet bazującego na core-image) dodane zostaną zdefiniowane paczki (np. sterownik wifi) CHYBA, że taki steronik znajduje się już w kernelu. Wtedy nie zostanie dodany, ale build się nie wywali.

IMAGE_FEATURES += "ssh-server-dropbear tools-debug debug-tweaks" - dodaje ficzery (zdefiniowane wcześniej), dla danego obrazu. Może być tak, że np. ficzer ssh-server-dropbear zawiera wiele paczek.

CORE_IMAGE_EXTRA_INSTALL += "ethtool evtest fbset i2c-tools memtester" - do obrazu core image zostaną doadne jakieś pakiety, które nie są zdefiniowane jako ficzery, mogą to być np. pojedyncze paczki.

core-image-minimal (core-image-minimal.bb) nadpisuje IMAGE_INSTALL całkowicie! -

IMAGE_INSTALL = "packagegroup-core-boot ${CORE_IMAGE_EXTRA_INSTALL}"

core-image-base - zawiera dużo więcej paczek. To co znajduje się w core-image-base jest w (core-image.bbclass)

CORE_IMAGE_BASE_INSTALL = '\
    packagegroup-core-boot \     -> packagegroup-core-boot.bb
    packagegroup-base-extended \ -> package-group-base.bb
    \
    ${CORE_IMAGE_EXTRA_INSTALL} \
    '
CORE_IMAGE_EXTRA_INSTALL ?= ""

IMAGE_INSTALL ?= "${CORE_IMAGE_BASE_INSTALL}"

BBAPPEND - ..bbappend pliki konfiguracyjne do budowania receptury.

Zawierają np.:

  • link do repo z kodem
  • zależności

NOWA RECEPTURA

  • dodaj recepture do katalogu, np. meta-somlabs/recipies-somlabs/somlabs-example

Przyykładowa struktura:

|-- somlabs-example 
    |-- somlabs-example
        |-- main.c
|-- somlabs-example.bb

Autostart aplikacji

W pliku .bb dla recepty należy dodać:

[...]
inherit systemd
SYSTEMD_AUTO_ENABLE = "enable"
SYSTEMD_SERVICE_${PN} = "somlabs-example.service"
[...]

Przyykładowa struktura:

|-- somlabs-example 
    |-- somlabs-example
        |-- main.c
        |-- somlabs-example.service
|-- somlabs-example.bb

Customize Busybox

  • bitbake -c menuconfig busybox - opens menuconfig for busybox package
  • bitbake -c diffconfig busybox -> creates fragment to use in .bbappend
  • recipetool appendsrcfile -w [path to layer] busybox [path to fragment generated in step #2]

example

UNPACK IMAGE

bzip2 -d -f core-image-minimal-raspberrypi0-wifi-20210228190520.rootfs.wic.bz2

COPY IMAGE TO SDCARD

sudo dd if=core-image-minimal-raspberrypi0-wifi-20210228190520.rootfs.wic of=/dev/mmcblk0 bs=1M status=progress

BUILDING KERNEL MODULE OUT OF YOCTO

  • add following line to conf (local.conf / machine.conf etc) TOOLCHAIN_TARGET_TASK_append = " kernel-devsrc"
  • compile sdk -> - bitbake core-image-minimal -c populate_sdk
  • install sdk -> (sudo) /home/pp/yocto-hh/build/tmp/deploy/sdk/sheli-dev-glibc-x86_64-core-image-minimal-arm1176jzfshf-vfp-hhctrl-toolchain-1.0.0.sh
  • add compiler to path -> export PATH=$PATH:/opt/sheli-dev/1.0.0/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi:$PATH
  • go to kernel dir -> cd /opt/sheli-dev/1.0.0/sysroots/arm1176jzfshf-vfp-poky-linux-gnueabi/usr/src/kernel
  • log as root -> su (root)
  • make scripts -> ARCH=arm CROSS_COMPILE=arm-poky-linux-gnueabi- make scripts
  • make prepare -> ARCH=arm CROSS_COMPILE=arm-poky-linux-gnueabi- make modules_prepare / prepare
  • source sdk evn -> source /opt/sheli-dev/1.0.0/environment-setup-arm1176jzfshf-vfp-poky-linux-gnueabi
  • compile module -> KERNEL_SRC=/opt/sheli-dev/1.0.0/sysroots/arm1176jzfshf-vfp-poky-linux-gnueabi/usr/src/kernel make

Out of tree modules

RASPBERRYPI ZERO W

  • mkdir project && cd project
  • mkdir sources && cd sources
  • git clone -b gatesgarth git://git.yoctoproject.org/poky
  • git clone -b gatesgarth git://git.openembedded.org/meta-openembedded
  • git clone -b gatesgarth git://git.yoctoproject.org/meta-raspberrypi
  • cd .. && source sources/poky/oe-init-build-env build
  • cd build
  • bitbake-layers add-layer ../sources/meta-raspberrypi (you have to be in build directory)
  • echo 'MACHINE = "raspberrypi0-wifi"' >> conf/local.conf

WIFI STRATEGY FOR RPI

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment