Notes About Yocto

I used Ubuntu 20.04 (LTS) for this.

Getting started commands

cd ~
 
# Build prerequisites
sudo apt-get install gawk wget git diffstat unzip texinfo gcc build-essential chrpath socat cpio python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev pylint3 xterm python3-subunit mesa-common-dev
 
# Cloning the official reference OS called Poky
git clone git://git.yoctoproject.org/poky
 
# Fork the current stable (hardknott)
git checkout -t origin/hardknott -b m-hardknott
 
# Build Poky to run on x64.
source oe-init-build-env
 
# Run the Poky via qemu (an emulator - it is slow).
runqemu qemux86-64 sdl
# I used the SDL graphical backend because the default backend hid the cursor.

Now adding the support for Raspberry Pi

# Clone the Raspberry Pi BSP
cd ~/poky
git clone git://git.yoctoproject.org/meta-raspberrypi
 
# Set MACHINE variable in build/conf/local.conf to "raspberrypi"
vim build/conf/local.conf
 
# Add the layer 
cd build
bitbake-layers add-layer ../meta-raspberrypi/
 
# Build a minimal image
bitbake core-image-minimal

Formatting a MicroSD card

# Insert USB MicroSD card reader and figure out device it is.
dmesg | tail
# Make sure the device isn't mounted before continuing.
# Create partitions with parted
sudo parted /dev/sdc
  mklabel msdos
  mkpart primary fat32 1M 100M
  mkpart primary ext4 100M 100%
  quit
# Format first partition as FAT32 (vfat)
sudo mkfs.vfat /dev/sdc1
# Label the first partition BOOT
sudo fatlabel /dev/sdc1 BOOT
# Format second partition as ext4
sudo mkfs.ext4 /dev/sdc2
# Label the second partition ROOT
sudo e2label /dev/sdc2 ROOT
# Save the partition UUIDs in a text file for later
blkid | grep sdc > ~/sdcard/PARTUUID.txt

Mounting the MicroSD card

# Create subfolders for each partition
mkdir ~/sdcard/{root,boot} -p
sudo mount /dev/sdc1 ~/sdcard/boot
sudo mount /dev/sdc2 ~/sdcard/root

During my testing, I copied the NOOBS root file system to ~/sdcard/root, and then

  • Updated ~/sdcard/boot/cmdline.txt to include the correct root partition ID.
  • Updated ~/sdcard/root/etc/fstab to include the correct root and boot partition IDs.

However a better way to set the partitions is to use the MMC block device IDs like mmcblkdev0p0 and p1.

Layers required for raspberrypi BSP:

  • git clone -b hardknott http://git.yoctoproject.org/git/poky
  • git clone -b hardknott git:git.yoctoproject.org/meta-raspberrypi * git clone -b hardknott git:git.openembedded.org/meta-openembedded

Customizing the Poky Build

I started customizing Poky to make it what I wanted.

Adding systemd support

Edited poky/build/conf/local.conf by adding the following lines:

# Note the space after the quote and before systemd on the _append line
DISTRO_FEATURES_append = " systemd"
VIRTUAL-RUNTIME_init_manager = "systemd"
VIRTUAL-RUNTIME_initscripts = ""

Some links

Waveshare 2.7inch e-Paper HAT

Testing basic support with regular Raspberry Pi OS

First we have to install the dependencies, as specified by Waveshare

BCM2835 Library

wget https://www.airspayce.com/mikem/bcm2835/bcm2835-1.68.tar.gz
tar xf  bcm2835-1.68.tar.gz
cd bcm2835-1.68
./configure
make
# OPTIONAL: run the tests
sudo make check
# Install
sudo make install

WiringPi

sudo apt update
sudo apt install wiringpi

Python libraries

sudo apt install python3-pip python3-pil python3-numpy
sudo pip3 install rpi.gpio spidev

Examples from Waveshare

git clone https://github.com/waveshare/e-Paper

References


User Tools