Skip to content

Instantly share code, notes, and snippets.

@pblxptr
Last active November 15, 2021 19:57
Show Gist options
  • Save pblxptr/23b28b00d2c21f1abfe250abb7d5390c to your computer and use it in GitHub Desktop.
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
  • bitbake -c compile name - compile package

???

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

sudo bmaptool copy --nobmap hhctrl-image-dev-hhctrl.wic.bz2 /dev/mmcblk0

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

Example2

RPI PWM

  • add to machine conf -> KERNEL_DEVICETREE_append += " overlays/pwm.dtbo"
  • add to boot/config.txt -> dtoverlay=pwm (or dtoverlay=pwm,pin=12,func=4 if you want to remap pin to GPIO12, default GPIO18)
  • optionally this one supports 2chan pwm -> pwm-2chan-overlay.dts
  • optionally add dtoverlay=pwm to RPI_EXTRA_CONFIG

Hw PWM example

Yocto Hw PWM

VERY!!! useful guide

DTS overlay

How To use PWM in Linux through sysfs

DS18B20 temperature sensor one wire

WIFI STRATEGY FOR RPI

Partitions

OTA

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