diff --git a/README.md b/README.md index cc1c2942f..99f5aa656 100644 --- a/README.md +++ b/README.md @@ -76,14 +76,31 @@ This layer depends on: ## Quick Start with kas -1. Install kas build tool from PyPi (sudo pip3 install kas) -2. Set the `machine: ` in kas-poky-rpi.yml to one of the supported boards (see conf/machine/*.conf) -3. kas build meta-raspberrypi/kas-poky-rpi.yml -4. Use bmaptool to copy the generated .wic.bz2 file to the SD card -5. Boot your RPI +1. Install the kas build tool from PyPI: -To adjust the build configuration with specific options (I2C, SPI, ...), simply add -a section as follows: + ``` + pip3 install kas + ``` + +2. Select the appropriate machine configuration file from `kas/` + (for example `raspberrypi4.yml`, `raspberrypi3-64.yml`, etc.) + +3. Run the build: + + ``` + kas build meta-raspberrypi/kas/.yml + ``` + +4. Use `bmaptool` to copy the generated `.wic.bz2` image to the SD card + +5. Boot your Raspberry Pi + +The kas configuration is split into a shared `base.yml` and per-machine +configuration files. Machine selection is done by choosing the appropriate +kas file rather than editing a `machine` variable. + +To adjust the build configuration with specific options (I2C, SPI, etc.), +extend the configuration by adding a `local_conf_header` section, for example: ``` local_conf_header: @@ -92,10 +109,16 @@ local_conf_header: RPI_EXTRA_CONFIG = "dtoverlay=disable-bt" ``` -To configure the machine, you have to update the `machine` variable. -And the same for the `distro`. +Additional configurations can be layered by including extra kas files. For example, +to enable runtime testing with `testimage`: + +``` +kas build meta-raspberrypi/kas/raspberrypi4.yml:meta-raspberrypi/kas/testimage.yml +``` + +For further details, see the kas documentation: +https://kas.readthedocs.io/en/latest/index.html -For further information, you can read more at ## Contributing diff --git a/conf/layer.conf b/conf/layer.conf index d66f32317..9e6fbdfd8 100644 --- a/conf/layer.conf +++ b/conf/layer.conf @@ -32,6 +32,3 @@ BBFILES_DYNAMIC += " \ meta-python:${LAYERDIR}/dynamic-layers/meta-python/*/*/*.bb \ meta-python:${LAYERDIR}/dynamic-layers/meta-python/*/*/*.bbappend \ " - -DEFAULT_TEST_SUITES:remove:rpi = "parselogs" -DEFAULT_TEST_SUITES:append:rpi = " parselogs_rpi" diff --git a/conf/machine/include/rpi-default-settings.inc b/conf/machine/include/rpi-default-settings.inc index b788f146f..716a8bbb7 100644 --- a/conf/machine/include/rpi-default-settings.inc +++ b/conf/machine/include/rpi-default-settings.inc @@ -1,9 +1,3 @@ # RaspberryPi BSP default settings IMAGE_CLASSES += "sdcard_image-rpi" - -# RPI kernel has errors of its own which should be filtered -# therefore use parselogs_rpi test instead of parselogs from oe-core -# -DEFAULT_TEST_SUITES:append:rpi = " parselogs_rpi" -DEFAULT_TEST_SUITES:remove:rpi = " parselogs" diff --git a/conf/machine/raspberrypi.conf b/conf/machine/raspberrypi.conf index 05263d766..7c4973fcf 100644 --- a/conf/machine/raspberrypi.conf +++ b/conf/machine/raspberrypi.conf @@ -12,3 +12,21 @@ UBOOT_MACHINE = "rpi_config" SERIAL_CONSOLES ?= "115200;ttyAMA0" ARMSTUB ?= "armstub.bin" + +# +# Below are variables ONLY needed for running with Yocto/OE's runqemu script +# +IMAGE_CLASSES += "qemuboot" + +QB_SYSTEM_NAME = "qemu-system-arm" +QB_MACHINE = "-machine raspi1ap" +QB_MEM = "-m 512" +QB_DTB = "bcm2708-rpi-b-plus.dtb" +QB_NETWORK_DEVICE = "-device usb-net,netdev=net0,mac=@MAC@" +QB_KERNEL_ROOT = "/dev/sda" +# The dwc_otg.fiq_fsm_enable setting is necessary to get USB devices (both disk and net) working. Without this, boot hangs +# The initcall_blacklist=bcm2835_pm_driver_init is needed to workaround boot issues. Seems like the PM HW emulation isn't present +QB_KERNEL_CMDLINE_APPEND = "rootwait initcall_blacklist=bcm2835_pm_driver_init earlycon=pl011,0x20201000 dwc_otg.fiq_fsm_enable=0" +QB_RNG = "" +QB_ROOTFS_OPT = "-drive id=disk0,file=@ROOTFS@,if=none,format=raw -device usb-storage,drive=disk0" +QB_DEFAULT_FSTYPE = "ext3" diff --git a/conf/machine/raspberrypi0.conf b/conf/machine/raspberrypi0.conf index 597918a61..798fb1bd0 100644 --- a/conf/machine/raspberrypi0.conf +++ b/conf/machine/raspberrypi0.conf @@ -6,3 +6,21 @@ MACHINEOVERRIDES =. "raspberrypi:" include conf/machine/raspberrypi.conf SERIAL_CONSOLES ?= "115200;ttyAMA0" + +# +# Below are variables ONLY needed for running with Yocto/OE's runqemu script +# +IMAGE_CLASSES += "qemuboot" + +QB_SYSTEM_NAME = "qemu-system-arm" +QB_MACHINE = "-machine raspi0" +QB_MEM = "-m 512" +QB_DTB = "bcm2708-rpi-zero.dtb" +QB_NETWORK_DEVICE = "-device usb-net,netdev=net0,mac=@MAC@" +QB_KERNEL_ROOT = "/dev/sda" +# The dwc_otg.fiq_fsm_enable setting is necessary to get USB devices (both disk and net) working. Without this, boot hangs +# The initcall_blacklist=bcm2835_pm_driver_init is needed to workaround boot issues. Seems like the PM HW emulation isn't present +QB_KERNEL_CMDLINE_APPEND = "rootwait initcall_blacklist=bcm2835_pm_driver_init earlycon=pl011,0x20201000 dwc_otg.fiq_fsm_enable=0" +QB_RNG = "" +QB_ROOTFS_OPT = "-drive id=disk0,file=@ROOTFS@,if=none,format=raw -device usb-storage,drive=disk0" +QB_DEFAULT_FSTYPE = "ext3" diff --git a/conf/machine/raspberrypi2.conf b/conf/machine/raspberrypi2.conf index 1d4655ec9..f502034a7 100644 --- a/conf/machine/raspberrypi2.conf +++ b/conf/machine/raspberrypi2.conf @@ -22,9 +22,10 @@ QB_SYSTEM_NAME = "qemu-system-arm" QB_MACHINE = "-machine raspi2b" QB_MEM = "-m 1024" QB_DTB = "bcm2709-rpi-2-b.dtb" -QB_NET = "none" -QB_KERNEL_ROOT = "/dev/mmcblk0" -QB_KERNEL_CMDLINE_APPEND = "rootwait" +QB_NETWORK_DEVICE = "-device usb-net,netdev=net0,mac=@MAC@" +QB_KERNEL_ROOT = "/dev/sda" +# The dwc_otg.fiq_fsm_enable setting is necessary to get USB devices (both disk and net) working. Without this, boot hangs +QB_KERNEL_CMDLINE_APPEND = "rootwait earlycon=pl011,0x3f201000 dwc_otg.fiq_fsm_enable=0" QB_RNG = "" -QB_ROOTFS_OPT = "-drive id=disk0,file=@ROOTFS@,if=sd,format=raw" +QB_ROOTFS_OPT = "-drive id=disk0,file=@ROOTFS@,if=none,format=raw -device usb-storage,drive=disk0" QB_DEFAULT_FSTYPE = "ext3" diff --git a/conf/machine/raspberrypi3-64.conf b/conf/machine/raspberrypi3-64.conf index 53e7c2af5..af7712a17 100644 --- a/conf/machine/raspberrypi3-64.conf +++ b/conf/machine/raspberrypi3-64.conf @@ -35,3 +35,19 @@ SERIAL_CONSOLES ?= "115200;ttyS0" VC4DTBO ?= "vc4-fkms-v3d" ARMSTUB ?= "armstub8.bin" + +# +# Below are variables ONLY needed for running with Yocto/OE's runqemu script +# +IMAGE_CLASSES += "qemuboot" + +QB_SYSTEM_NAME = "qemu-system-aarch64" +QB_MACHINE = "-machine raspi3b" +QB_MEM = "-m 1024" +QB_DTB = "bcm2837-rpi-3-b.dtb" +QB_NETWORK_DEVICE = "-device usb-net,netdev=net0,mac=@MAC@" +QB_KERNEL_ROOT = "/dev/sda" +QB_KERNEL_CMDLINE_APPEND = "rootwait earlycon=pl011,0x3f201000" +QB_RNG = "" +QB_ROOTFS_OPT = "-drive id=disk0,file=@ROOTFS@,if=none,format=raw -device usb-storage,drive=disk0" +QB_DEFAULT_FSTYPE = "ext3" diff --git a/conf/machine/raspberrypi4-64.conf b/conf/machine/raspberrypi4-64.conf index 1d9377264..d6b51cc9c 100644 --- a/conf/machine/raspberrypi4-64.conf +++ b/conf/machine/raspberrypi4-64.conf @@ -39,3 +39,19 @@ KERNEL_IMAGETYPE_DIRECT ?= "Image" KERNEL_BOOTCMD ?= "booti" ARMSTUB ?= "armstub8-gic.bin" + +# +# Below are variables ONLY needed for running with Yocto/OE's runqemu script +# +IMAGE_CLASSES += "qemuboot" + +QB_SYSTEM_NAME = "qemu-system-aarch64" +QB_MACHINE = "-machine raspi4b" +QB_MEM = "-m 2048" +QB_DTB = "bcm2711-rpi-4-b.dtb" +QB_NETWORK_DEVICE = "-device usb-net,netdev=net0,mac=@MAC@" +QB_KERNEL_ROOT = "/dev/sda" +QB_KERNEL_CMDLINE_APPEND = "rootwait earlycon=pl011,mmio32,0xfe201000" +QB_RNG = "" +QB_ROOTFS_OPT = "-drive id=disk0,file=@ROOTFS@,if=none,format=raw -device usb-storage,drive=disk0" +QB_DEFAULT_FSTYPE = "ext3" diff --git a/kas-poky-rpi.yml b/kas/base.yml similarity index 81% rename from kas-poky-rpi.yml rename to kas/base.yml index e3f93639b..b3e8beea6 100644 --- a/kas-poky-rpi.yml +++ b/kas/base.yml @@ -1,40 +1,41 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/siemens/kas/master/kas/schema-kas.json +# header: - version: 8 + version: 14 -machine: raspberrypi4 +machine: unset distro: poky target: - core-image-base +defaults: + repos: + branch: master + repos: meta-raspberry: bitbake: url: https://git.openembedded.org/bitbake path: layers/bitbake - branch: master layers: bitbake: disabled openembedded-core: url: https://git.openembedded.org/openembedded-core path: layers/openembedded-core - branch: master layers: meta: meta-yocto: url: https://git.yoctoproject.org/meta-yocto path: layers/meta-yocto - branch: master layers: meta-poky: - meta-yocto-bsp: meta-openembedded: url: http://git.openembedded.org/meta-openembedded path: layers/meta-openembedded - branch: master layers: meta-oe: meta-python: @@ -44,16 +45,20 @@ repos: meta-qt5: url: https://github.com/meta-qt5/meta-qt5/ path: layers/meta-qt5 - branch: master + +env: + BB_LOGCONFIG: "" + BB_HASHSERVE: "auto" bblayers_conf_header: standard: | POKY_BBLAYERS_CONF_VERSION = "2" BBPATH = "${TOPDIR}" BBFILES ?= "" + local_conf_header: reduce_diskspace: | - INHERIT += "rm_work_and_downloads" + INHERIT += "rm_work" standard: | CONF_VERSION = "2" PACKAGE_CLASSES = "package_rpm" @@ -72,7 +77,3 @@ local_conf_header: HALT,${DL_DIR},100M,1K \ HALT,${SSTATE_DIR},100M,1K \ HALT,/tmp,10M,1K" - license: | - # Uncomment next line to allow the license - # See: linux-firmware-rpidistro in docs/ipcompliance.md - #LICENSE_FLAGS_ACCEPTED = "synaptics-killswitch" diff --git a/kas/raspberrypi.yml b/kas/raspberrypi.yml new file mode 100644 index 000000000..32f65fd11 --- /dev/null +++ b/kas/raspberrypi.yml @@ -0,0 +1,8 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/siemens/kas/master/kas/schema-kas.json + +header: + version: 14 + includes: + - kas/base.yml + +machine: raspberrypi diff --git a/kas/raspberrypi0.yml b/kas/raspberrypi0.yml new file mode 100644 index 000000000..bf83dfbad --- /dev/null +++ b/kas/raspberrypi0.yml @@ -0,0 +1,8 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/siemens/kas/master/kas/schema-kas.json + +header: + version: 14 + includes: + - kas/base.yml + +machine: raspberrypi0 diff --git a/kas/raspberrypi2-64.yml b/kas/raspberrypi2-64.yml new file mode 100644 index 000000000..05f9214a9 --- /dev/null +++ b/kas/raspberrypi2-64.yml @@ -0,0 +1,8 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/siemens/kas/master/kas/schema-kas.json + +header: + version: 14 + includes: + - kas/base.yml + +machine: raspberrypi2-64 diff --git a/kas/raspberrypi2.yml b/kas/raspberrypi2.yml new file mode 100644 index 000000000..46d40430d --- /dev/null +++ b/kas/raspberrypi2.yml @@ -0,0 +1,8 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/siemens/kas/master/kas/schema-kas.json + +header: + version: 14 + includes: + - kas/base.yml + +machine: raspberrypi2 diff --git a/kas/raspberrypi3-64.yml b/kas/raspberrypi3-64.yml new file mode 100644 index 000000000..79c45db24 --- /dev/null +++ b/kas/raspberrypi3-64.yml @@ -0,0 +1,14 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/siemens/kas/master/kas/schema-kas.json + +header: + version: 14 + includes: + - kas/base.yml + +local_conf_header: + license: | + # Uncomment next line to allow the license + # See: linux-firmware-rpidistro in docs/ipcompliance.md + LICENSE_FLAGS_ACCEPTED = "synaptics-killswitch" + +machine: raspberrypi3-64 diff --git a/kas/raspberrypi3.yml b/kas/raspberrypi3.yml new file mode 100644 index 000000000..7ddc7c360 --- /dev/null +++ b/kas/raspberrypi3.yml @@ -0,0 +1,14 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/siemens/kas/master/kas/schema-kas.json + +header: + version: 14 + includes: + - kas/base.yml + +local_conf_header: + license: | + # Uncomment next line to allow the license + # See: linux-firmware-rpidistro in docs/ipcompliance.md + LICENSE_FLAGS_ACCEPTED = "synaptics-killswitch" + +machine: raspberrypi3 diff --git a/kas/raspberrypi4-64.yml b/kas/raspberrypi4-64.yml new file mode 100644 index 000000000..b09437ac6 --- /dev/null +++ b/kas/raspberrypi4-64.yml @@ -0,0 +1,14 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/siemens/kas/master/kas/schema-kas.json + +header: + version: 14 + includes: + - kas/base.yml + +local_conf_header: + license: | + # Uncomment next line to allow the license + # See: linux-firmware-rpidistro in docs/ipcompliance.md + LICENSE_FLAGS_ACCEPTED = "synaptics-killswitch" + +machine: raspberrypi4-64 diff --git a/kas/raspberrypi4.yml b/kas/raspberrypi4.yml new file mode 100644 index 000000000..cfed792eb --- /dev/null +++ b/kas/raspberrypi4.yml @@ -0,0 +1,14 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/siemens/kas/master/kas/schema-kas.json + +header: + version: 14 + includes: + - kas/base.yml + +local_conf_header: + license: | + # Uncomment next line to allow the license + # See: linux-firmware-rpidistro in docs/ipcompliance.md + LICENSE_FLAGS_ACCEPTED = "synaptics-killswitch" + +machine: raspberrypi4 diff --git a/kas/testimage.yml b/kas/testimage.yml new file mode 100644 index 000000000..884476ad5 --- /dev/null +++ b/kas/testimage.yml @@ -0,0 +1,28 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/siemens/kas/master/kas/schema-kas.json + +header: + version: 14 + +local_conf_header: + testimage: | + IMAGE_CLASSES += "testimage" + TESTIMAGE_AUTO = "1" + # Don't testimage initramfs + TESTIMAGE_AUTO:pn-core-image-initramfs-boot = "0" + kvm: | + QEMU_USE_KVM = "" + slirp: | + TEST_RUNQEMUPARAMS = "slirp" + sshd: | + IMAGE_FEATURES += "ssh-server-dropbear" + sshkeys: | + CORE_IMAGE_EXTRA_INSTALL += "ssh-pregen-hostkeys" + sshpregen: | + # Allow the use of the pregen keys as this is CI so safe + COMPATIBLE_MACHINE:pn-ssh-pregen-hostkeys:raspberrypi = "raspberrypi" + COMPATIBLE_MACHINE:pn-ssh-pregen-hostkeys:raspberrypi0 = "raspberrypi0" + COMPATIBLE_MACHINE:pn-ssh-pregen-hostkeys:raspberrypi2 = "raspberrypi2" + COMPATIBLE_MACHINE:pn-ssh-pregen-hostkeys:raspberrypi3-64 = "raspberrypi3-64" + COMPATIBLE_MACHINE:pn-ssh-pregen-hostkeys:raspberrypi4-64 = "raspberrypi4-64" + failing_tests: | + TEST_SUITES:remove = "parselogs" diff --git a/lib/oeqa/runtime/cases/parselogs_rpi.py b/lib/oeqa/runtime/cases/parselogs_rpi.py deleted file mode 100644 index 49226ae81..000000000 --- a/lib/oeqa/runtime/cases/parselogs_rpi.py +++ /dev/null @@ -1,12 +0,0 @@ -from oeqa.runtime.cases.parselogs import * - -rpi_errors = [ -] - -ignore_errors['raspberrypi4'] = rpi_errors + common_errors -ignore_errors['raspberrypi4-64'] = rpi_errors + common_errors -ignore_errors['raspberrypi3'] = rpi_errors + common_errors -ignore_errors['raspberrypi3-64'] = rpi_errors + common_errors - -class ParseLogsTestRpi(ParseLogsTest): - pass diff --git a/recipes-core/init-ifupdown/files/interfaces b/recipes-core/init-ifupdown/files/interfaces new file mode 100644 index 000000000..6785c8738 --- /dev/null +++ b/recipes-core/init-ifupdown/files/interfaces @@ -0,0 +1,31 @@ +# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8) + +# The loopback interface +auto lo +iface lo inet loopback + +# Wireless interfaces +iface wlan0 inet dhcp + wireless_mode managed + wireless_essid any + wpa-driver wext + wpa-conf /etc/wpa_supplicant.conf + +iface atml0 inet dhcp + +# Wired or wireless interfaces including predictable names +auto eth0 +iface eth0 inet dhcp +iface eth1 inet dhcp + +# Busybox ifupdown won't process /en* correctly +auto /en*=eth +iface eth inet dhcp + +# Ethernet/RNDIS gadget (g_ether) +# ... or on host side, usbnet and random hwaddr +auto usb0 +iface usb0 inet dhcp + +# Bluetooth networking +iface bnep0 inet dhcp diff --git a/recipes-core/init-ifupdown/init-ifupdown_1.0.bbappend b/recipes-core/init-ifupdown/init-ifupdown_1.0.bbappend new file mode 100644 index 000000000..65e17287b --- /dev/null +++ b/recipes-core/init-ifupdown/init-ifupdown_1.0.bbappend @@ -0,0 +1,6 @@ +# +# Enable second network interface on startup +# +PACKAGE_ARCH = "${MACHINE_ARCH}" + +FILESEXTRAPATHS:prepend := "${THISDIR}/files:"