Raspberry Pi Zero W ## Useful links / guides etc. ### * [Doc](https://docs.yoctoproject.org/) * https://jumpnowtek.com/rpi/Raspberry-Pi-Systems-with-Yocto.html * https://www.youtube.com/watch?v=MjJw3c_5VC0 * https://jumpnowtek.com/rpi/Using-DS18B20-1-wire-Temp-Sensors-with-the-Raspberry-Pi.html ## YOCTO ### Resources * Yocto compatible layers, contains e.g. meta-bsp for rpi etc. Should be first choice * http://git.yoctoproject.org/cgit/cgit.cgi/ * https://www.yoctoproject.org/software-overview/layers/ * General layer index, Should be second choice: * https://layers.openembedded.org * http://git.yoctoproject.org/cgit/cgit.cgi/poky/- meta-poky reference layer, contains tools to build project * http://git.openembedded.org/meta-openembedded - meta-openembedded a layer that contains all useful tools across the embedded world. * https://www.yoctoproject.org/docs/2.7/ref-manual/ref-manual.html#ref-features - features shipped by YOCTO project ### 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](https://docs.yoctoproject.org/bitbake/bitbake-user-manual/bitbake-user-manual-intro.html#generating-dependency-graphs) * ***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. * [stackoverflow](https://stackoverflow.com/questions/56880237/image-features-vs-image-install-in-yocto) * [meander](https://hub.mender.io/t/how-to-create-custom-images-using-yocto-project/902) ***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](http://bec-systems.com/site/1145/modifying-the-busybox-config-in-openembedded)
### 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](https://docs.legato.io/17_07/yoctoOutofTreeKernelModule.html)
[Example2](https://lists.yoctoproject.org/g/meta-freescale/topic/69260385)
### 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](https://www.ofitselfso.com/RPICSIO/Help/RPICSIOHelp_PWMPortExample.html)
[Yocto Hw PWM](https://www.yoctoproject.org/pipermail/yocto/2015-July/025875.html)
[VERY!!! useful guide](https://www.jumpnowtek.com/rpi/Using-the-Raspberry-Pi-Hardware-PWM-timers.html)
[DTS overlay](https://github.com/raspberrypi/linux/tree/rpi-5.10.y/arch/arm/boot/dts/overlays)
[How To use PWM in Linux through sysfs](https://developer.toradex.com/knowledge-base/pwm-linux#How_to_use_PWM_in_Linux_through_sysfs)
#### 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 ###
* https://www.yoctoproject.org/pipermail/yocto/2018-June/041372.html
* https://github.com/drewmoseley/meta-wifi-credentials/blob/master/sysvinit/recipes-connectivity/wpa-supplicant/wpa-supplicant_%25.bbappend - multiple ways to enable wlan configuration
* https://raspberrypi.stackexchange.com/questions/48351/configure-wlan-for-raspberrypi3-using-image-created-with-yocto - adding broadcom drivers to kernel
* https://raspberrypi.stackexchange.com/questions/48351/configure-wlan-for-raspberrypi3-using-image-created-with-yocto
### Partitions ###
* https://pretalx.com/media/yocto-project-summit-2020/submissions/GVU8HS/resources/Norbert_Kaminski_Wic_plugin_devel_0Lszv3V.pdf * https://docs.yoctoproject.org/ref-manual/kickstart.html *
### OTA ###
* https://afterhourscoding.wordpress.com/2020/07/26/integrating-swupdate-with-u-boot/ *