1
0
mirror of https://git.yoctoproject.org/meta-arm synced 2026-07-19 16:57:09 +00:00

Compare commits

..

34 Commits

Author SHA1 Message Date
Nathan Dunne e219ef606e arm-autonomy/u-boot: Modified kernel_addr for fvp-base with xen
Modified the default booti command for fvp-base with xen to boot
into xen at 0x84000000, rather than requiring the user to break
into the u-boot prompt.

Issue-Id: SCM-2195
Signed-off-by: Nathan Dunne <Nathan.Dunne@arm.com>
Change-Id: I91f324ce77716474596a78f97e74f432969d9803
Signed-off-by: Jon Mason <jon.mason@arm.com>
2021-03-25 09:32:52 -04:00
Richard Neill fc4b2f8907 arm-autonomy/linux-arm-autonomy: Drop XenStore initialisation patch
With the linux-yocto version upgrade, the xenstore initialisation patch is no
longer necessary.

Issue-Id: SCM-2263
Signed-off-by: Richard Neill <richard.neill@arm.com>
Change-Id: I293a5f81b48c57f3af1c99606af776537f35f0bb
Signed-off-by: Jon Mason <jon.mason@arm.com>
2021-03-15 22:59:44 -04:00
Richard Neill d8074cb6a0 arm-autonomy/xen: remove patches that have been mainlined in xen 4.14.1
Remove the 4 patches from recipes-extended/xen/xen_4.14.bbappend that
have been integrated in xen 4.14.1

Issue-Id: SCM-2133
Signed-off-by: Richard Neill <richard.neill@arm.com>
Change-Id: If38262d17699794eb600b11e131c168ed4de4391
Signed-off-by: Jon Mason <jon.mason@arm.com>
2021-03-08 09:12:15 -05:00
Richard Neill 48720822d6 arm-autonomy: Add meta-networking dependency to autonomy layer config
meta-arm-autonomy requires the bridge-utils package, which is provided by the
meta-openembedded/meta-networking layer. This patch adds the explicit
dependency.

Issue-Id: SCM-2166
Signed-off-by: Richard Neill <richard.neill@arm.com>
Change-Id: If2a79755ac1f16fafa994e16ac980a37999692db
Signed-off-by: Jon Mason <jon.mason@arm.com>
2021-03-04 15:17:22 -05:00
Ross Burton 7336830dab kas: update meta-clang to use the gatesgarth branch
When the CI was written there wasn't a gatesgarth branch, but there is now
and it is needed as master meta-clang doesn't work with gatesgarth oe-core.

Change-Id: Ief06b6c5be11dd7fc77520f5601b662bdca52891
Signed-off-by: Ross Burton <ross.burton@arm.com>
Signed-off-by: Jon Mason <jon.mason@arm.com>
2021-03-04 15:17:11 -05:00
Ross Burton 332410055a arm/opencsd: backport patch to fix build race
Change-Id: I46ea9cfa5e149db000740b4a2c6730ced99340ef
Signed-off-by: Ross Burton <ross.burton@arm.com>
Signed-off-by: Jon Mason <jon.mason@arm.com>
2021-03-04 15:17:11 -05:00
Richard Neill 7c3a55f8ff arm-autonomy/linux-arm-autonomy: Add Xen per-cpu address translation patch
Adds a kernel patch to avoid Xen guest initialisation failure when converting a
virtual address to a frame number when the initial address space has a
non-contiguous physical layout.

The patch is mainlined for kernel versions >= 5.9, so we only apply it for
earlier versions.

Issue-Id: SCM-1910
Change-Id: Icf84535718779f91eb668d178a118c96e05f54de
Signed-off-by: Richard Neill <richard.neill@arm.com>
Signed-off-by: Jon Mason <jon.mason@arm.com>
2021-03-03 15:10:06 -05:00
Ross Burton ac9f59ca62 CI: don't retry jobs
We can't retry jobs blindly because if a build fails with warnings we want
to fail the job.  With retries enabled the job fails, but is immediately
retried and builds quickly from sstate without any warnings.

Thus, all and any warnings are hidden.

Disabling retries. We may get occasional failures from Docker, we'll have
to see how bad they are.

Change-Id: Ib726f14a264c029fdf372fc1b8a02aca52bf5e4c
Signed-off-by: Ross Burton <ross.burton@arm.com>
2021-02-22 11:48:30 +00:00
Ross Burton fb196bacd6 kas: meta-kernel is no longer needed
Change-Id: I36d34828fe34c02c15afdf92330ec9a95a93c170
Signed-off-by: Ross Burton <ross.burton@arm.com>
2021-02-22 11:47:52 +00:00
Diego Sueiro 6e3e29857c arm-autonomy: Fix xenbus probe for guest kernels < 5.4.99
The arm64-autonomy-guest kernel from commit a09d4e7acdbf ("xen: Fix event
channel callback via INTX/GSI") are hanging at `hw-breakpoint: found 6
breakpoint and 4 watchpoint registers.`.
The arm-autonomy-guest kernels older than 5.4.99 need to backport the
0001-arm-xen-Don-t-probe-xenbus-as-part-of-an-early-initc.patch in order
to be able to boot.

Issue-Id: SCM-2151
Signed-off-by: Diego Sueiro <diego.sueiro@arm.com>
Change-Id: I56c558f518336567eadd5dc69fd9334c23b19cd8
Signed-off-by: Jon Mason <jon.mason@arm.com>
2021-02-18 22:50:18 -05:00
Diego Sueiro d235d4b53e arm-autonomy: Fix XenStore initialisation for host kernels < 5.4.95
The arm-autonomy-host kernels older than 5.4.95 need to backport the
0001-xen-Fix-XenStore-initialisation-for-XS_LOCAL.patch in order to be able to
use the `xl block-attach` and fix this issue:
```
xl block-attach 0 "phy:/dev/vg-xen-vda3/base" xvda w
libxl: error: libxl_xshelp.c:201:libxl__xs_read_mandatory: xenstore read failed: `/libxl/0/type': No such file or directory
libxl: warning: libxl_dom.c:52:libxl__domain_type: unable to get domain type for domid=0, assuming HVM
libxl: error: libxl_disk.c:314:device_disk_add: device already exists in xenstore
libxl: error: libxl_device.c:1407:device_addrm_aocomplete: unable to add device
```

This issue is not present in linux-linaro-arm[-rt] 5.4.0 used by N1SDP, hence
we do not apply this patch for it.

Issue-Id: SCM-2151
Signed-off-by: Diego Sueiro <diego.sueiro@arm.com>
Change-Id: Iea22c54e86db17952662faf75cae94d0ef18d4f3
Signed-off-by: Jon Mason <jon.mason@arm.com>
2021-02-18 22:50:18 -05:00
Diego Sueiro 5207074884 arm-autonomy/linux-arm-autonomy: apply runstate fix to kernels older than 5.10
The patch introduced in 82ffc86 is a backport from the 5.10 version. Hence,
just apply it for kernels older than 5.10.

Issue-Id: SCM-2033
Signed-off-by: Diego Sueiro <diego.sueiro@arm.com>
Change-Id: I6bccc0c75d931d8046260c61afb53395bb9d2d1b
Signed-off-by: Jon Mason <jon.mason@arm.com>
2021-02-18 22:50:18 -05:00
Jon Mason 7185d29de9 arm-toolchain: Fix potential runtime crash
GCCv9 tree vectorization code is faulty and can cause random crashes at
runtime (when using -O3).  Add the backported patch to address this
issue.

Change-Id: If7bb0ba0720bab42e7d34f3679d988934f657392
Signed-off-by: Jon Mason <jon.mason@arm.com>
2021-02-16 09:45:48 -05:00
Nathan Dunne 932d35bab0 arm-autonomy/documentation: Remove references to meta-kernel
Since meta-arm-bsp doesn't depend on meta-kernel anymore
it has been removed from the appropriate documentation.

Issue-Id: SCM-2005
Signed-off-by: Nathan Dunne <Nathan.Dunne@arm.com>
Change-Id: If3548b84c4cffc5cc105a1fc07a656dc814699f3
Signed-off-by: Jon Mason <jon.mason@arm.com>
2021-01-25 11:11:22 -05:00
Kamil Dziezyk d12eadacd0 arm-autonomy/juno-firmware: add compressed kernel support
This patch adds support for lzma compressed kernel,
by setting KERNEL_ALT_IMAGETYPE to 'Image.lzma' and
adding additional decompression step during u-boot boot stage.

U-boot automatic Image decompression cannot be used here,
because if xen binary is the target of 'booti' command,
Image is not being decompressed neither by u-boot nor by xen.

Lzma compression is supported in u-boot with 'lzmadec' command,
and does not require setting additional dependencies inside kernel recipe.

Change-Id: I51b9aea962f8905f88b60ac28e71017c7d500189
Issue-Id: SCM-1769
Signed-off-by: Kamil Dziezyk <kamil.dziezyk@arm.com>
Signed-off-by: Diego Sueiro <diego.sueiro@arm.com>
Signed-off-by: Jon Mason <jon.mason@arm.com>
2021-01-08 10:15:06 -05:00
Kamil Dziezyk e45752aa6f arm-autonomy/autonomy-host: add user defined partition to wic image
With this patch user can define additional partition entry,
via AUTONOMY_HOST_EXTRA_PARTITION variable.

Issue-Id: SCM-1514
Signed-off-by: Kamil Dziezyk <kamil.dziezyk@arm.com>
Change-Id: Ic103a40de44ea6cd88caa60f06033a9c678b265f
Signed-off-by: Jon Mason <jon.mason@arm.com>
2021-01-08 10:15:06 -05:00
Kamil Dziezyk a365b3bd7e arm-autonomy/juno-image-customization: add host wks file
This patch also appends 'wic wic.gz wic.bmap' images,
to IMAGE_FSTYPES.

WKS file contains two partition entries:
 * first is rootfs partition
 * second is empty partition (4 GiB by default)

Issue-Id: SCM-1520
Signed-off-by: Kamil Dziezyk <kamil.dziezyk@arm.com>
Change-Id: Ic0c79ee5eb4b08ad8f9c133b267feda1c85519a3
Signed-off-by: Jon Mason <jon.mason@arm.com>
2021-01-08 10:15:06 -05:00
Nathan Dunne 7b82307c0a arm-autonomy/arm-autonomy-host-image-minimal: Added multiconfig support
Added new documentation file arm-autonomy-multiconfig.md which explains
how to set up a multiconfig build, where both the host and guest are
built simultaneously in the same build dir.

To enable this feature the dependency between host and guest is set in
the image recipe, using the variables described in the documentation.

Issue-Id: SCM-638
Signed-off-by: Nathan Dunne <Nathan.Dunne@arm.com>
Change-Id: Iae315c128dc6d2b39281312bc1a2ab9b88f6241e
Signed-off-by: Jon Mason <jon.mason@arm.com>
2021-01-08 10:15:06 -05:00
Jon Mason a72b89ccd1 arm-bsp: fix sgi575 kernel compile warning
SGI575 throws a config warning when compiling the 5.7 kernel.

WARNING: linux-yocto-5.7.19+gitAUTOINC+b9e6fd082d_6b9830fecd-r0 do_kernel_configcheck: [kernel config]: specified values did not make it into the kernel's final configuration:

    [NOTE]: 'CONFIG_USB_CONN_GPIO' last val (m) and .config val (y) do not match
    [INFO]: CONFIG_USB_CONN_GPIO : y ## .config: 5334 :configs///defconfig (m)
    [INFO]: raw config text:

        config USB_CONN_GPIO
        	tristate "USB GPIO Based Connection Detection Driver"
        	select USB_ROLE_SWITCH
        	depends on GPIOLIB && USB_SUPPORT
        	help
        	  The driver supports USB role switch between host and device via GPIO
        	  based USB cable detection, used typically if an input GPIO is used
        	  to detect USB ID pin, and another input GPIO may be also used to detect
        	  Vbus pin at the same time, it also can be used to enable/disable
        	  device if an input GPIO is only used to detect Vbus pin.

        	  To compile the driver as a module, choose M here: the module will
        	  be called usb-conn-gpio.ko

        Config 'USB_CONN_GPIO' has the following Direct dependencies (USB_CONN_GPIO=y):
                GPIOLIB(=y) && USB_SUPPORT(=y)
        Parent dependencies are:
             USB_SUPPORT [y] GPIOLIB [y]

    [INFO]: selection details for 'CONFIG_USB_CONN_GPIO':
        Symbols currently y-selecting this symbol:
          - PHY_TEGRA_XUSB

It is using the defconfig from upstream Linux.  So, change that
defconfig to correct the warning by changing USB_CONN_GPIO from 'm' to
'y'.

Change-Id: Ia5080f7f22d0f1aef065b58d8c3b0222625c8f58
Signed-off-by: Jon Mason <jon.mason@arm.com>
2020-12-18 16:00:43 -05:00
Ross Burton 1cd14b33c1 ci: fail any build that emits warnings
Using a custom logging.yml we can instruct BitBake's logger to write all
warnings and errors into a separate log file.

Then after the build has finished we can see if the log file is empty and if
not show it and abort the build.

Change-Id: Ida835b5c822941fb513dfb1758b4ec195e0050fc
Signed-off-by: Ross Burton <ross.burton@arm.com>
2020-12-17 12:40:07 +00:00
Ross Burton 27ed22b040 ci: make bootstrap just another kas overlay
Simplify the gitlab-ci by having the bootstrap build as just another Kas
overlay file, so there's no duplication of build script.

Change-Id: I7341750d2ae7f3c146bfe323f61fa98c0f3121c0
Signed-off-by: Ross Burton <ross.burton@arm.com>
2020-12-17 12:40:05 +00:00
Ross Burton b97016fcfa kas: remove redundant env settings
These are left over from an experiment and are no longer needed.

Change-Id: I27677b58e4c196371a394f47b185f71917848528
Signed-off-by: Ross Burton <ross.burton@arm.com>
2020-12-17 12:40:03 +00:00
Ross Burton eff9e62526 gitlab-ci: force git updates
Explicitly force kas to update in case the repositories are reused.

Change-Id: Ieedf518c7586bb1a4eff274dc1a33b52a3c49d9f
Signed-off-by: Ross Burton <ross.burton@arm.com>
2020-12-17 12:39:55 +00:00
Jon Mason 892c9686bf arm-bsp: fix missing stable kernels
Corstone, a5ds, and sgi575 were using the meta-kernel, but recent
updates removed support for their non-LTS kernel.  Change to using the
respective kernels present in linux-yocto until it can be upgraded to
the latest version.

Change-Id: I63f2e511fe69051c06e6559950b798c1371cc8e9
Signed-off-by: Jon Mason <jon.mason@arm.com>
Signed-off-by: Ross Burton <ross.burton@arm.com>
2020-12-17 12:39:55 +00:00
Ross Burton e8cc03775e arm/qemuarm64-secureboot: don't use -dev kernel
According to the comment linux-yocto-dev was being used to get a 5.5
kernel as 5.4 was panicking on boot.  Now linux-yocto defaults to 5.8
so just use the standard kernel instead.

Change-Id: Id382c69f16f2ff4b2cbc63be94a645e56616549d
Signed-off-by: Ross Burton <ross.burton@arm.com>
Signed-off-by: Jon Mason <jon.mason@arm.com>
2020-12-11 09:12:58 -05:00
Kamil Dziezyk 4cae9fe87b arm-autonomy/xen-tools: update vif hostname fix patch status
Fix for hostname setting in vif-nat script was merged in xen upstream repo,
(sha: 5499e0fc8082024bf7e2d0facd5c976e82105070),
hence correct patch status for 4.14 is 'Backport'.

Issue-Id: SCM-1523
Signed-off-by: Kamil Dziezyk <kamil.dziezyk@arm.com>
Change-Id: I35f04bfa0f0fff81a1ef20d500b9323e5f13b9ed
Signed-off-by: Jon Mason <jon.mason@arm.com>
2020-12-09 15:55:34 -05:00
Ross Burton 784ef62cc4 Add experimental CI using Kas+GitLab
Add kas scripts that generic to test builds, and a GitLab CI runner.

Change-Id: I9026fd1af4155288c4adb523d00b1562ea8515e9
Signed-off-by: Ross Burton <ross.burton@arm.com>
2020-11-30 15:51:41 +00:00
Ross Burton 1a0a9700f2 arm-bsp/external-system: remove coreutils-native DEPENDS
This recipe doesn't appear to actually need coreutils-native at all, and
using it exposes a bug in pseudo where cp crashes.

Change-Id: I2fbf9ee75165194866e4a14758ed06148340dc2b
Signed-off-by: Ross Burton <ross.burton@arm.com>
2020-11-25 17:48:17 +00:00
Khasim Mohammed ba30bf591e arm-bsp/n1sdp-board-firmware: include RAM firmware for secondary device
While testing multi-chip mode it was observed that n1sdp running
as secondary device needs scp and mcp RAM firmware as well.

This issue wasn't captured earlier as QSPI flash had RAM firmware installed
and it doesn't get erased automatically therefore the device was able to
load it on every reboot.

Change-Id: Ied9d24429c7025206e35f50c8e5b6f090a590015
Signed-off-by: Khasim Syed Mohammed <khasim.mohammed@arm.com>
Signed-off-by: Ross Burton <ross.burton@arm.com>
2020-11-25 16:06:33 +00:00
Khasim Syed Mohammed 0c59d1cf42 arm-bsp/n1sdp: add overview section to n1sdp documentation
Update the n1sdp documentation in meta-arm-bsp to include overview section
and link to Arm community portal for further details on hardware platform.

Change-Id: Ic7c212db18a8c1f24255615061eee862af3aafd1
Signed-off-by: Khasim Syed Mohammed <khasim.mohammed@arm.com>
Signed-off-by: Ross Burton <ross.burton@arm.com>
2020-11-25 16:06:31 +00:00
Kamil Dziezyk 289982e1cb arm-autonomy/xen-devicetree: check if kernel Image size is correct
This patch brings following improvements:
 * Adds a check for kernel size defined by XEN_DEVICETREE_DOM0_SIZE variable,
   whether it is greater or equal to actual kernel size.
   If not, bitbake warns user and adjusts value of XEN_DEVICETREE_DOM0_SIZE.
 * Adds 'virtual/kernel:do_deploy' as a mandatory xen-devicetree dependency via
   XEN_DEVICETREE_DEPEND variable.

Issue-Id: SCM-1567
Signed-off-by: Kamil Dziezyk <kamil.dziezyk@arm.com>
Change-Id: I4f250172f1fa599b7a3673ba0887cd49372b7556
Signed-off-by: Ross Burton <ross.burton@arm.com>
2020-11-25 12:50:03 +00:00
Kamil Dziezyk 44e51aa5be arm-autonomy/firmware-image-juno: update offset addresses for NOR flash images
This patch brings following improvements:
 * Remove images-r[012].txt and uEnv.txt source files
   and move all customization to add-xen-support.patch.
 * Move juno*-xen.dtb and xen binaries under dedicated
   'XEN' directory to be compatible with 8.3 format.
 * Increase XEN_DEVICETREE_DOM0_SIZE to 36 MiB.

Change-Id: I3d3ff963f97c738dcf2d90ba825729232d63ad06
Issue-Id: SCM-1567
Signed-off-by: Kamil Dziezyk <kamil.dziezyk@arm.com>
Signed-off-by: Ross Burton <ross.burton@arm.com>
2020-11-25 12:49:34 +00:00
Khasim Mohammed b8bb75b4d3 arm-bsp/n1sdp: remove swap parition entry from wic image
The swap partition on n1sdp seem to create an issue when shutdown or reboot is run
from the shell prompt, the console stops at "Deactivating swap ...". Hence
removing the swap partition entry from wic image.

Change-Id: I22cf971fdde7e3b8b386c74003983fab3d309cc5
Signed-off-by: Khasim Syed Mohammed <khasim.mohammed@arm.com>
Signed-off-by: Jon Mason <jon.mason@arm.com>
2020-11-19 08:48:44 -05:00
Kamil Dziezyk 0057143f4b arm-autonomy/xenguest-init: fix guest shutdown issues after host reboot
This patch contain following changes:
 * xenguest-init stop action uses now blocking call,
   and additional 'xl destroy guest' call if normal shutdown has failed.
 * xenguest-init stop action stops only running guest.
 * xenguest-init script is now caled before xen-tools scripts
   on host shutdown or reboot.
 * xenguest-network-bridge script is now called before ifupdown script
   on host shutdown or reboot.

Change-Id: I46e307fd0ad36b2e35559b4e8a071be9bbc50e34
Issue-Id: SCM-1632
Signed-off-by: Kamil Dziezyk <kamil.dziezyk@arm.com>
Signed-off-by: Jon Mason <jon.mason@arm.com>
2020-11-19 08:48:17 -05:00
876 changed files with 15900 additions and 70289 deletions
-1
View File
@@ -1 +0,0 @@
__pycache__
+46 -136
View File
@@ -1,96 +1,58 @@
image: ghcr.io/siemens/kas/kas:latest-release # Use our custom Crops-derived image
image: $CI_REGISTRY/$CI_PROJECT_NAMESPACE/yocto-builder:master
# First do a common bootstrap, and then build all the targets
stages: stages:
- prep - bootstrap
- build - build
# Common job fragment to get a worker ready # Common job fragment to get a worker ready
.setup: .setup:
stage: build stage: build
interruptible: true
variables: variables:
KAS_WORK_DIR: $CI_PROJECT_DIR/work KAS_WORK_DIR: $CI_PROJECT_DIR/work
KAS_REPO_REF_DIR: $CI_BUILDS_DIR/persist/repos
SSTATE_DIR: $CI_BUILDS_DIR/persist/sstate SSTATE_DIR: $CI_BUILDS_DIR/persist/sstate
DL_DIR: $CI_BUILDS_DIR/persist/downloads DL_DIR: $CI_BUILDS_DIR/persist/downloads
BB_LOGCONFIG: $CI_PROJECT_DIR/ci/logging.yml BB_LOGCONFIG: $CI_PROJECT_DIR/kas/logging.yml
TOOLCHAIN_DIR: $CI_BUILDS_DIR/persist/toolchains
IMAGE_DIR: $CI_PROJECT_DIR/work/build/tmp/deploy/images
TOOLCHAIN_LINK_DIR: $CI_PROJECT_DIR/work/build/toolchains
before_script: before_script:
- echo KAS_WORK_DIR = $KAS_WORK_DIR - echo KAS_WORK_DIR = $KAS_WORK_DIR
- echo SSTATE_DIR = $SSTATE_DIR - echo SSTATE_DIR = $SSTATE_DIR
- echo DL_DIR = $DL_DIR - echo DL_DIR = $DL_DIR
- rm -rf $KAS_WORK_DIR - mkdir --verbose --parents $KAS_WORK_DIR $SSTATE_DIR $DL_DIR
- mkdir --verbose --parents $KAS_WORK_DIR $KAS_REPO_REF_DIR $SSTATE_DIR $DL_DIR $TOOLCHAIN_DIR $TOOLCHAIN_LINK_DIR
# Must do this here, as it's the only way to make sure the toolchain is installed on the same builder
- ./ci/get-binary-toolchains $DL_DIR $TOOLCHAIN_DIR $TOOLCHAIN_LINK_DIR
- sudo apt update && sudo apt install telnet -y
# Generalised fragment to do a Kas build # Generalised fragment to do a Kas build
.build: .build:
extends: .setup extends: .setup
script: script:
- KASFILES=$(./ci/jobs-to-kas "$CI_JOB_NAME") - KASFILES=$(kas/jobs-to-kas $CI_JOB_NAME)
- kas shell --update --force-checkout $KASFILES -c 'cat conf/*.conf' - kas shell --update --force-checkout $KASFILES -c 'cat conf/*.conf'
- kas build $KASFILES - kas build $KASFILES
- ./ci/check-warnings $KAS_WORK_DIR/build/warnings.log - ./kas/check-warnings $KAS_WORK_DIR/build/warnings.log
# Workaround for Zephyr not currectly handling TESTIMAGE_AUTO
.build_and_test:
extends: .setup
script:
- KASFILES=$(./ci/jobs-to-kas "$CI_JOB_NAME")
- kas shell --update --force-checkout $KASFILES -c 'cat conf/*.conf'
- kas build $KASFILES
- kas build $KASFILES -c testimage
- ./ci/check-warnings $KAS_WORK_DIR/build/warnings.log
# #
# Prep stage, update repositories once # First phase, bootstrap and machine coverage
# #
update-repos:
extends: .setup
stage: prep
script:
- flock --verbose --timeout 60 $KAS_REPO_REF_DIR ./ci/update-repos
# Build a number of native tools first to ensure the other builders don't race
# over them
n1sdp/bootstrap:
extends: .build
stage: bootstrap
# What percentage of machines in the layer do we build # What percentage of machines in the layer do we build
machine-coverage: machine-coverage:
stage: build stage: bootstrap
interruptible: true
script: script:
- ./ci/check-machine-coverage - ./kas/check-machine-coverage
coverage: '/Coverage: \d+/' coverage: '/Coverage: \d+/'
# #
# Build stage, the actual build jobs # Second phase, the actual build jobs
# #
# Available options for building are
# TOOLCHAINS: [gcc, clang, armgcc, external-gccarm]
# TCLIBC: [glibc, musl]
# VIRT: [none, xen]
# TESTING: testimage
# Validate layers are Yocto Project Compatible a5ds:
check-layers:
extends: .setup
coverage: '/Coverage: \d+/'
script:
- kas shell --update --force-checkout ci/base.yml:ci/meta-arm-autonomy.yml:ci/meta-openembedded.yml --command \
"$CI_PROJECT_DIR/ci/check-layers.py $CI_PROJECT_DIR/ci/check-layers.yml $CI_PROJECT_DIR $KAS_WORK_DIR"
pending-updates:
extends: .setup
artifacts:
paths:
- update-report.html
script:
- kas shell ci/qemuarm64.yml:ci/meta-openembedded.yml -c "$CI_PROJECT_DIR/scripts/machine-summary.py -t updates.html -o $CI_PROJECT_DIR/update-report.html $($CI_PROJECT_DIR/ci/listmachines.py meta-arm meta-arm-bsp)"
corstone500:
extends: .build extends: .build
corstone700-fvp: corstone700-fvp:
@@ -99,55 +61,23 @@ corstone700-fvp:
corstone700-mps3: corstone700-mps3:
extends: .build extends: .build
corstone1000-fvp: foundation-armv8:
extends: .build
corstone1000-mps3:
extends: .build extends: .build
fvp-base: fvp-base:
extends: .build extends: .build
parallel:
matrix:
- TESTING: testimage
tags:
- x86_64
fvp-base-arm32: fvp-base-arm32:
extends: .build extends: .build
parallel:
matrix:
- TOOLCHAINS: [gcc, external-gccarm]
fvp-baser-aemv8r64:
extends: .build
fvps:
extends: .build
gem5-arm64: gem5-arm64:
extends: .build extends: .build
parallel:
matrix:
- VIRT: [none, xen]
gem5-atp-arm64:
extends: .build
generic-arm64:
extends: .build
juno: juno:
extends: .build extends: .build
parallel:
matrix:
- TOOLCHAINS: [gcc, clang]
microbit-v1: juno/clang:
extends: .build_and_test extends: .build
parallel:
matrix:
- TESTING: testimage-zephyr
musca-b1: musca-b1:
extends: .build extends: .build
@@ -157,62 +87,42 @@ musca-s1:
n1sdp: n1sdp:
extends: .build extends: .build
parallel:
matrix:
- TOOLCHAINS: [gcc, armgcc]
qemu-cortex-a53:
extends: .build
qemu-cortex-m3:
extends: .build_and_test
parallel:
matrix:
- TESTING: testimage-zephyr
qemu-cortex-r5:
extends: .build
qemuarm64-secureboot: qemuarm64-secureboot:
extends: .build extends: .build
parallel:
matrix:
- TOOLCHAINS: [gcc, clang]
TCLIBC: [glibc, musl]
TESTING: testimage
qemuarm64: qemuarm64-secureboot/clang:
extends: .build extends: .build
parallel:
matrix:
- VIRT: xen
qemuarm: qemuarm64-secureboot/clang/musl:
extends: .build extends: .build
parallel:
matrix:
- TOOLCHAINS: [gcc, clang]
TESTING: testimage
- VIRT: xen
qemuarmv5: qemuarm64-secureboot/musl:
extends: .build extends: .build
parallel:
matrix:
- TESTING: testimage
sgi575: sgi575:
extends: .build extends: .build
tc0: tc0:
extends: .build extends: .build
tags:
- x86_64
tc1:
extends: .build
tags:
- x86_64
toolchains: #
extends: .build # Utility tasks, not executed automatically
#
# Report on disk usage
usage:
extends: .setup
stage: bootstrap
when: manual
script:
- du -h -s $DL_DIR $SSTATE_DIR
# Wipe out old sstate
prune-sstate:
extends: .setup
stage: bootstrap
when: manual
script:
- find $SSTATE_DIR -type f -atime +30 -delete
+13 -36
View File
@@ -1,46 +1,23 @@
Introduction Introduction
------------ ------------
This repository contains the Arm layers for OpenEmbedded. This repository contains Arm layers for OpenEmbedded
* meta-arm meta-arm:
This layer provides support for general recipes for the Arm
architecture. Anything that's not needed explicitly for BSPs, the IOTA
distribution, or destined to be upstreamed belongs here.
This layer contains general recipes for the Arm architecture, such as firmware, FVPs, and Arm-specific integration. meta-arm-bsp:
This layer provides support for Arm reference platforms
* meta-arm-autonomy meta-arm-iota:
This layer provides support for Arm's IOTA Linux Distribution
This layer is the distribution for a reference stack for autonomous systems. meta-arm-toolchain:
This layer provides support for Arm's GNU-A toolset releases
* meta-arm-bsp meta-arm-autonomy:
This layer provides a reference stack for autonomous systems.
This layer contains machines for Arm reference platforms, for example FVP Base, N1SDP, and Juno.
* meta-arm-toolchain
This layer contains recipes for Arm's binary toolchains (GCC and Clang for -A and -M), and a recipe to build Arm's GCC.
* meta-atp
This layer contains recipes for the Adaptive Traffic Generation integration into meta-gem5.
* meta-gem5
This layer contains recipes and machines for gem5, a system-level and processor simulator.
Other Directories
-----------------
* ci
This directory contains gitlab continuous integration configuration files (KAS yaml files) as well as scripts needed for this
* kas
This directory contains KAS yaml files to describe builds for systems not used in CI
* scripts
This directory contains scripts used in running the CI tests
Contributing Contributing
------------ ------------
-6
View File
@@ -1,6 +0,0 @@
header:
version: 9
local_conf_header:
cc: |
GCCVERSION = "arm-10.3"
-44
View File
@@ -1,44 +0,0 @@
#! /usr/bin/env python3
import argparse
import pathlib
import re
import subprocess
import sys
import yaml
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("config", type=argparse.FileType())
parser.add_argument("metaarm", type=pathlib.Path, help="Path to meta-arm")
parser.add_argument("others", type=pathlib.Path, help="Path to parent of dependencies")
args = parser.parse_args()
config = yaml.safe_load(args.config)
layers = config["layers"]
dependencies = config["dependencies"]
found_layers = [p for p in args.metaarm.glob("meta-*") if p.is_dir()]
print(f"Testing {len(layers)} layers: {', '.join(layers)}.")
print(f"Found {len(found_layers)} layers in meta-arm.")
print()
cli = ["yocto-check-layer-wrapper",]
cli.extend([args.metaarm / layer for layer in layers])
cli.append("--dependency")
cli.extend([args.others / layer for layer in dependencies])
cli.append("--no-auto-dependency")
passed = 0
process = subprocess.Popen(cli, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True)
while True:
line = process.stdout.readline()
if process.poll() is not None:
break
print(line.strip())
if re.search(r"meta-.+ PASS", line):
passed += 1
print(f"Coverage: {int(passed / len(found_layers) * 100)}%")
sys.exit(process.returncode)
-13
View File
@@ -1,13 +0,0 @@
layers:
- meta-arm
- meta-arm-bsp
- meta-arm-toolchain
- meta-gem5
- meta-arm-autonomy
dependencies:
- meta-openembedded/meta-oe
- meta-openembedded/meta-networking
- meta-openembedded/meta-python
- meta-openembedded/meta-filesystems
- poky/meta-poky
- meta-virtualization
-13
View File
@@ -1,13 +0,0 @@
header:
version: 9
includes:
- base.yml
- meta-openembedded.yml
local_conf_header:
custom-local-conf: |
INITRAMFS_IMAGE_BUNDLE = "0"
INITRAMFS_IMAGE:remove = "corstone1000-initramfs-image"
machine: corstone1000-fvp
-12
View File
@@ -1,12 +0,0 @@
header:
version: 9
includes:
- base.yml
- meta-openembedded.yml
local_conf_header:
custom-local-conf: |
INITRAMFS_IMAGE_BUNDLE = "0"
INITRAMFS_IMAGE:remove = "corstone1000-initramfs-image"
machine: corstone1000-mps3
-8
View File
@@ -1,8 +0,0 @@
header:
version: 9
local_conf_header:
cc: |
PNBLACKLIST[gcc-cross-arm] = "Using external toolchain"
TCMODE = "external-arm"
EXTERNAL_TOOLCHAIN = "${TOPDIR}/toolchains/${TARGET_ARCH}"
-16
View File
@@ -1,16 +0,0 @@
header:
version: 9
includes:
- base.yml
machine: fvp-base
local_conf_header:
testimagefvp: |
INHERIT = "fvpboot"
# This fails but we can't add to the ignorelist from meta-arm yet
# https://bugzilla.yoctoproject.org/show_bug.cgi?id=14604
TEST_SUITES:remove = "parselogs"
# Tell testimage to connect to localhost:8022, and forward that to SSH in the FVP.
TEST_TARGET_IP = "localhost:8022"
FVP_CONFIG[bp.virtio_net.hostbridge.userNetPorts] ?= "8022=22"
-7
View File
@@ -1,7 +0,0 @@
header:
version: 9
includes:
- base.yml
machine: fvp-baser-aemv8r64
-20
View File
@@ -1,20 +0,0 @@
# Simple target to build the FVPs that are publically available
header:
version: 9
includes:
- base.yml
machine: qemuarm64
local_conf_header:
sdk: |
SDKMACHINE = "x86_64"
target:
- nativesdk-fvp-base-a-aem
- nativesdk-fvp-n1-edge
- nativesdk-fvp-sgi575
- nativesdk-fvp-corstone500
- nativesdk-fvp-corstone700
- nativesdk-fvp-tc0
-15
View File
@@ -1,15 +0,0 @@
header:
version: 9
includes:
- gem5-arm64.yml
repos:
meta-arm:
layers:
meta-atp:
machine: gem5-atp-arm64
target:
- atp-native
- core-image-minimal
-6
View File
@@ -1,6 +0,0 @@
header:
version: 9
includes:
- base.yml
machine: generic-arm64
-46
View File
@@ -1,46 +0,0 @@
#!/bin/bash
set -u
HOST_ARCH=$(uname -m)
VER="10.3-2021.07"
DOWNLOAD_DIR=$1
TOOLCHAIN_DIR=$2
TOOLCHAIN_LINK_DIR=$3
# These should be already created by .gitlab-ci.yml, but do here if run outside of that env
mkdir -p $DOWNLOAD_DIR $TOOLCHAIN_DIR $TOOLCHAIN_LINK_DIR
if [ $HOST_ARCH = "aarch64" ]; then
#AArch64 Linux hosted cross compilers
#AArch32 target with hard float (arm-none-linux-gnueabihf)
wget -P $DOWNLOAD_DIR -nc https://developer.arm.com/-/media/Files/downloads/gnu-a/$VER/binrel/gcc-arm-$VER-$HOST_ARCH-arm-none-linux-gnueabihf.tar.xz
elif [ $HOST_ARCH = "x86_64" ]; then
#x86_64 Linux hosted cross compilers
#AArch32 target with hard float (arm-linux-none-gnueabihf)
wget -P $DOWNLOAD_DIR -nc https://developer.arm.com/-/media/Files/downloads/gnu-a/$VER/binrel/gcc-arm-$VER-$HOST_ARCH-arm-none-linux-gnueabihf.tar.xz
#AArch64 GNU/Linux target (aarch64-none-linux-gnu)
wget -P $DOWNLOAD_DIR -nc https://developer.arm.com/-/media/Files/downloads/gnu-a/$VER/binrel/gcc-arm-$VER-$HOST_ARCH-aarch64-none-linux-gnu.tar.xz
#AArch64 GNU/Linux target (aarch64_be-none-linux-gnu)
wget -P $DOWNLOAD_DIR -nc https://developer.arm.com/-/media/Files/downloads/gnu-a/$VER/binrel/gcc-arm-$VER-$HOST_ARCH-aarch64_be-none-linux-gnu.tar.xz
else
echo "ERROR - Unknown build arch of $HOST_ARCH"
exit 1
fi
for i in arm aarch64 aarch64_be; do
if [ ! -d $TOOLCHAIN_DIR/gcc-arm-$VER-$HOST_ARCH-$i-none-linux-gnu*/ ]; then
if [ ! -f $DOWNLOAD_DIR/gcc-arm-$VER-$HOST_ARCH-$i-none-linux-gnu*.tar.xz ]; then
continue
fi
tar -C $TOOLCHAIN_DIR -axvf $DOWNLOAD_DIR/gcc-arm-$VER-$HOST_ARCH-$i-none-linux-gnu*.tar.xz
fi
# Setup a link for the toolchain to use local to the building machine (e.g., not in a shared location)
ln -s $TOOLCHAIN_DIR/gcc-arm-$VER-$HOST_ARCH-$i-none-linux-gnu* $TOOLCHAIN_LINK_DIR/$i
done
-27
View File
@@ -1,27 +0,0 @@
#! /bin/bash
# This script is expecting an input of machine name, optionally followed by a
# colon and a list of one or more parameters separated by commas between
# brackets. For example, the following are acceptable:
# corstone500
# fvp-base: [testimage]
# qemuarm64-secureboot: [clang, glibc, testimage]
#
# Turn this list into a series of yml files separated by colons to pass to kas
set -e -u
FILES="ci/$(echo $1 | cut -d ':' -f 1).yml"
for i in $(echo $1 | cut -s -d ':' -f 2 | sed 's/[][,]//g'); do
# Given that there are no yml files for gcc or glibc, as those are the
# defaults, we can simply ignore those parameters. They are necessary
# to pass in so that matrix can correctly setup all of the permutations
# of each individual run.
if [[ $i == 'none' || $i == 'gcc' || $i == 'glibc' ]]; then
continue
fi
FILES+=":ci/$i.yml"
done
echo $FILES
-29
View File
@@ -1,29 +0,0 @@
#! /usr/bin/env python3
import pathlib
import typing
import sys
"""
List all of the machines available under the listed sub-layers of meta-arm.
"""
def list_machines(layers: typing.Sequence[str]) -> typing.Set[str]:
machines = set()
# We know we're in meta-arm/scripts, so find the top-level directory
metaarm = pathlib.Path(__file__).resolve().parent.parent
if metaarm.name != "meta-arm":
raise Exception("Not running inside meta-arm")
for layer in layers:
machines |= set(p.stem for p in (metaarm / layer / "conf" / "machine").glob("*.conf"))
return machines
if __name__ == "__main__":
if len(sys.argv) > 1:
machines = list_machines(sys.argv[1:])
print(" ".join(sorted(machines)))
sys.exit(0)
else:
print("Usage:\n$ %s [layer name ...] " % sys.argv[0])
sys.exit(1)
-10
View File
@@ -1,10 +0,0 @@
header:
version: 9
includes:
- meta-openembedded.yml
- meta-virtualization.yml
repos:
meta-arm:
layers:
meta-arm-autonomy:
-8
View File
@@ -1,8 +0,0 @@
header:
version: 9
includes:
- meta-openembedded.yml
repos:
meta-virtualization:
url: git://git.yoctoproject.org/meta-virtualization
-16
View File
@@ -1,16 +0,0 @@
header:
version: 9
includes:
- base.yml
- meta-zephyr.yml
local_conf_header:
nonbuilding_tests: |
ZEPHYRTESTS:remove = "common"
failing_tests: |
ZEPHYRTESTS:remove = "context early_sleep sleep"
machine: microbit-v1
target:
- zephyr-kernel-test-all
-14
View File
@@ -1,14 +0,0 @@
header:
version: 9
includes:
- base.yml
- meta-zephyr.yml
local_conf_header:
nonbuilding_tests: |
ZEPHYRTESTS:remove += "common device poll queue sleep"
machine: qemu-cortex-a53
target:
- zephyr-kernel-test-all
-16
View File
@@ -1,16 +0,0 @@
header:
version: 9
includes:
- base.yml
- meta-zephyr.yml
local_conf_header:
tclibc: |
TCLIBC = "newlib"
nonbuilding_tests: |
ZEPHYRTESTS:remove = "common context pending poll sleep"
machine: qemu-cortex-m3
target:
- zephyr-kernel-test-all
-10
View File
@@ -1,10 +0,0 @@
header:
version: 9
includes:
- base.yml
- meta-zephyr.yml
machine: qemu-cortex-r5
target:
- zephyr-philosophers
-19
View File
@@ -1,19 +0,0 @@
header:
version: 9
includes:
- base.yml
machine: qemuarm64-secureboot
local_conf_header:
bugs: |
# Only ping until errors can be resolved
TEST_SUITES = "ping"
target:
- core-image-base
- perf
- optee-examples
- optee-test
- optee-spdevkit
- optee-os-tadevkit
-10
View File
@@ -1,10 +0,0 @@
header:
version: 9
includes:
- base.yml
machine: tc0
target:
- tc-artifacts-image
- perf
-10
View File
@@ -1,10 +0,0 @@
header:
version: 9
includes:
- base.yml
machine: tc1
target:
- tc-artifacts-image
- perf
-8
View File
@@ -1,8 +0,0 @@
header:
version: 9
local_conf_header:
testimage: |
IMAGE_CLASSES += "testimage"
TEST_TARGET = "QemuTargetZephyr"
TEST_SUITES = "zephyr"
-17
View File
@@ -1,17 +0,0 @@
header:
version: 9
local_conf_header:
testimage: |
IMAGE_CLASSES += "testimage"
TESTIMAGE_AUTO = "1"
slirp: |
TEST_RUNQEMUPARAMS = "slirp"
TEST_SERVER_IP = "127.0.0.1"
QEMU_USE_SLIRP = "1"
packages: |
IMAGE_FEATURES:append = " ssh-server-dropbear"
# Multiple targets are available, put it down to just one
target:
- core-image-base
-20
View File
@@ -1,20 +0,0 @@
header:
version: 9
includes:
- base.yml
# Target is arm64 and SDK is x86-64 to ensure that we exercise both
# architectures
machine: qemuarm64
local_conf_header:
toolchains: |
SDKMACHINE = "x86_64"
# No target armcompiler as currently there is no arm64 build
target:
- nativesdk-armcompiler
- gcc-aarch64-none-elf
- nativesdk-gcc-aarch64-none-elf
- gcc-arm-none-eabi
- nativesdk-gcc-arm-none-eabi
-43
View File
@@ -1,43 +0,0 @@
#! /usr/bin/env python3
# Update clones of the repositories we need in KAS_REPO_REF_DIR to speed up fetches
import sys
import os
import subprocess
import pathlib
def repo_shortname(url):
# Taken from Kas (Repo.__getattr__) to ensure the logic is right
from urllib.parse import urlparse
url = urlparse(url)
return ('{url.netloc}{url.path}'
.format(url=url)
.replace('@', '.')
.replace(':', '.')
.replace('/', '.')
.replace('*', '.'))
repositories = (
"https://git.yoctoproject.org/git/poky",
"https://git.openembedded.org/meta-openembedded",
"https://git.yoctoproject.org/git/meta-virtualization",
"https://git.yoctoproject.org/git/meta-zephyr",
"https://github.com/kraj/meta-clang",
)
if __name__ == "__main__":
if "KAS_REPO_REF_DIR" not in os.environ:
print("KAS_REPO_REF_DIR needs to be set")
sys.exit(1)
base_repodir = pathlib.Path(os.environ["KAS_REPO_REF_DIR"])
for repo in repositories:
repodir = base_repodir / repo_shortname(repo)
if repodir.exists():
print("Updating %s..." % repo)
subprocess.run(["git", "-C", repodir, "fetch"], check=True)
else:
print("Cloning %s..." % repo)
subprocess.run(["git", "clone", "--bare", repo, repodir], check=True)
-11
View File
@@ -1,11 +0,0 @@
header:
version: 9
includes:
- meta-virtualization.yml
local_conf_header:
meta-virt: |
DISTRO_FEATURES:append = " virtualization xen"
target:
- xen-image-minimal
+1 -1
View File
@@ -3,4 +3,4 @@ header:
includes: includes:
- base.yml - base.yml
machine: qemuarm machine: a5ds
+8 -9
View File
@@ -5,7 +5,7 @@ distro: poky
defaults: defaults:
repos: repos:
refspec: honister refspec: gatesgarth
repos: repos:
meta-arm: meta-arm:
@@ -22,21 +22,20 @@ repos:
env: env:
BB_LOGCONFIG: "" BB_LOGCONFIG: ""
TOOLCHAIN_DIR: ""
local_conf_header: local_conf_header:
base: | base: |
CONF_VERSION = "2" CONF_VERSION = "1"
PACKAGE_CLASSES = "package_ipk" PACKAGE_CLASSES = "package_ipk"
LICENSE_FLAGS_WHITELIST += "armcompiler Arm-FVP-EULA" LICENSE_FLAGS_WHITELIST += "armcompiler"
PACKAGECONFIG:remove:pn-qemu-system-native = "gtk+ sdl" PACKAGECONFIG_remove_pn-qemu-system-native = "gtk+ sdl"
EXTRA_IMAGE_FEATURES:append = " debug-tweaks"
BB_NUMBER_THREADS = "16" BB_NUMBER_THREADS = "16"
PARALLEL_MAKE = "-j16" PARALLEL_MAKE = "-j16"
INHERIT += "rm_work" INHERIT += "rm_work"
PACKAGECONFIG:append:pn-perf = " coresight" PACKAGECONFIG_append_pn-perf = " coresight"
noptest: | ERROR_QA = "${WARN_QA}"
DISTRO_FEATURES:remove = "ptest" ptest: |
DISTRO_FEATURES_remove = "ptest"
machine: unset machine: unset
+9
View File
@@ -0,0 +1,9 @@
header:
version: 9
target:
- binutils-cross-aarch64
- gcc-cross-aarch64
- python3-native
- opkg-native
- rpm-native
@@ -2,7 +2,6 @@
from pathlib import Path from pathlib import Path
import sys import sys
from listmachines import list_machines
metaarm = Path.cwd() metaarm = Path.cwd()
@@ -10,13 +9,12 @@ if metaarm.name != "meta-arm":
print("Not running inside meta-arm") print("Not running inside meta-arm")
sys.exit(1) sys.exit(1)
# Find all layers
layers = (p.name for p in metaarm.glob("meta-*") if p.is_dir())
# All machine configurations # All machine configurations
machines = list_machines(layers) machines = metaarm.glob("meta-*/conf/machine/*.conf")
machines = set(p.stem for p in machines)
# All kas files # All kas files
kas = metaarm.glob("ci/*.yml") kas = metaarm.glob("kas/*.yml")
kas = set(p.stem for p in kas) kas = set(p.stem for p in kas)
missing = machines - kas missing = machines - kas
+1 -2
View File
@@ -7,8 +7,7 @@ set -e -u
LOGFILE=$1 LOGFILE=$1
LINES=$(grep --invert-match "attempting MIRRORS if available" $LOGFILE | wc -l) if test -s $LOGFILE; then
if test "$LINES" -ne 0; then
echo ============================== echo ==============================
echo The build had warnings/errors: echo The build had warnings/errors:
echo ============================== echo ==============================
+1
View File
@@ -4,6 +4,7 @@ header:
repos: repos:
meta-clang: meta-clang:
url: https://github.com/kraj/meta-clang url: https://github.com/kraj/meta-clang
refspec: gatesgarth
local_conf_header: local_conf_header:
clang: | clang: |
-48
View File
@@ -1,48 +0,0 @@
header:
version: 11
distro: poky-tiny
defaults:
repos:
refspec: honister
repos:
meta-arm:
layers:
meta-arm:
meta-arm-bsp:
meta-arm-toolchain:
poky:
url: https://git.yoctoproject.org/git/poky
refspec: b6b0af0889de9da0e4128cef8c9069b770b7d5a0
layers:
meta:
meta-poky:
meta-yocto-bsp:
meta-openembedded:
url: https://git.openembedded.org/meta-openembedded
refspec: ad52a41de8b4b7d619d1376d0a0090ebcfff56da
layers:
meta-oe:
meta-python:
meta-arm-image:
url: https://git.gitlab.arm.com/arm-reference-solutions/meta-arm-image.git
refspec: 9f611833ef58394b707836d69356c4e27d0265fc
local_conf_header:
base: |
CONF_VERSION = "2"
PACKAGE_CLASSES = "package_ipk"
LICENSE_FLAGS_WHITELIST += "armcompiler"
BB_NUMBER_THREADS ?= "16"
PARALLEL_MAKE ?= "-j16"
PACKAGECONFIG:append:pn-perf = " coresight"
machine: unset
target:
- corstone1000-image
-23
View File
@@ -1,23 +0,0 @@
header:
version: 11
includes:
- kas/corstone1000-base.yml
repos:
run-scripts:
url: https://git.gitlab.arm.com/arm-reference-solutions/model-scripts.git
refspec: b40b4227fe6b6fc8e4b688db8928f4be76e94eb7
layers:
.: 'excluded'
machine: corstone1000-fvp
local_conf_header:
fvp-config: |
# Remove Dropbear SSH as it will not fit into the corstone1000 image.
IMAGE_FEATURES:remove = " ssh-server-dropbear"
INHERIT = " ${@bb.utils.contains('BUILD_ARCH', 'x86_64', 'fvpboot', '', d)}"
LICENSE_FLAGS_WHITELIST:append = " Arm-FVP-EULA"
target:
- corstone1000-image
-6
View File
@@ -1,6 +0,0 @@
header:
version: 11
includes:
- kas/corstone1000-base.yml
machine: corstone1000-mps3
@@ -3,4 +3,4 @@ header:
includes: includes:
- base.yml - base.yml
machine: corstone500 machine: foundation-armv8
+2 -1
View File
@@ -3,4 +3,5 @@ header:
includes: includes:
- base.yml - base.yml
machine: qemuarmv5 machine: fvp-base
-42
View File
@@ -1,42 +0,0 @@
header:
version: 9
distro: poky
machine: fvp-baser-aemv8r64
defaults:
repos:
refspec: honister
repos:
meta-arm:
url: https://git.yoctoproject.org/git/meta-arm
path: layers/meta-arm
layers:
meta-arm:
meta-arm-bsp:
meta-arm-toolchain:
poky:
url: https://git.yoctoproject.org/git/poky
path: layers/poky
layers:
meta:
meta-poky:
env:
FVP_BASE_R_AEM_TARBALL_URI: ""
FVP_BASE_R_ARM_EULA_ACCEPT: "False"
local_conf_header:
base: |
CONF_VERSION = "2"
PACKAGE_CLASSES = "package_ipk"
PACKAGECONFIG:remove:pn-qemu-system-native = "gtk+ sdl"
EXTRA_IMAGE_FEATURES:append = " debug-tweaks ssh-server-openssh"
FVP_CONFIG[bp.virtio_net.hostbridge.userNetPorts] ?= "8022=22"
IMAGE_CLASSES:append = " ${@oe.utils.ifelse(d.getVar('FVP_BASE_R_AEM_TARBALL_URI'), 'fvpboot', '')}"
LICENSE_FLAGS_WHITELIST:append = " ${@oe.utils.vartrue('FVP_BASE_R_ARM_EULA_ACCEPT', 'Arm-FVP-EULA', '', d)}"
target:
- core-image-minimal
-8
View File
@@ -1,8 +0,0 @@
header:
version: 9
includes:
- kas/fvp-baser-aemv8r64-bsp.yml
local_conf_header:
base-rt: |
PREFERRED_PROVIDER_virtual/kernel = "linux-yocto-rt"
+5 -1
View File
@@ -2,13 +2,17 @@ header:
version: 9 version: 9
includes: includes:
- base.yml - base.yml
- meta-openembedded.yml
repos: repos:
meta-arm: meta-arm:
layers: layers:
meta-gem5: meta-gem5:
meta-openembedded:
url: https://git.openembedded.org/meta-openembedded
layers:
meta-oe:
machine: gem5-arm64 machine: gem5-arm64
target: target:
+19
View File
@@ -0,0 +1,19 @@
#! /bin/bash
# Read a GitLab CI job name on $1 and transform it to a
# list of Kas yaml files
set -e -u
# Read Job namne from $1 and split on /
IFS=/ read -r -a PARTS<<<$1
# Prefix each part with kas/
PARTS=("${PARTS[@]/#/kas/}")
# Suffix each part with .yml
PARTS=("${PARTS[@]/%/.yml}")
# Print colon-separated
IFS=":"
echo "${PARTS[*]}"
View File
View File
@@ -5,7 +5,5 @@ repos:
meta-openembedded: meta-openembedded:
url: https://git.openembedded.org/meta-openembedded url: https://git.openembedded.org/meta-openembedded
layers: layers:
meta-filesystems:
meta-networking:
meta-oe: meta-oe:
meta-python: meta-python:
+1 -1
View File
@@ -1,7 +1,7 @@
header: header:
version: 9 version: 9
includes: includes:
- meta-openembedded.yml - meta-python.yml
repos: repos:
meta-zephyr: meta-zephyr:
+1 -1
View File
@@ -2,7 +2,7 @@ header:
version: 9 version: 9
includes: includes:
- base.yml - base.yml
- meta-openembedded.yml - meta-python.yml
machine: musca-s1 machine: musca-s1
View File
View File
@@ -3,9 +3,9 @@ header:
includes: includes:
- base.yml - base.yml
machine: qemuarm64-sbsa machine: qemuarm64-secureboot
target: target:
- core-image-base - core-image-base
- perf - perf
- sbsa-acs - optee-examples
View File
+1 -1
View File
@@ -3,4 +3,4 @@ header:
includes: includes:
- base.yml - base.yml
machine: qemuarm64 machine: tc0
+17 -18
View File
@@ -4,8 +4,8 @@ meta-arm-autonomy Yocto Layer
Introduction Introduction
------------ ------------
This layer provides an hypervisor based solution (currently based on Xen) for This layer provides an hypervisor based solution (currently based on Xen) for
autonomous system. It contains recipes and classes to build host and guest autonomous system. It contains recipes and classes to build host and guests
images. systems.
To start using this layer, please check the To start using this layer, please check the
[Quick Start Guide](documentation/arm-autonomy-quickstart.md). [Quick Start Guide](documentation/arm-autonomy-quickstart.md).
@@ -16,14 +16,13 @@ This layer depends on several other Yocto layers:
* meta-openembedded (https://git.openembedded.org/meta-openembedded) * meta-openembedded (https://git.openembedded.org/meta-openembedded)
* poky (https://git.yoctoproject.org/poky) * poky (https://git.yoctoproject.org/poky)
* meta-virtualization (https://git.yoctoproject.org/meta-virtualization) * meta-virtualization (https://git.yoctoproject.org/meta-virtualization)
* meta-networking (git://git.openembedded.org/meta-openembedded)
Distribution Features Distribution Features
--------------------- ---------------------
This layer adds the following Yocto DISTRO_FEATURES: This layer is adding the following Yocto DISTRO_FEATURES:
* arm-autonomy-host: this feature activates functionalities required to build * arm-autonomy-host: this feature activates functionalities required to build
an autonomy host system. It has the following effects: an autonomy host system. It is doing the following:
- add 'xen' and 'ipv4' to DISTRO_FEATURES. - add 'xen' and 'ipv4' to DISTRO_FEATURES.
- add xen backend drivers to linux kernel configuration. - add xen backend drivers to linux kernel configuration.
- To reduce the root filesystem image size the kernel image is not installed. - To reduce the root filesystem image size the kernel image is not installed.
@@ -44,40 +43,40 @@ its documentation.
Those documentation files should be checked for variables: Those documentation files should be checked for variables:
- [xen-devicetree](documentation/xen-devicetree.md) - [xen-devicetree](documentation/xen-devicetree.md)
- [xenguest-manager](documentation/xenguest-manager.md) - [xenguest-manager](documentation/xenguest-manager.md)
- [xenguest-network](documentation/xenguest-network.md) - [xenguest-network-bridge](documentation/xenguest-network-bridge.md)
BSPs BSPs
---- ----
This layer adds the following machine: This layer is adding the following machines:
* arm64-autonomy-guest: This machine creates a minimal BSP suitable to be used * arm64-autonomy-guest: this machines creates a minimal BSP suitable to be used
as an autonomy guest. It is in fact only activating ARM64 architecture and as an autonomy guest. It is in fact only activating ARM64 architecture and
SMP in the linux kernel and is enabling the DISTRO_FEATURE SMP in the linux kernel and is enabling the DISTRO_FEATURE
'arm-autonomy-guest'. arm-autonomy-guest.
Images Images
------ ------
This layer is adding the following images: This layer is adding the following images:
* arm-autonomy-host-image-minimal: This image includes all elements required * arm-autonomy-host-image-minimal: this image includes all elements required
to create a minimal arm-autonomy-host system. This includes xen, and tools to to create a minimal arm-autonomy-host system. This includes xen and tools to
manage xen guests and xenguest images. This image depends on manage xen guests. This image depends on 'arm-autonomy-host' distribution
'arm-autonomy-host' distribution feature. feature.
Recipes and classes Recipes and classes
------------------- -------------------
This layer adds the following recipes and classes: This layer is adding the following recipes and classes:
* [xen-devicetree](documentation/xen-devicetree.md): This is a recipe to modify * [xen-devicetree](documentation/xen-devicetree.md): this is a recipe to modify
a device tree blob to add information required to boot xen and a Dom0 linux. a device tree blob to add information required to boot xen and a Dom0 linux.
* [xenguest-mkimage](documentation/xenguest-mkimage.md): This is a tool used to * [xenguest-mkimage](documentation/xenguest-mkimage.md): this is a tool to
create and modify images to be used as Xen guests. create and modify images to be used as Xen guests.
* [xenguest-manager](documentation/xenguest-manager.md): This is a tool used to * [xenguest-manager](documentation/xenguest-manager.md): this is a tool to
create/remove/start/stop xen guest generated using xenguest-mkimage. create/remove/start/stop xen guest generated using xenguest-mkimage.
* [xenguest-network](documentation/xenguest-network.md): This * [xenguest-network-bridge](documentation/xenguest-network-bridge.md): this
recipe add tools and init scripts to create a bridge connected to the recipe add tools and init scripts to create a bridge connected to the
external network on the host and allow guests to be connected to it. external network on the host and allow guests to be connected to it.
@@ -1,26 +0,0 @@
# This class is to be inherited by image recipes that want to build and install
# an alternate kernel (set via PREFERRED_PROVIDER_alternate/kernel).
#
# It is mandatory to also set the KERNEL_PACKAGE_NAME for the alternate kernel
# recipe via KERNEL_PACKAGE_NAME:pn-${PREFERRED_PROVIDER_alternate/kernel} and
# its value needs to be different from "kernel" since this is the default set
# for PREFERRED_PROVIDER_virtual/kernel.
#
# An example of these settings can be found at meta-arm-autonomy/dynamic-layers/meta-arm-bsp/conf/machine/n1sdp-extra-settings.inc
#
# When building and installing an alternate kernel, the kernel-modules packages
# for both virtual/kernel and alternate/kernel will be installed.
PREFERRED_PROVIDER_alternate/kernel ??= ""
python () {
alternate_kernel = d.getVar('PREFERRED_PROVIDER_alternate/kernel')
if alternate_kernel:
alternate_kernel_pkg_name = d.getVar('KERNEL_PACKAGE_NAME:pn-%s' % alternate_kernel)
if alternate_kernel_pkg_name:
d.appendVar('EXTRA_IMAGEDEPENDS', ' ' + alternate_kernel)
d.appendVar('IMAGE_INSTALL', ' kernel-modules')
d.appendVar('IMAGE_INSTALL', ' ' + alternate_kernel_pkg_name + '-modules')
else:
raise bb.parse.SkipRecipe("No KERNEL_PACKAGE_NAME:pn-%s set" % alternate_kernel )
}
@@ -1,115 +0,0 @@
# Docker Extern Containers
#
# This class allows docker image tarballs to be installed in the rootfs
#
# The images can be selected using the variable CONTAINER_IMAGE_FILES which
# should contain a space seperated list of absolute paths or yocto urls for
# docker images that have been exported using docker export:
# - https://docs.docker.com/engine/reference/commandline/export/
#
# src_uri_parse_var.bbclass is used to parse CONTAINER_IMAGE_FILES
#
# There are 4 supported formats for CONTAINER_IMAGE_FILES entries:
#
# - http/https url
# - CONTAINER_IMAGE_FILES = "https://[url]:[port]/alpine.tar;md5sum=..."
#
# - file:// absolute local path from root
# - CONTAINER_IMAGE_FILES = "file:///containers/alpine2.tar"
#
# - file:// path relative to FILESEXTRAPATHS
# - CONTAINER_IMAGE_FILES = "file://foo/alpine3.tar"
# FILESEXTRAPATHS .= "/containers:"
#
# - plain absolute local path from root
# - CONTAINER_IMAGE_FILES = "/containers/foo/bar/alpine4.tar"
#
# It is not recommended to use other yocto URL types, as they may result in
# undefined behaviour.
#
# A semicolon seperated list of install arguments can follow each image path:
# - conname : the name that will be attached when the image is imported
# (default: [filename, without extension])
# - contag : the tag that will be attached when the image is imported
# (default: local)
# - conkeep : Flag for whether the exported container image file should be
# kept once the import has been completed
# (default: 0)
#
# Any other arguments, for example an md5sum, will be assumed to be fetch
# arguments, and will be kept when the path is added to the SRC_URI
#
# e.g. CONTAINER_IMAGE_FILES = "\
# https://[url]:[port]/alpine.tar;md5sum=[checksum];conkeep=1 \
# file:///containers/alpine2.tar;contag=latest;conname=docker2 \
# file://foo/alpine3.tar \
# /containers/foo/bar/alpine4.tar;contag=1.0;conkeep=1 "
#
# Resulting Manifest:
# ARCHIVE NAME TAG KEEP
# alpine.tar alpine local 1
# alpine2.tar docker2 latest 0
# alpine3.tar alpine3 local 0
# alpine4.tar alpine4 1.0 1
#
# Other configurable variables:
# CONTAINERS_INSTALL_DIR : The folder underneath ${WORKDIR} where the docker
# images will be stored
# (default: "/usr/share/docker/images")
# CONTAINERS_MANIFEST : The name of the manifest file containing image
# parameters, also stored in CONTAINERS_INSTALL_DIR
# (default: "containers.manifest")
# CONTAINERS_TAG_DEFAULT : Use this to change the value that will be used as
# contag if no value is provided
# (default: "local")
# CONTAINERS_KEEP_DEFAULT : Use this to change the value that will be used for
# conkeep if no value is provided
# (default: "0")
#
inherit features_check
REQUIRED_DISTRO_FEATURES = "docker"
RDEPENDS:${PN} = "packagegroup-docker-runtime-minimal"
CONTAINER_IMAGE_FILES ??= ""
CONTAINERS_INSTALL_DIR ??= "${datadir}/docker/images"
CONTAINERS_MANIFEST ??= "containers.manifest"
CONTAINERS_TAG_DEFAULT ??= "local"
CONTAINERS_KEEP_DEFAULT ??= "0"
inherit set_src_uri_from_var
SRC_URI_FROM_VAR_NAME = "CONTAINER_IMAGE_FILES"
# Define installation params
SRC_URI_FROM_VAR_MANIFEST_PARAMS = "conname=[basename] \
contag=${CONTAINERS_TAG_DEFAULT} conkeep=${CONTAINERS_KEEP_DEFAULT}"
SRC_URI_FROM_VAR_UNPACK_DIR = "containers"
# Read manifest and install container images
do_install() {
local archive name tag keep
if [ -f "${WORKDIR}/${SRC_URI_FROM_VAR_UNPACK_DIR}/manifest" ]; then
install -d "${D}${CONTAINERS_INSTALL_DIR}"
install -m 644 \
"${WORKDIR}/${SRC_URI_FROM_VAR_UNPACK_DIR}/manifest" \
"${D}${CONTAINERS_INSTALL_DIR}/${CONTAINERS_MANIFEST}"
while read -r archive name tag keep _; do
[ -f "${WORKDIR}/${SRC_URI_FROM_VAR_UNPACK_DIR}/${archive}" ] ||
bbfatal "${archive} does not exist"
install -m 644 \
"${WORKDIR}/${SRC_URI_FROM_VAR_UNPACK_DIR}/${archive}" \
"${D}${CONTAINERS_INSTALL_DIR}/${archive}"
done < "${D}${CONTAINERS_INSTALL_DIR}/${CONTAINERS_MANIFEST}"
fi
}
do_install[vardeps] += "CONTAINER_IMAGE_FILES"
FILES:${PN} += "${CONTAINERS_INSTALL_DIR}"
@@ -1,7 +1,7 @@
# Create a xenguest image with kernel and filesystem produced by Yocto # Create a xenguest image with kernel and filesystem produced by Yocto
# This will create a .xenguest file that the xenguest-manager can use. # This will create a .xenguest file that the xenguest-manager can use.
inherit xenguest_image inherit xenguest-image
# We are creating our guest in a local subdirectory # We are creating our guest in a local subdirectory
# force the value so that we are not impacted if the user is changing it # force the value so that we are not impacted if the user is changing it
@@ -22,7 +22,7 @@ xenguest_image_add_kernel() {
# Add rootfs file to the image # Add rootfs file to the image
xenguest_image_add_rootfs() { xenguest_image_add_rootfs() {
call_xenguest_mkimage partial \ call_xenguest_mkimage partial \
--disk-add-file=${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.${IMAGE_TYPEDEP:xenguest}:rootfs.${IMAGE_TYPEDEP:xenguest} --disk-add-file=${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.${IMAGE_TYPEDEP_xenguest}:rootfs.${IMAGE_TYPEDEP_xenguest}
} }
# Pack xenguest image # Pack xenguest image
@@ -57,73 +57,12 @@ do_bootimg_xenguest[depends] += "xenguest-base-image:do_deploy"
do_bootimg_xenguest[depends] += "${PN}:do_rootfs" do_bootimg_xenguest[depends] += "${PN}:do_rootfs"
# This set in python anonymous after, just set a default value here # This set in python anonymous after, just set a default value here
IMAGE_TYPEDEP:xenguest ?= "tar" IMAGE_TYPEDEP_xenguest ?= "tar"
# We must not be built at rootfs build time because we need the kernel # We must not be built at rootfs build time because we need the kernel
IMAGE_TYPES_MASKED += "xenguest" IMAGE_TYPES_MASKED += "xenguest"
IMAGE_TYPES += "xenguest" IMAGE_TYPES += "xenguest"
XENGUEST_IMAGE_RECIPE = "${PN}"
XENGUEST_IMAGE_VARS += "XENGUEST_IMAGE_RECIPE"
# Merge intermediate env files from all recipes into a single file
python do_merge_xenguestenv () {
import re
# Open final merged file in DEPLOY_DIR_IMAGE for writing, or create
outdir = d.getVar('DEPLOY_DIR_IMAGE')
with open(os.path.join(outdir,'xenguest.env'), 'w') as merged_file:
# Adds vars from xenguest_image to list
merged_env = []
xenguest_vars = d.getVar('XENGUEST_IMAGE_VARS')
for var in xenguest_vars.split():
value = d.getVar(var)
if value:
merged_env.append(var + "=" + " ".join(value.split()) + "\n")
# Resolve dependencies for this task to find names of intermediate
# .xenguestenv files
taskdepdata = d.getVar('BB_TASKDEPDATA')
task_mc = d.getVar('BB_CURRENT_MC')
task_file = d.getVar('FILE')
# See runqueue.py function build_taskdepdata
DEPS_INDEX = 3
depdata_key = task_file + ":do_merge_xenguestenv"
# If in a multiconfig, need to add that to the key
if task_mc != "default":
depdata_key = "mc:" + task_mc + ":" + depdata_key
# Retrieve filename using regex
get_filename = re.compile(r'/([^/]+\.bb):do_deploy_xenguestenv$')
env_dir = d.getVar('XENGUEST_ENV_STAGING_DIR')
for task_dep in taskdepdata[depdata_key][DEPS_INDEX]:
if task_dep.endswith(":do_deploy_xenguestenv"):
filename = re.search(get_filename, task_dep).group(1) + ".xenguestenv"
bb.note("Merging: " + filename)
try:
with open(env_dir + "/" + filename, 'r') as f:
# Eliminate duplicates
merged_env = list(set(merged_env + f.readlines()))
except (FileNotFoundError, IOError):
bb.note(" " + filename + " has no extra vars")
# Sort Alphabetically and write
merged_env.sort()
merged_file.write("".join(merged_env))
}
do_merge_xenguestenv[dirs] = "${DEPLOY_DIR_IMAGE}"
do_merge_xenguestenv[vardeps] += "${XENGUEST_IMAGE_VARS}"
do_merge_xenguestenv[vardepsexclude] += "BB_TASKDEPDATA"
do_merge_xenguestenv[recrdeptask] += "do_deploy_xenguestenv"
addtask merge_xenguestenv before do_populate_lic_deploy after do_image_complete
python __anonymous() { python __anonymous() {
# Do not do anything if we are not in the want FSTYPES # Do not do anything if we are not in the want FSTYPES
if bb.utils.contains_any('IMAGE_FSTYPES', 'xenguest', '1', '0', d): if bb.utils.contains_any('IMAGE_FSTYPES', 'xenguest', '1', '0', d):
@@ -158,7 +97,7 @@ python __anonymous() {
# do_bootimg_xenguest will need the tar file # do_bootimg_xenguest will need the tar file
d.appendVarFlag('do_bootimg_xenguest', 'depends', ' %s:do_image_tar' % (d.getVar('PN'))) d.appendVarFlag('do_bootimg_xenguest', 'depends', ' %s:do_image_tar' % (d.getVar('PN')))
# set our TYPEDEP to the proper compression # set our TYPEDEP to the proper compression
d.setVar('IMAGE_TYPEDEP:xenguest', 'tar' + (rootfs_file.split('.tar', 1)[1] or '')) d.setVar('IMAGE_TYPEDEP_xenguest', 'tar' + (rootfs_file.split('.tar', 1)[1] or ''))
if kernel_needed: if kernel_needed:
# Tell do_bootimg_xenguest to call xenguest_image_add_kernel # Tell do_bootimg_xenguest to call xenguest_image_add_kernel
@@ -3,10 +3,7 @@
# This is done using kernel-fitimage as model # This is done using kernel-fitimage as model
# To activate this, kernel-xenguest must be added to KERNEL_CLASSES # To activate this, kernel-xenguest must be added to KERNEL_CLASSES
# Add a variable name to XENGUEST_IMAGE_VARS_EXTRA if you want it to inherit xenguest-image
# appear in xenguest.env when the image is deployed
inherit xenguest_image
# use a local copy to pack all together # use a local copy to pack all together
XENGUEST_IMAGE_DEPLOY_DIR = "${WORKDIR}/tmp-xenguest" XENGUEST_IMAGE_DEPLOY_DIR = "${WORKDIR}/tmp-xenguest"
@@ -27,9 +24,9 @@ do_assemble_xenguest_initramfs() {
rm -f ${B}/${KERNEL_OUTPUT_DIR}/Image-initramfs.xenguest rm -f ${B}/${KERNEL_OUTPUT_DIR}/Image-initramfs.xenguest
call_xenguest_mkimage pack ${B}/${KERNEL_OUTPUT_DIR}/Image-initramfs.xenguest call_xenguest_mkimage pack ${B}/${KERNEL_OUTPUT_DIR}/Image-initramfs.xenguest
} }
do_assemble_xenguest_initramfs[depends] += "${INITRAMFS_IMAGE}:do_merge_xenguestenv" do_assemble_xenguest_initramfs[depends] += "${INITRAMFS_IMAGE}:do_image_complete"
kernel_do_deploy:append() { kernel_do_deploy_append() {
if [ -f "${B}/${KERNEL_OUTPUT_DIR}/Image-initramfs.xenguest" ]; then if [ -f "${B}/${KERNEL_OUTPUT_DIR}/Image-initramfs.xenguest" ]; then
install -m 0644 ${B}/${KERNEL_OUTPUT_DIR}/Image-initramfs.xenguest "$deployDir/Image-${INITRAMFS_NAME}.xenguest" install -m 0644 ${B}/${KERNEL_OUTPUT_DIR}/Image-initramfs.xenguest "$deployDir/Image-${INITRAMFS_NAME}.xenguest"
ln -snf Image-${INITRAMFS_NAME}.xenguest $deployDir/Image-${INITRAMFS_LINK_NAME}.xenguest ln -snf Image-${INITRAMFS_NAME}.xenguest $deployDir/Image-${INITRAMFS_LINK_NAME}.xenguest
@@ -1,224 +0,0 @@
# Set SRC_URI from Variable
# This class parses a variable named in SRC_URI_FROM_VAR_NAME for entries that
# should be added to the SRC_URI
#
# There are 4 supported formats for entries:
#
# - http/https url
# - Note that a checksum (md5sum or sha256sum) must be provided for http(s)
#
# - file:// absolute local path from root
# - In this case the filename will be added to SRC_URI and the path from '/'
# added to FILESEXTRAPATHS
#
# - file:// path relative to FILESEXTRAPATHS
# - In this case the filename will be added to SRC_URI and the preceding path
# added to FILESOVERRIDES, so that the full path to the file will
# be available in FILESPATH when it is generated by combining
# FILESEXTRAPATHS and FILESOVERRIDES.
#
# - plain absolute local path from root
# - This will be treated the same as an file:// path from root. Plain paths
# must be absolute, and cannot be relative to FILESEXTRAPATHS
#
# It is not recommended to use other yocto URL types, as they may result in
# undefined behaviour.
#
# These entries will be added to the SRC_URI so that the yocto fetcher can
# unpack a copy into ${WORKDIR}/${SRC_URI_FROM_VAR_UNPACK_DIR}
#
#
# A list of arguments can follow each entry in the input variable, seperated
# by semi-colons (;). Arguments may be FETCH arguments or MANIFEST arguments.
#
# FETCH arguments will be appended to the entry in SRC_URI, for example
# "downloadfilename" to specify the filename used when storing a
# downloaded file.
# Each SRC_URI entry will automatically have the arguments
# "unpack=0;subdir=${SRC_URI_FROM_VAR_UNPACK_DIR}" added to them, so do not
# attempt to set these options.
#
# MANIFEST arguments are defined in the variable
# SRC_URI_FROM_VAR_MANIFEST_PARAMS which should be a space seperated list of
# names, each optionally followed by an equals sign (=) and a default value.
#
# The values provided for the manifest arguments will be written to the manifest
# file in ${WORKDIR}/${SRC_URI_FROM_VAR_UNPACK_DIR} as columns, in the same
# order as they appear in SRC_URI_FROM_VAR_MANIFEST_PARAMS.
#
# For entries that do not provide a value for a manifest argument, the default
# value will be used if possible.
# If no default is availale, omitting the parameter on any item will cause
# an error.
#
# "[basename]" is a special case default that will set the value to
# the filename without the path or file extension.
#
# e.g.
# SRC_URI_FROM_VAR_MANIFEST_PARAMS="conname=[basename] contag=local conkeep"
#
# Any arguments that follow an entry in SRC_URI_FROM_VAR_NAME, that are not
# named in SRC_URI_FROM_VAR_MANIFEST_PARAMS are assumed to be FETCH arguments,
# so are added to the corresponding entry in the SRC_URI.
SRC_URI_FROM_VAR_NAME ??= ""
SRC_URI_FROM_VAR_MANIFEST_PARAMS ??= ""
SRC_URI_FROM_VAR_UNPACK_DIR ??= "items"
python __anonymous() {
parse_var = d.getVar('SRC_URI_FROM_VAR_NAME')
if not parse_var:
return
parse_var_items = d.getVar(parse_var)
if parse_var_items:
for item in parse_var_items.split(' '):
if not item:
continue
if item.startswith('/'):
# If not a Yocto URL, must be an absolute path
yocto_url = "file://" + item
else:
# Otherwise assume valid Yocto URL.
# Error case is caught later
yocto_url = item
fetcher = host = path = parm = None
try:
# Attempt to parse a Yocto URL
fetcher,host,path,_,_,parm = bb.fetch.decodeurl(yocto_url)
except:
# Something invalid is in the variable!
raise bb.parse.SkipRecipe(parse_var + \
" contains an invalid entry:\n'" + \
item + "'")
# This var is space seperated list of parameter names,
# with optional default value following an equals sign
# (name=default)
item_params_str = d.getVar('SRC_URI_FROM_VAR_MANIFEST_PARAMS')
# remove directories from path
filename = os.path.basename(path)
if "downloadfilename" in parm:
filename = parm["downloadfilename"]
item_manifest_args = {"filename": filename}
if item_params_str:
# required manifest arguments have been provided
# If no default is given add "=" for map parsing
item_params_list = [ arg + "=" if '=' not in arg
else arg
for arg in item_params_str.split(' ')
]
# Generate key value pairs of argument names and
# default values
item_params_map = dict( (name.strip(), val.strip())
for name, val in (arg.split('=')
for arg in item_params_list)
)
for argname in item_params_map:
# Iterate over required manifest arguments
argvalue = parm.pop(argname, None)
if argvalue:
# a value has been provided for this item
item_manifest_args[argname] = argvalue
else:
# No value provided, process default value
default = item_params_map[argname]
if default:
# A default value is provided
if default == "[basename]":
# use the filename without extension
default = os.path.splitext(filename)[0]
# store default value in dict
item_manifest_args[argname] = default
else:
# No default provided
raise bb.fatal(parse_var + \
" entry is missing a required parameter '" + \
argname + "':\n'" + item + "'")
# Write value to var flags to ensure data structure is preserved
# Each entry of parse_var will have a varflag where the value
# is a dictionary of argument names and values
d.setVarFlags(parse_var, {item: item_manifest_args})
src_uri_entry_suffix = ';'
# HTTP(S) fetcher must provide a checksum
if fetcher.startswith('http') and not \
( 'md5sum' in parm or 'sha256sum' in parm ):
# Ensure http/https fetchers get a checksum
raise bb.parse.SkipRecipe(parse_var + \
" entry is missing a checksum:\n'" + \
item + "'")
# add remaining fetch parameters including checksum
for arg in parm:
src_uri_entry_suffix += ";" + arg + "=" + parm[arg]
# Add default and extra parameters to SRC_URI entry
src_uri_entry_suffix += ';unpack=0;subdir=' + \
d.getVar('SRC_URI_FROM_VAR_UNPACK_DIR')
if fetcher == 'file':
# Prevent local fetcher from re-creating dir structure
filedir = os.path.split(path)[0]
if filedir.startswith('/'):
# Path is from the root
d.appendVar('FILESEXTRAPATHS', filedir + ':')
else:
# Path is relative to FILESEXTRAPATHS
d.appendVar('FILESOVERRIDES', ':' + filedir)
# Add filename without path to SRC_URI
d.appendVar('SRC_URI', ' file://' + \
filename + src_uri_entry_suffix)
else:
# Add full entry to SRC_URI
d.appendVar('SRC_URI', ' ' + fetcher + \
"://" + host + path + src_uri_entry_suffix)
}
python generate_manifest() {
parse_var = d.getVar('SRC_URI_FROM_VAR_NAME')
if not parse_var:
return
target_dir = os.path.join(d.getVar('WORKDIR'),
d.getVar('SRC_URI_FROM_VAR_UNPACK_DIR'))
# Write a manifest file containing the parameters so SRC_URI
# doesn't need to be parsed by do_install
with open (target_dir + "/manifest", 'w') as manifest_file:
manifest_args = d.getVarFlags(parse_var)
parse_var_items = d.getVar(parse_var)
if parse_var_items:
for item in parse_var_items.split():
manifest_file.write(" ".join(manifest_args[item].values())+"\n")
}
do_unpack[cleandirs] += "${WORKDIR}/${SRC_URI_FROM_VAR_UNPACK_DIR}"
do_unpack[postfuncs] += "generate_manifest"
do_unpack[vardeps] += "${SRC_URI_FROM_VAR_NAME}"
@@ -4,11 +4,8 @@
# The class is extending deploy function so you recipe must inherit deploy and # The class is extending deploy function so you recipe must inherit deploy and
# have a do_deploy function (even if it is empty) # have a do_deploy function (even if it is empty)
# Add a variable name to XENGUEST_IMAGE_VARS_EXTRA if you want it to # Use standard xenguest-image
# appear in xenguest.env when the image is deployed inherit xenguest-image
# Use standard xenguest_image
inherit xenguest_image
# Add a DTB file for the guest # Add a DTB file for the guest
# Only one file should be added, if this is set multiple times or in several # Only one file should be added, if this is set multiple times or in several
@@ -42,13 +39,7 @@ XENGUEST_EXTRA_FILES ??= ""
# dir1/file1 file in the disk content parameters). # dir1/file1 file in the disk content parameters).
XENGUEST_EXTRA_DISK_FILES ??= "" XENGUEST_EXTRA_DISK_FILES ??= ""
# Extra vars to be written to xenguest.env do_deploy_append() {
XENGUEST_IMAGE_VARS_EXTRA += "\
XENGUEST_EXTRA_DTB XENGUEST_EXTRA_RAMDISK XENGUEST_EXTRA_XENCONFIG \
XENGUEST_EXTRA_INIT_PRE XENGUEST_EXTRA_INIT XENGUEST_EXTRA_INIT_POST \
XENGUEST_EXTRA_FILES XENGUEST_EXTRA_DISK_FILES"
do_deploy:append() {
if [ -z "${XENGUEST_IMAGE_DEPLOY_DIR}" -o \ if [ -z "${XENGUEST_IMAGE_DEPLOY_DIR}" -o \
-z "${XENGUEST_IMAGE_DEPLOY_SUBDIR}" ]; then -z "${XENGUEST_IMAGE_DEPLOY_SUBDIR}" ]; then
die "Configuration error: XENGUEST_IMAGE_DEPLOY_DIR or XENGUEST_IMAGE_DEPLOY_SUBDIR is empty" die "Configuration error: XENGUEST_IMAGE_DEPLOY_DIR or XENGUEST_IMAGE_DEPLOY_SUBDIR is empty"
@@ -58,14 +49,14 @@ do_deploy:append() {
if [ -n "${XENGUEST_EXTRA_DTB}" ]; then if [ -n "${XENGUEST_EXTRA_DTB}" ]; then
if [ ! -f ${XENGUEST_EXTRA_DTB} ]; then if [ ! -f ${XENGUEST_EXTRA_DTB} ]; then
die "xenguest_image: DTB file ${XENGUEST_EXTRA_DTB} does not exist" die "xenguest-image: DTB file ${XENGUEST_EXTRA_DTB} does not exist"
fi fi
call_xenguest_mkimage partial --xen-device-tree=${XENGUEST_EXTRA_DTB} call_xenguest_mkimage partial --xen-device-tree=${XENGUEST_EXTRA_DTB}
fi fi
if [ -n "${XENGUEST_EXTRA_RAMDISK}" ]; then if [ -n "${XENGUEST_EXTRA_RAMDISK}" ]; then
if [ ! -f ${XENGUEST_EXTRA_RAMDISK} ]; then if [ ! -f ${XENGUEST_EXTRA_RAMDISK} ]; then
die "xenguest_image: DTB file ${XENGUEST_EXTRA_RAMDISK} does not exist" die "xenguest-image: DTB file ${XENGUEST_EXTRA_RAMDISK} does not exist"
fi fi
call_xenguest_mkimage partial --xen-ramdisk=${XENGUEST_EXTRA_RAMDISK} call_xenguest_mkimage partial --xen-ramdisk=${XENGUEST_EXTRA_RAMDISK}
fi fi
@@ -73,7 +64,7 @@ do_deploy:append() {
if [ -n "${XENGUEST_EXTRA_XENCONFIG}" ]; then if [ -n "${XENGUEST_EXTRA_XENCONFIG}" ]; then
for f in ${XENGUEST_EXTRA_XENCONFIG}; do for f in ${XENGUEST_EXTRA_XENCONFIG}; do
if [ ! -f $f ]; then if [ ! -f $f ]; then
die "xenguest_image: Xen config $f does not exist" die "xenguest-image: Xen config $f does not exist"
fi fi
call_xenguest_mkimage partial --xen-append=$f call_xenguest_mkimage partial --xen-append=$f
done done
@@ -81,21 +72,21 @@ do_deploy:append() {
if [ -n "${XENGUEST_EXTRA_INIT_PRE}" ]; then if [ -n "${XENGUEST_EXTRA_INIT_PRE}" ]; then
if [ ! -f ${XENGUEST_EXTRA_INIT_PRE} ]; then if [ ! -f ${XENGUEST_EXTRA_INIT_PRE} ]; then
die "xenguest_image: Init script ${XENGUEST_EXTRA_INIT_PRE} does not exist" die "xenguest-image: Init script ${XENGUEST_EXTRA_INIT_PRE} does not exist"
fi fi
call_xenguest_mkimage partial --init-pre=${XENGUEST_EXTRA_INIT_PRE} call_xenguest_mkimage partial --init-pre=${XENGUEST_EXTRA_INIT_PRE}
fi fi
if [ -n "${XENGUEST_EXTRA_INIT}" ]; then if [ -n "${XENGUEST_EXTRA_INIT}" ]; then
if [ ! -f ${XENGUEST_EXTRA_INIT} ]; then if [ ! -f ${XENGUEST_EXTRA_INIT} ]; then
die "xenguest_image: Init script ${XENGUEST_EXTRA_INIT} does not exist" die "xenguest-image: Init script ${XENGUEST_EXTRA_INIT} does not exist"
fi fi
call_xenguest_mkimage partial --init-script=${XENGUEST_EXTRA_INIT} call_xenguest_mkimage partial --init-script=${XENGUEST_EXTRA_INIT}
fi fi
if [ -n "${XENGUEST_EXTRA_INIT_POST}" ]; then if [ -n "${XENGUEST_EXTRA_INIT_POST}" ]; then
if [ ! -f ${XENGUEST_EXTRA_INIT_POST} ]; then if [ ! -f ${XENGUEST_EXTRA_INIT_POST} ]; then
die "xenguest_image: Init script ${XENGUEST_EXTRA_INIT_POST} does not exist" die "xenguest-image: Init script ${XENGUEST_EXTRA_INIT_POST} does not exist"
fi fi
call_xenguest_mkimage partial --init-post=${XENGUEST_EXTRA_INIT_POST} call_xenguest_mkimage partial --init-post=${XENGUEST_EXTRA_INIT_POST}
fi fi
@@ -103,7 +94,7 @@ do_deploy:append() {
if [ -n "${XENGUEST_EXTRA_FILES}" ]; then if [ -n "${XENGUEST_EXTRA_FILES}" ]; then
for f in ${XENGUEST_EXTRA_FILES}; do for f in ${XENGUEST_EXTRA_FILES}; do
if [ ! -f $f ]; then if [ ! -f $f ]; then
die "xenguest_image: Xen file $f does not exist" die "xenguest-image: Xen file $f does not exist"
fi fi
call_xenguest_mkimage partial --xen-add-file=$f call_xenguest_mkimage partial --xen-add-file=$f
done done
@@ -112,12 +103,12 @@ do_deploy:append() {
if [ -n "${XENGUEST_EXTRA_DISK_FILES}" ]; then if [ -n "${XENGUEST_EXTRA_DISK_FILES}" ]; then
for f in ${XENGUEST_EXTRA_DISK_FILES}; do for f in ${XENGUEST_EXTRA_DISK_FILES}; do
if [ ! -f $f ]; then if [ ! -f $f ]; then
die "xenguest_image: Disk file $f does not exist" die "xenguest-image: Disk file $f does not exist"
fi fi
call_xenguest_mkimage partial --disk-add-file=$f call_xenguest_mkimage partial --disk-add-file=$f
done done
fi fi
} }
# Need to have xenguest_image tool # Need to have xenguest-image tool
do_deploy[depends] += "xenguest-base-image:do_deploy" do_deploy[depends] += "xenguest-base-image:do_deploy"
@@ -30,7 +30,7 @@ XENGUEST_IMAGE_ROOT ??= "/dev/xvda1"
# Guest kernel command line arguments # Guest kernel command line arguments
XENGUEST_IMAGE_CMDLINE ??= "earlyprintk=xenboot console=hvc0 rw" XENGUEST_IMAGE_CMDLINE ??= "earlyprintk=xenboot console=hvc0 rw"
# Extra commands to add to xenguest_image when creating the image # Extra commands to add to xenguest-image when creating the image
XENGUEST_IMAGE_EXTRA_CMD ??= "" XENGUEST_IMAGE_EXTRA_CMD ??= ""
# Kernel binary # Kernel binary
@@ -43,17 +43,14 @@ XENGUEST_IMAGE_KERNEL ??= "Image"
# be included in the xenguest image) # be included in the xenguest image)
XENGUEST_IMAGE_DISK_SIZE ??= "${@ '4' if not d.getVar('INITRAMFS_IMAGE') else '0'}" XENGUEST_IMAGE_DISK_SIZE ??= "${@ '4' if not d.getVar('INITRAMFS_IMAGE') else '0'}"
# set empty partition to be used by xenguest-manager for this image
XENGUEST_IMAGE_DISK_DEVICE ??= ""
# #
# XENGUEST_IMAGE_DISK_PARTITIONS is used to describe the partitions to setup # XENGUEST_IMAGE_DISK PARTITIONS is used to describe the partitions to setup
# and their content. # and their content.
# It must be set to a space separated list of entries with each entry having # It must be set to a space separated list of entries with each entry having
# the format num:sz:[fs]:[file] where: # the format num:sz:fs:[file] where:
# - num is a partition number # - num is a partition number
# - sz is the partition size in MB or GB(default), e.g 1000M or 1[G] # - sz is the partition size in Gigabit
# - fs is optional filesystem to use for the partition # - fs is the filesystem to use for the partition
# - file is optionally pointing to a file to use as content of the partition # - file is optionally pointing to a file to use as content of the partition
# Please check image_types_xenguest.bbclass for rootfs handling of files # Please check image_types_xenguest.bbclass for rootfs handling of files
# #
@@ -83,18 +80,6 @@ XENGUEST_IMAGE_DEPLOY_SUBDIR ?= "xenguest"
# - something in ${WORKDIR} if you need to clone and manipulate an image # - something in ${WORKDIR} if you need to clone and manipulate an image
XENGUEST_IMAGE_DEPLOY_DIR ??= "${DEPLOYDIR}" XENGUEST_IMAGE_DEPLOY_DIR ??= "${DEPLOYDIR}"
# These vars are used by image_types_xenguest.bbclass to generate the
# xenguest.env file. In a recipe that inherits this class and extra variables
# that should be included in xenguest.env need to be added to
# XENGUEST_IMAGE_VARS_EXTRA
XENGUEST_IMAGE_VARS ?= "\
MACHINE DISTRO DISTRO_VERSION DISTRO_FEATURES TUNE_FEATURES TARGET_FPU \
IMAGE_FEATURES INITRAMFS_IMAGE_BUNDLE INITRAMFS_IMAGE \
XENGUEST_IMAGE_MEMORY_SIZE XENGUEST_IMAGE_NUM_VCPUS XENGUEST_IMAGE_AUTOBOOT \
XENGUEST_IMAGE_ROOT XENGUEST_IMAGE_CMDLINE XENGUEST_IMAGE_EXTRA_CMD \
XENGUEST_IMAGE_KERNEL XENGUEST_IMAGE_DISK_SIZE XENGUEST_IMAGE_DISK_DEVICE \
XENGUEST_IMAGE_DISK_PARTITIONS XENGUEST_IMAGE_NETWORK_TYPE"
# #
# Wrapper to call xenguest-mkimage # Wrapper to call xenguest-mkimage
# It is using XENGUEST_IMAGE_DEPLOY_DIR and XENGUEST_IMAGE_DEPLOY_SUBDIR # It is using XENGUEST_IMAGE_DEPLOY_DIR and XENGUEST_IMAGE_DEPLOY_SUBDIR
@@ -144,27 +129,21 @@ xenguest_image_create() {
# create disk if needed # create disk if needed
disksize="${XENGUEST_IMAGE_DISK_SIZE}" disksize="${XENGUEST_IMAGE_DISK_SIZE}"
case ${disksize:=0} in if [ -z "$disksize" ]; then
0|0M|0G) disksize="0"
;; fi
*) if [ $disksize -gt 0 ]; then
# setup disk size # setup disk size
call_xenguest_mkimage update --disk-reset-config --disk-size=$disksize call_xenguest_mkimage update --disk-reset-config --disk-size=$disksize
diskparts="${XENGUEST_IMAGE_DISK_PARTITIONS}"
if [ -n "$diskparts" ]; then
for arg in $diskparts; do
call_xenguest_mkimage update --disk-add-part=$arg
done
fi
diskdevice="${XENGUEST_IMAGE_DISK_DEVICE}"
if [ -n "$diskdevice" ]; then
call_xenguest_mkimage update --disk-device="${diskdevice}"
fi
;;
esac
diskparts="${XENGUEST_IMAGE_DISK_PARTITIONS}"
if [ -n "$diskparts" ]; then
for arg in $diskparts; do
call_xenguest_mkimage update --disk-add-part=$arg
partnum="$(expr $partnum + 1)"
done
fi
fi
if [ "${XENGUEST_IMAGE_AUTOBOOT}" = "1" ]; then if [ "${XENGUEST_IMAGE_AUTOBOOT}" = "1" ]; then
call_xenguest_mkimage update --set-param=GUEST_AUTOBOOT=1 call_xenguest_mkimage update --set-param=GUEST_AUTOBOOT=1
@@ -179,38 +158,7 @@ xenguest_image_create() {
fi fi
} }
XENGUEST_ENV_STAGING_DIR ??= "${STAGING_DIR}/${MACHINE}/xenguestenv" #
# Create an intermediary file containing all variables used to by a
# particular recipe that inherits this class
# File will contain the values of all variables listed in:
# XENGUEST_IMAGE_VARS_EXTRA
python do_deploy_xenguestenv () {
xenguest_vars = d.getVar('XENGUEST_IMAGE_VARS_EXTRA')
if not xenguest_vars:
return
outdir = d.getVar('XENGUEST_ENV_STAGING_DIR')
# Writes file to tmp/sysroots/${MACHINE}/xenguestenv/ by default
filename = os.path.basename(d.getVar('FILE')) + '.xenguestenv'
with open(os.path.join(outdir, filename), 'w') as envf:
for var in xenguest_vars.split():
value = d.getVar(var)
if value:
# Write value only if set
envf.write('%s="%s"\n' % (var, " ".join(value.split())))
envf.close()
}
# Since the intermediary file is deleted by do_merge_xenguestenv it
# must be re-created every time
do_deploy_xenguestenv[vardeps] += "${XENGUEST_IMAGE_VARS_EXTRA}"
do_deploy_xenguestenv[dirs] = "${XENGUEST_ENV_STAGING_DIR}"
addtask deploy_xenguestenv before do_populate_sysroot
# Clone the current xenguest from deploy to manipulate it locally # Clone the current xenguest from deploy to manipulate it locally
# This is required if you need to change things before packing an image # This is required if you need to change things before packing an image
# To set the local directory where to clone you must set # To set the local directory where to clone you must set
@@ -224,7 +172,7 @@ xenguest_image_clone() {
fi fi
if [ ! -f ${DEPLOY_DIR_IMAGE}/${XENGUEST_IMAGE_DEPLOY_SUBDIR}/guest.cfg ]; then if [ ! -f ${DEPLOY_DIR_IMAGE}/${XENGUEST_IMAGE_DEPLOY_SUBDIR}/guest.cfg ]; then
die "xenguest_image: ${DEPLOY_DIR_IMAGE}/${XENGUEST_IMAGE_DEPLOY_SUBDIR} does not contain a valid guest" die "xenguest-image: ${DEPLOY_DIR_IMAGE}/${XENGUEST_IMAGE_DEPLOY_SUBDIR} does not contain a valid guest"
fi fi
rm -rf ${XENGUEST_IMAGE_DEPLOY_DIR}/${XENGUEST_IMAGE_DEPLOY_SUBDIR} rm -rf ${XENGUEST_IMAGE_DEPLOY_DIR}/${XENGUEST_IMAGE_DEPLOY_SUBDIR}
@@ -1,7 +1,7 @@
# This files is added when DISTRO_FEATURES contains arm-autonomy-guest # This files is added when DISTRO_FEATURES contains arm-autonomy-guest
# We need to have ipv4 activated # We need to have ipv4 activated
DISTRO_FEATURES:append = " ipv4" DISTRO_FEATURES_append = " ipv4"
# Build a xenguest type image # Build a xenguest type image
IMAGE_CLASSES += "image_types_xenguest" IMAGE_CLASSES += "image_types_xenguest"
@@ -10,6 +10,6 @@ IMAGE_FSTYPES += "xenguest"
# xenguest kernel extension to handle initramfs # xenguest kernel extension to handle initramfs
KERNEL_CLASSES += "kernel-xenguest" KERNEL_CLASSES += "kernel-xenguest"
IMAGE_INSTALL:append = "${@bb.utils.contains('DISTRO_FEATURES', 'docker', \ IMAGE_INSTALL_append = "${@bb.utils.contains('DISTRO_FEATURES', 'docker', \
' packagegroup-docker-runtime-minimal', \ ' packagegroup-docker-runtime-minimal', \
'', d)}" '', d)}"
@@ -1,15 +1,13 @@
# This files is added when DISTRO_FEATURES contains arm-autonomy-host # This files is added when DISTRO_FEATURES contains arm-autonomy-host
ARM_AUTONOMY_HOST_OVERRIDES = ":autonomy-host"
# We need to have xen and ipv4 activated # We need to have xen and ipv4 activated
DISTRO_FEATURES:append = " xen ipv4" DISTRO_FEATURES_append = " xen ipv4"
DISTRO_FEATURES_NATIVE:append = " arm-autonomy-host" DISTRO_FEATURES_NATIVE_append = " arm-autonomy-host"
# Don't include kernels in standard images when building arm-autonomy-host # Don't include kernels in standard images when building arm-autonomy-host
# If the kernel image is needed in the rootfs the following should be set from # If the kernel image is needed in the rootfs the following should be set from
# a bbappend: RDEPENDS:${KERNEL_PACKAGE_NAME}-base = "${KERNEL_PACKAGE_NAME}-image" # a bbappend: RDEPENDS_${KERNEL_PACKAGE_NAME}-base = "${KERNEL_PACKAGE_NAME}-image"
RDEPENDS:${KERNEL_PACKAGE_NAME}-base ?= "" RDEPENDS_${KERNEL_PACKAGE_NAME}-base ?= ""
# Require extra machine specific settings from meta-arm-bsp dynamic-layers only # Require extra machine specific settings from meta-arm-bsp dynamic-layers only
# if meta-arm-bsp is in the bblayers.conf # if meta-arm-bsp is in the bblayers.conf
+4 -4
View File
@@ -9,7 +9,7 @@ BBFILES += " \
BBFILE_COLLECTIONS += "meta-arm-autonomy" BBFILE_COLLECTIONS += "meta-arm-autonomy"
BBFILE_PATTERN_meta-arm-autonomy = "^${LAYERDIR}/" BBFILE_PATTERN_meta-arm-autonomy = "^${LAYERDIR}/"
BBFILE_PRIORITY_meta-arm-autonomy = "5" BBFILE_PRIORITY_meta-arm-autonomy = "6"
LAYERDEPENDS_meta-arm-autonomy = " \ LAYERDEPENDS_meta-arm-autonomy = " \
core \ core \
yocto \ yocto \
@@ -17,7 +17,7 @@ LAYERDEPENDS_meta-arm-autonomy = " \
networking-layer \ networking-layer \
virtualization-layer \ virtualization-layer \
" "
LAYERSERIES_COMPAT_meta-arm-autonomy = "honister" LAYERSERIES_COMPAT_meta-arm-autonomy = "gatesgarth"
# We don't activate virtualization feature from meta-virtualization as it # We don't activate virtualization feature from meta-virtualization as it
# brings in lots of stuff we don't need. We need to disable the sanity check # brings in lots of stuff we don't need. We need to disable the sanity check
@@ -29,11 +29,11 @@ ARM_AUTONOMY_LAYERDIR := "${LAYERDIR}"
ARM_AUTONOMY_DISTRO_CFGDIR = "${ARM_AUTONOMY_LAYERDIR}/conf/distro/include/" ARM_AUTONOMY_DISTRO_CFGDIR = "${ARM_AUTONOMY_LAYERDIR}/conf/distro/include/"
# Add class to handle arm-autonomy distro extensions # Add class to handle arm-autonomy distro extensions
USER_CLASSES:append = " arm-autonomy-features" USER_CLASSES_append = " arm-autonomy-features"
BBFILES_DYNAMIC += " \ BBFILES_DYNAMIC += " \
meta-arm-bsp:${LAYERDIR}/dynamic-layers/meta-arm-bsp/*/*/*.bbappend \ meta-arm-bsp:${LAYERDIR}/dynamic-layers/meta-arm-bsp/*/*/*.bbappend \
meta-arm-bsp:${LAYERDIR}/dynamic-layers/meta-arm-bsp/*/*/*.bb \ meta-gem5:${LAYERDIR}/dynamic-layers/meta-gem5/*/*/*.bbappend \
" "
# Root directory for the meta-arm-autonomy/dynamic-layers/meta-arm-bsp # Root directory for the meta-arm-autonomy/dynamic-layers/meta-arm-bsp
ARM_AUTONOMY_ARM_BSP_DYNAMIC_DIR = "${ARM_AUTONOMY_LAYERDIR}/dynamic-layers/meta-arm-bsp" ARM_AUTONOMY_ARM_BSP_DYNAMIC_DIR = "${ARM_AUTONOMY_LAYERDIR}/dynamic-layers/meta-arm-bsp"
@@ -8,10 +8,10 @@ require conf/machine/include/arm/arch-armv8a.inc
KERNEL_IMAGETYPE = "Image" KERNEL_IMAGETYPE = "Image"
IMAGE_FSTYPES:append = " tar.bz2" IMAGE_FSTYPES += "tar.bz2"
PREFERRED_PROVIDER_virtual/kernel = "linux-yocto" PREFERRED_PROVIDER_virtual/kernel = "linux-yocto"
PREFERRED_VERSION_linux-yocto ?= "5.10%" PREFERRED_VERSION_linux-yocto ?= "5.4%"
DISTRO_FEATURES += "arm-autonomy-guest" DISTRO_FEATURES += "arm-autonomy-guest"
-5
View File
@@ -1,5 +0,0 @@
# This file will be required by different xenguest recipes to provide
# common variables, which can be configured in local.conf
# Xenguest image file install location
XENGUEST_MANAGER_GUEST_DIR ?= "${datadir}/guests/"
@@ -32,16 +32,16 @@ Ensure it has all the required layers in bblayers.conf as listed in
Add multiconfig Add multiconfig
---------------- ----------------
The steps required to make the project build both the host and any Here are the steps required to make the project build both the host and any
number of guests as required are: number of guests as required.
1. Create a new directory under `conf/` named `multiconfig/` 1. Create a new directory under `conf/` named `multiconfig/`
2. Create two new files in this directory: 2. Create two new files in this directory:
`multiconfig/host.conf` `multiconfig/host.conf`
`multiconfig/guest.conf` `multiconfig/guest.conf`
These files will contain any configurations that are specific to either the These files will contain any configurations that a specific to either the
host or the guest. The resulting directory tree should be: host or the guest
``` ```
-- conf -- conf
@@ -73,12 +73,12 @@ MC_GUEST_INITRAMFS_IMAGE ?= ""
#MC_GUEST_INITRAMFS_IMAGE_BUNDLE = "1" #MC_GUEST_INITRAMFS_IMAGE_BUNDLE = "1"
#MC_GUEST_INITRAMFS_IMAGE = "${MC_GUEST_IMAGERECIPE}" #MC_GUEST_INITRAMFS_IMAGE = "${MC_GUEST_IMAGERECIPE}"
# These variables are set automatically, don't override them! # These variables are set automatically, don't edit them!
MC_GUEST_FILENAME_PREFIX = "${@ 'Image-initramfs' if d.getVar('MC_GUEST_INITRAMFS_IMAGE_BUNDLE',d) else '${MC_GUEST_IMAGERECIPE}' }" MC_GUEST_FILENAME_PREFIX = "${@ 'Image-initramfs' if d.getVar('MC_GUEST_INITRAMFS_IMAGE_BUNDLE',d) else '${MC_GUEST_IMAGERECIPE}' }"
MC_GUEST_FILENAME = "${MC_GUEST_FILENAME_PREFIX}-${MC_GUEST_MACHINE}.xenguest" MC_GUEST_FILENAME = "${MC_GUEST_FILENAME_PREFIX}-${MC_GUEST_MACHINE}.xenguest"
MC_GUEST_DEP = "${@ 'virtual/kernel:do_deploy' if d.getVar('MC_GUEST_INITRAMFS_IMAGE_BUNDLE',d) else '${MC_GUEST_IMAGERECIPE}:do_merge_xenguestenv'}" MC_GUEST_DEP = "${@ 'virtual/kernel:do_deploy' if d.getVar('MC_GUEST_INITRAMFS_IMAGE_BUNDLE',d) else '${MC_GUEST_IMAGERECIPE}:do_image_complete'}"
MC_DOIMAGE_MCDEPENDS += "mc:${MC_HOST}:${MC_GUEST}:${MC_GUEST_DEP} " MC_DOIMAGE_MCDEPENDS += "mc:${MC_HOST}:${MC_GUEST}:${MC_GUEST_DEP} "
@@ -114,10 +114,9 @@ IMAGE_FSTYPES += "${@ 'cpio' if d.getVar('MC_GUEST_INITRAMFS_IMAGE_BUNDLE',d) el
# ANY OTHER GUEST CONFIG # ANY OTHER GUEST CONFIG
``` ```
To modify the MACHINE or INITRAMFS variables change the equivalent This contents shouldn't be changed directly, rather change the equivalent
config in local.conf rather than modifying this file directly. You can also config in local.conf. You can append any other config desired for the
append any other config desired for the guest after "ANY OTHER GUEST CONFIG", guest at this point, for example `XENGUEST_IMAGE_DISK_SIZE`
for example `XENGUEST_IMAGE_DISK_SIZE`.
Make sure not to change `${DEPLOY_DIR_IMAGE}` to anything other than Make sure not to change `${DEPLOY_DIR_IMAGE}` to anything other than
`${TMPDIR}/deploy/images`, as this is assumed by local.conf. `${TMPDIR}/deploy/images`, as this is assumed by local.conf.
@@ -128,8 +127,6 @@ Make sure not to change `${DEPLOY_DIR_IMAGE}` to anything other than
TMPDIR = "${TOPDIR}/${MC_HOST}" TMPDIR = "${TOPDIR}/${MC_HOST}"
DISTRO_FEATURES += " arm-autonomy-host" DISTRO_FEATURES += " arm-autonomy-host"
# ANY OTHER HOST CONFIG
``` ```
Building the image Building the image
@@ -140,56 +137,29 @@ To build the multiconfig image the command is:
bitbake mc:host:arm-autonomy-host-image-minimal bitbake mc:host:arm-autonomy-host-image-minimal
``` ```
The first time this is run you may see a warning related to the SRC_URI: You should see that this triggers guest tasks to be built in
``` parallel. Once the build completes the guest will already be in the
Unable to get checksum for xenguest-extern-guests SRC_URI entry foo.xenguest: file could not be found rootfs of the host thanks to `ARM_AUTONOMY_HOST_IMAGE_EXTERN_GUEST`
```
This is expected, and only indicates that the guest image has not yet been The deployed image including the guest will be in `host/deploy/images/`
generated when the host parses the SRC_URI. By the time it is needed by the
host recipe fetch task it will be present.
During the build you should see that guest tasks are also being executed in
parallel. Once the build completes the guest will already be in the rootfs of
the host thanks to `ARM_AUTONOMY_HOST_IMAGE_EXTERN_GUEST`
The final host image including the guests will be deployed in
`host/deploy/images/`
Multiple Guests Multiple Guests
---------------- ----------------
To have multiple guests with the same config the line which appends to To have multiple guests with the same config the line which appends to
`ARM_AUTONOMY_HOST_IMAGE_EXTERN_GUESTS` just needs to pass the argument `ARM_AUTONOMY_HOST_IMAGE_EXTERN_GUEST` just needs to be duplicated with
'guestcount=#' to install symlink copies of the xenguest file on the host. a different guestname.
Documentation for the guestcount parameter can be found in
documentation/arm-autonomy-quickstart.md in the section titled
'Include guests directly in the host image'. This will ensure that the guest
is still only built once, despite resulting in multiple copies on the target.
If guests are required to have different configurations, each will need its own To have different config for each guest, each will need its own config
config file, e.g. 'netguest.conf'. Ensure that the name of the conf file does file similar to guest.conf, ensuring TMPDIR is set to a different path,
not contain any hyphens, as this will create errors when it becomes part of a and everything between `---Guest Config Start---` and
function name. In this file the values of TMPDIR, MACHINE, DISTRO_FEATURES etc. `---Guest Config End---` will need to be duplicated.
should be the same as above, but with the prefix "MC_GUEST_*" modified to
something different to avoid collisions (e.g. MC_GUEST_2_*).
As before, your additional config for the guest type should Any copies of variables that start `MC_GUEST` must be altered to avoid
follow "ANY OTHER GUEST CONFIG" collisions (e.g. `MC_GUEST_2_*`), and the name of the conf file must also
be added to BBMULTICONFIG.
In your local.conf, everything between `---Guest Config Start---` and
`---Guest Config End---` will need to be duplicated for each desired guest type.
All copies of variables that start `MC_GUEST` must be modified with the same
prefix as in the new guest config file (e.g. `MC_GUEST_2_*`).
Each chunk of guest config in local.conf has automatic guest variables
(found after the line "These variables are set automatically...").
These should all use the same prefix as their chunk in their values,
for example:
```
MC_GUEST_2_FILENAME_PREFIX = "${@ 'Image-initramfs' if d.getVar('MC_GUEST_2_INITRAMFS_IMAGE_BUNDLE',d) else '${MC_GUEST_2_IMAGERECIPE}' }"
```
Guest with provisioned disk Guest with provisioned disk
---------------- ----------------
@@ -202,12 +172,11 @@ AUTONOMY_HOST_EXTRA_PARTITION = "part --label provisioned-guest --source rawcopy
--sourceparams=file=${TOPDIR}/${MC_GUEST}/deploy/images/${MC_GUEST_MACHINE}/${MC_GUEST_FILENAME_PREFIX}-${MC_GUEST_MACHINE}.ext4" --sourceparams=file=${TOPDIR}/${MC_GUEST}/deploy/images/${MC_GUEST_MACHINE}/${MC_GUEST_FILENAME_PREFIX}-${MC_GUEST_MACHINE}.ext4"
``` ```
inside your host.conf file. inside host.conf file.
The rest of the configuration has to be appended to guest.conf file: The rest of the configuration has to be appended to guest.conf file:
``` ```
# ANY OTHER GUEST CONFIG
XENGUEST_IMAGE_DISK_SIZE = "0" XENGUEST_IMAGE_DISK_SIZE = "0"
XENGUEST_IMAGE_SRC_URI_XEN_CONFIG = "file://\${TOPDIR}/path/to/rootdisk.cfg" XENGUEST_IMAGE_SRC_URI_XEN_CONFIG = "file://\${TOPDIR}/path/to/rootdisk.cfg"
XENGUEST_IMAGE_DISK_DEVICE = "_GUEST_DISK_DEVICE_" XENGUEST_IMAGE_DISK_DEVICE = "_GUEST_DISK_DEVICE_"
@@ -216,7 +185,7 @@ IMAGE_ROOTFS_SIZE = "102400"
IMAGE_FSTYPES = "ext4" IMAGE_FSTYPES = "ext4"
``` ```
Example content of rootdisk.cfg: content of rootdisk.cfg"
``` ```
disk = ["phy:_GUEST_DISK_DEVICE_,xvda,w"] disk = ["phy:_GUEST_DISK_DEVICE_,xvda,w"]
@@ -1,9 +1,9 @@
arm-autonomy Quick Start arm-autonomy Quick Start
================== ==================
This documentation explains how to quickly start with the arm-autonomy layer, This documentation is explaining how to quickly start with arm-autonomy layer
and the main features provided. and the main features provided.
In the documentation directory you will find some more detailed documentation You will find in the documentation directory some more detailed documentation
for each of the functionalites provided by this layer. for each of the functionalites provided by this layer.
What to use this layer for? What to use this layer for?
@@ -29,7 +29,7 @@ First you must download the Yocto layers needed:
- all other layers you might want to use - all other layers you might want to use
For each of the downloaded layer make sure you checkout the release of Yocto For each of the downloaded layer make sure you checkout the release of Yocto
you want to use (for example honister using `git checkout honister`). you want to use (for example zeus using `git checkout zeus`).
Please follow [Yocto documentation](https://www.yoctoproject.org/docs/latest/brief-yoctoprojectqs/brief-yoctoprojectqs.html) Please follow [Yocto documentation](https://www.yoctoproject.org/docs/latest/brief-yoctoprojectqs/brief-yoctoprojectqs.html)
in order to have the required dependencies. in order to have the required dependencies.
@@ -110,8 +110,7 @@ The project will generate a Linux kernel, a root filesystem, a Xen binary and
a DTB modified to include the required entries to boot Xen and Linux as Dom0 a DTB modified to include the required entries to boot Xen and Linux as Dom0
(this DTB has the extension `-xen.dtb`). (this DTB has the extension `-xen.dtb`).
To boot the system using a u-boot base board for machines other than FVP-Base To boot the system using an u-boot base board you will need to:
you will need to:
- Load the kernel (by default at 0x80080000 unless you modify - Load the kernel (by default at 0x80080000 unless you modify
XEN_DEVICETREE_DOM0_ADDR value) XEN_DEVICETREE_DOM0_ADDR value)
- Load the xen device tree (for example at 0x83000000) - Load the xen device tree (for example at 0x83000000)
@@ -120,88 +119,53 @@ you will need to:
In this example the addresses might need to be adapted depending on your board. In this example the addresses might need to be adapted depending on your board.
For arm-autonomy host on FVP-Base, u-boot has been modified such that For arm-autonomy host on FVP-Base u-boot has been modified such that
`booti 0x84000000 - 0x83000000` is the default boot command. If FVP-Base is your `booti 0x84000000 - 0x83000000` is the default boot command. If FVP-Base is your
MACHINE target there should be no need to interfere with u-boot. MACHINE target there should be no need to interfere with u-boot.
Guest project Guest project
------------- -------------
The guest projects are not target specific and will instead use a Yocto MACHINE The guest projects are not target specific and will use a Yocto MACHINE defined
defined in meta-arm-autonomy to include only the Linux configuration required to in meta-arm-autonomy to include only the Linux configuration required to run
run a xen guest. a xen guest.
To create a guest project: To create a guest project:
1. Follow the steps of "Create a project" 1. Follow the steps of "Create a project"
2. Optionally add layers required to build the guest image, and any features you 2. Optionaly add layers required to build the image and features you need.
need.
3. Edit conf/local.conf to add `arm-autonomy-guest` to the DISTRO_FEATURES and 3. edit conf/local.conf to add `arm-autonomy-guest` to the DISTRO_FEATURES and
set MACHINE to `arm64-autonomy-guest`: set MACHINE to `arm64-autonomy-guest`:
``` ```
MACHINE = "arm64-autonomy-guest" MACHINE = "arm64-autonomy-guest"
DISTRO_FEATURES += "arm-autonomy-guest" DISTRO_FEATURES += "arm-autonomy-guest"
``` ```
4. Build the image you want. 4. build the image you want.
For example `bitbake core-image-minimal` For example `bitbake core-image-minimal`
The build will create a ".xenguest" image that can be use on an host project The build will create a ".xenguest" image that can be use on an host project
with the xenguest-manager, as well as a file "xenguest.env" containing the with the xenguest-manager.
variables used to configure and generate the guest image.
The guest can also be built as a 'multiconfig' sub project of the host, see The guest can also be built as a 'multiconfig' sub project of the host, see
`meta-arm-autonomy/documentation/arm-autonomy-multiconfig.md` for more `meta-arm-autonomy/documentation/arm-autonomy-multiconfig.md` for more information
information
Include guests directly in the host image Include guests directly in the host image
----------------------------------------- -----------------------------------------
The layer provides a way to directly include one or more images generated by The layer provides a way to directly include in the host project one or several
guest projects in the host project. images generated by guest projects.
To use this feature, you must edit your host project `local.conf` file and To use this feature, you must edit your host project `local.conf` file and
add set the value of 'ARM_AUTONOMY_HOST_IMAGE_EXTERN_GUESTS' to the list of add set ARM_AUTONOMY_HOST_IMAGE_EXTERN_GUESTS to the list of xenguest images
paths to xenguest images you want to include in your host. you want to include in your host. Each xenguest image must be given using a
full path to it.
There are 4 supported formats for ARM_AUTONOMY_HOST_IMAGE_EXTERN_GUESTS
entries:
- http/https url
- "https://[url]:[port]/foo.xenguest;md5sum=..."
- file:// absolute local path from root
- "file:///xenguests/bar.xenguest"
- file:// path relative to FILESEXTRAPATHS
- "file://relative/baz.xenguest"
- plain absolute local path from root
- "/xenguests/absolute/xyzzy.xenguest"
It is not recommended to use other bitbake URL types, as they may result in
undefined behaviour.
A semicolon seperated list of install arguments can follow each image path:
- guestname : the name that will be attached when the image is imported
(default: [filename, without extension])
- guestcount : the number of copies of the guest to install, with
incrementing numbers appended to the name
(default: 1)
Any other arguments, for example an md5sum, will be assumed to be fetch
arguments, and will be appended to the path in the SRC_URI.
For example: For example:
``` ```
ARM_AUTONOMY_HOST_IMAGE_EXTERN_GUESTS = "\ ARM_AUTONOMY_HOST_IMAGE_EXTERN_GUESTS = "/home/user/guest-project/tmp/deploy/images/arm64-autonomy-guest/core-image-minimal-arm64-autonomy-guest.xenguest;guestname=myguest"
https://[url]:[port]/base.xenguest;md5sum=[checksum];guestname=http \
file:///guests/base.xenguest;guestname=file_abs \
file://foo/base.xenguest;guestname=file_rel;guestcount=2 \
/guests/foo/bar/base.xenguest;guestname=no_fetcher \ "
``` ```
This will add the guest and name it `myguest` on the host project image and
Documentation for setting up a multiconfig build can be found in: the xenguest-manager will automatically boot it during startup.
meta-arm-autonomy/documentation/arm-autonomy-multiconfig.md
Add support for your board Add support for your board
-------------------------- --------------------------
@@ -222,7 +186,7 @@ started). You can find the complete list of the kernel configuration elements
required in `recipes-kernel/linux/arm-autonomy-kmeta/features/arm-autonomy/xen-host.cfg`. required in `recipes-kernel/linux/arm-autonomy-kmeta/features/arm-autonomy/xen-host.cfg`.
### Define the drive and partition to use for the LVM volume ### Define the drive and partition to use for the LVM volume
The xenguest-manager creates guest storage drives using LVM on an empty The xenguest-manager is creating disk hard drive using LVM on an empty
partition. The default value is set to use /dev/sda2. partition. The default value is set to use /dev/sda2.
You can change this for your board by setting XENGUEST_MANAGER_VOLUME_DEVICE. You can change this for your board by setting XENGUEST_MANAGER_VOLUME_DEVICE.
@@ -231,37 +195,37 @@ Check `recipes-extended/xenguest/xenguest-manager.bbappend` for examples.
Please also read xenguest-manager.md. Please also read xenguest-manager.md.
### Define the interface to add to xenguest network bridge ### Define the interface to add to xenguest network bridge
xenguest-network bridge creates a bridge on the host and adds network xenguest-network bridge is creating a bridge on the host and adds network
interfaces to it so that guests connected to it have access to external network. interfaces to it so that guest connected to it have access to external network.
By default `eth0` is set as the list of interfaces to be added to the bridge. By default `eth0` is set as the list of interfaces to be added to the bridge.
Depending on your board or use case you might want to use an other interface Depending on your board or use case you might want to use an other interface
or use multiple interfaces. or use multiple interfaces.
You can change this for your board by setting XENGUEST_NETWORK_BRIDGE_MEMBERS. You can change this for your board by setting XENGUEST_NETWORK_BRIDGE_MEMBERS.
Check `recipes-extended/xenguest/xenguest-network.bbappend` for Check `recipes-extended/xenguest/xenguest-network-bridge.bbappend` for
exmaples. exmaples.
Please also read xenguest-network-bridge.md. Please also read xenguest-network-bridge.md.
### Define the network configuration of the xenguest network bridge ### Define the network configuration of the xenguest network bridge
xenguest-network puts the host network interfaces in a bridge and configures it xenguest network bridge is putting the host network interfaces in a bridge
by default to use dhcp. and is configuring it by default to use dhcp.
If you need a different type of configuration you can set If you need a different type of configuration you can set
XENGUEST_NETWORK_BRIDGE_CONFIG in your xenguest-network-bridge.bbappend to use XENGUEST_NETWORK_BRIDGE_CONFIG in a xenguest-network-bridge.bbappend to use
a different file. a different file.
The recipe will look for the file in ${WORKDIR}, so you will need to add it to The recipe will look for the file in ${WORKDIR} so you will need to add it to
the SRC_URI in your bbappend. SRC_URI in your bbappend.
The recipe will also substitute `###BRIDGE_NAME###` with the bridge name The recipe will also substitute `###BRIDGE_NAME###` with the bridge name
configured in ${XENGUEST_NETWORK_BRIDGE_NAME} when the config file is installed. configured in ${XENGUEST_NETWORK_BRIDGE_NAME}.
You can find an example configuration file in You can find an example configuration file in
`recipes-extended/xenguest/files/xenguest-network-bridge-dhcp.cfg.in`. `recipes-extended/xenguest/files/xenguest-network-bridge-dhcp.cfg.in`.
Please also read xenguest-network.md. Please also read xenguest-network-bridge.md.
### Customize Dom0 and Xen boot arguments for you board ### Customize Dom0 and Xen boot arguments for you board
xen-devicetree modifies the generated DTB Xen and Linux boot arguments, xen-devicetree is writting inside the generated DTB Xen and Linux boot
as long as the address where Dom0 Linux kernel can be found. arguments as long as the address where Dom0 Linux kernel can be found.
You might need to have different values for your board or depending on your You might need to have different values for your board or depending on your
use case. use case.
@@ -11,24 +11,19 @@ perform a couple of customizations in the generated wic image:
1 MiB per physical volume, hence it needs to be taken into account when 1 MiB per physical volume, hence it needs to be taken into account when
setting GUEST_PART_SIZE. setting GUEST_PART_SIZE.
2. Set the boot partition size (default: 100M) via `BOOT_PART_SIZE` and 2. The wic image partition layout and contents with a custom wks file via
`BOOT_PART_SIZE_UNIT` (M or G) variables in any conf file. The default
bootimg is ~44M so 100M leaves just over 50M of free space.
3. The wic image partition layout and contents with a custom wks file via
`ARM_AUTONOMY_WKS_FILE` variable (default: `ARM_AUTONOMY_WKS_FILE` variable (default:
arm-autonomy-n1sdp-efidisk.wks.in which is affected by GUEST_PART_SIZE, arm-autonomy-n1sdp-efidisk.wks.in which is affected by GUEST_PART_SIZE,
GUEST_PART_SIZE_UNIT, BOOT_PART_SIZE, BOOT_PART_SIZE_UNIT and GUEST_PART_SIZE_UNIT and GRUB_CFG_FILE variables).
GRUB_CFG_FILE variables).
4. Custom grub.cfg file via `GRUB_CFG_FILE` (default: 3. Custom grub.cfg file via `GRUB_CFG_FILE` (default:
arm-autonomy-n1sdp-grub.cfg) variable to be set in any conf file. The full arm-autonomy-n1sdp-grub.cfg) variable to be set in any conf file. The full
path or relative to `ARM_AUTONOMY_WKS_FILE` should be set. path or relative to `ARM_AUTONOMY_WKS_FILE` should be set.
The `arm-autonomy-n1sdp-efidisk.wks.in` and `arm-autonomy-n1sdp-grub.cfg` files The `arm-autonomy-n1sdp-efidisk.wks.in` and `arm-autonomy-n1sdp-grub.cfg` files
are located at `meta-arm-autonomy/dynamic-layers/meta-arm-bsp/wic`. are located at `meta-arm-autonomy/dynamic-layers/meta-arm-bsp/wic`.
Other variables can also be customized to set what files need to be included Other variables can also be custmized to set what files need to be included
in the wic image boot partition. Please refer to in the wic image boot partition. Please refer to
`meta-arm-autonomy/dynamic-layers/meta-arm-bsp/conf/machine/n1sdp-extra-settings.inc` `meta-arm-autonomy/dynamic-layers/meta-arm-bsp/conf/machine/n1sdp-extra-settings.inc`
for more details. for more details.
@@ -56,8 +56,7 @@ The following parameters are available:
the xen devicetrees are properly regenerated if the source DTBs are changed. the xen devicetrees are properly regenerated if the source DTBs are changed.
This variable is set by default to "virtual/kernel:do_deploy" to use DTBs This variable is set by default to "virtual/kernel:do_deploy" to use DTBs
generated during the compilation of the Linux kernel. This must be changed generated during the compilation of the Linux kernel. This must be changed
if the machine you are using is not using a DTB listed in if the machine your are using is not using a DTB listed in KERNEL_DEVICETREE.
KERNEL_DEVICETREE.
- XEN_DEVICETREE_DTBS: This should be set to the list of DTBs you want to be - XEN_DEVICETREE_DTBS: This should be set to the list of DTBs you want to be
modified by xen-devicetree. Those must be files that xen-devicetree can find modified by xen-devicetree. Those must be files that xen-devicetree can find
@@ -71,10 +70,7 @@ The following parameters are available:
This variable is only used if XEN_DEVICETREE_XEN_BOOTARGS has a value This variable is only used if XEN_DEVICETREE_XEN_BOOTARGS has a value
containing "dom0_mem=${XEN_DEVICETREE_DOM0_MEM}" as the memory assigned to containing "dom0_mem=${XEN_DEVICETREE_DOM0_MEM}" as the memory assigned to
dom0 is defined using Xen boot arguments. dom0 is defined using Xen boot arguments.
This variable is set by default to "1024M,max:1024", and cannot be empty. This variable is set by default to "1024M".
The value can simply specify a size, e.g. "1024M", but best practice is to
also provide a max, documented here:
https://wiki.xenproject.org/wiki/Xen_Project_Best_Practices
- XEN_DEVICETREE_DOM0_BOOTARGS: Boot arguments to pass to Dom0 Linux when - XEN_DEVICETREE_DOM0_BOOTARGS: Boot arguments to pass to Dom0 Linux when
booting it. booting it.
@@ -88,8 +84,7 @@ The following parameters are available:
- XEN_DEVICETREE_DOM0_ADDR: This is the address from which the Linux kernel to - XEN_DEVICETREE_DOM0_ADDR: This is the address from which the Linux kernel to
be used for Dom0 will be copied. When using u-boot, this is the address at be used for Dom0 will be copied. When using u-boot, this is the address at
which you will load the kernel Image before starting Xen. which you will load the kernel Image before starting Xen.
This variable is set by default to "0x80080000", and cannot be empty. This variable is set by default to "0x80080000".
Values for this variable can be in hex (prefixed with '0x') or in decimal.
- XEN_DEVICETREE_DOM0_SIZE: This is the size of the kernel loaded at - XEN_DEVICETREE_DOM0_SIZE: This is the size of the kernel loaded at
${XEN_DEVICETREE_DOM0_ADDR}. Xen will copy this amount of data inside the ${XEN_DEVICETREE_DOM0_ADDR}. Xen will copy this amount of data inside the
@@ -97,8 +92,7 @@ The following parameters are available:
size but can be bigger. You must be careful not to have a value too big as it size but can be bigger. You must be careful not to have a value too big as it
could slow down boot or copy other parts with it (like the DTB). could slow down boot or copy other parts with it (like the DTB).
You might need to increase this if you use a kernel with a bundled initramfs. You might need to increase this if you use a kernel with a bundled initramfs.
This variable is set by default to "0x01000000" and cannot be empty. This variable is set by default to "0x01000000".
Values for this variable can be in hex (prefixed with '0x') or in decimal.
- XEN_DEVICETREE_DTSI_MERGE: This variable contains the list of dtsi files that - XEN_DEVICETREE_DTSI_MERGE: This variable contains the list of dtsi files that
must be included inside the generated DTB file. By default the only one must be included inside the generated DTB file. By default the only one
@@ -7,7 +7,7 @@ Introduction
xenguest-manager is a tool to manage Xenguest images generated by xenguest-manager is a tool to manage Xenguest images generated by
[xenguest-mkimage](xenguest-mkimage.md). [xenguest-mkimage](xenguest-mkimage.md).
On a Xen Dom0 system it can: On a Xen Dom0 system it will:
- create a xen guest from a xenguest image: extract its components, create a - create a xen guest from a xenguest image: extract its components, create a
disk for the guest using LVM volumes. disk for the guest using LVM volumes.
- start/stop a xen guest (during init or using xenguest-manager directly). - start/stop a xen guest (during init or using xenguest-manager directly).
@@ -23,7 +23,7 @@ Usage
----- -----
xenguest-manager must be called like this: xenguest-manager must be called like this:
`xenguest-manager [-v(v)] OPERATION [OPTIONS]` `xenguest-manager OPERATION [OPTIONS]`
The following operations are available: The following operations are available:
- create XENGUEST_IMAGE [GUESTNAME]: create a guest from a xenguest image file - create XENGUEST_IMAGE [GUESTNAME]: create a guest from a xenguest image file
as guest GUESTNAME. If GUESTNAME is not given the image file name is used as guest GUESTNAME. If GUESTNAME is not given the image file name is used
@@ -37,9 +37,6 @@ The following operations are available:
- status [GUESTNAME]: print the current status of GUESTNAME. If GUESTNAME is - status [GUESTNAME]: print the current status of GUESTNAME. If GUESTNAME is
not given, print the status of all guests. not given, print the status of all guests.
Passing -v or -vv will increase the logging written to the logfile.
The terminal will always show only error messages, regardless of the logfile.
For a detailed help on available options please use: For a detailed help on available options please use:
`xenguest-manager --help` `xenguest-manager --help`
@@ -48,7 +45,6 @@ Bitbake parameters
Several parameters are available to configure the xenguest manager during Yocto Several parameters are available to configure the xenguest manager during Yocto
project compilation (those can be set in your project local.conf, for example). project compilation (those can be set in your project local.conf, for example).
This config will be written to a file xenguest-manager.conf in /etc/xenguest/.
The following parameters are available: The following parameters are available:
@@ -69,22 +65,6 @@ The following parameters are available:
name). name).
This is set by default to "/usr/share/guests". This is set by default to "/usr/share/guests".
- XENGUEST_MANAGER_LOG_LEVEL: Set the default log level for xenguest manager.
Must be one of ERROR, INFO, VERBOSE (default: ERROR). The logs will be
written to /var/log/xenguest.
If a verbosity argument (-v or -vv) is passed to xenguest-manager directly, it
will override the setting in xenguest-manager.conf
Since /var/log is by default a volatile location, extra configuration is
required if logs are desired to be kept between reboots:
VOLATILE_LOG_DIR="no"
Read more here: https://www.yoctoproject.org/docs/latest/mega-manual/mega-manual.html#var-VOLATILE_LOG_DIR
When this is enabled, logrotate will monitor the file to ensure it does not
grow excessively large. See recipes-extended/xenguest/files/logrotate-xenguest
Init scripts Init scripts
------------ ------------
@@ -100,7 +80,7 @@ directory on the target:
Inside the directory, scripts will be executed in alphabetical order. Inside the directory, scripts will be executed in alphabetical order.
Since these scripts are sourced by xenguest-manager, they can acccess functions Since these scripts are sourced by xenguest-manager they can acccess functions
and variables from the parent file's scope, including: and variables from the parent file's scope, including:
- ${guestname} : The name of the guest being created - ${guestname} : The name of the guest being created
@@ -109,34 +89,11 @@ and variables from the parent file's scope, including:
- ${guestcfgfile} : The name of the config file for the starting guest - ${guestcfgfile} : The name of the config file for the starting guest
- log() : Used to write a log to the logfile, default level INFO. - ${LOGFILE} : The file to append any logging to, e.g.
Takes an optional log level and a message body echo "Hello, World" >> ${LOGFILE}
e.g. log ERROR "blah"
Options for log level: ERROR, INFO, VERBOSE, Sourcing also allows the script to access params.cfg.
and FATAL which will call exit 1 immediately after logging
the message at level ERROR.
- log_command() : Used to call a shell command and log that it has been
called, as well as capturing both stdout and stderr.
By default the command output is dumped to the logfile as an
error if the command returns a status > 0, or as a verbose
message if the whole script is running in verbose mode.
An optional log level can be passed to alter the level the
log should be if the command returns a status >0, which may
be useful if the command is expected to return a non-zero
result.
e.g. log_command INFO "ls -lh ~"
Options for log level: ERROR, INFO, and VERBOSE
Attempting to call any other functions from xenguest_manager in an init script
may result in a fatal error, from which cleanup is not guarenteed.
Init scripts also have access to config variables defined in params.cfg.
An example of how to create the directory and install an init shell script can An example of how to create the directory and install an init shell script can
be found in: be found in:
@@ -4,9 +4,9 @@ Xenguest mkimage
Introduction Introduction
------------ ------------
xenguest-mkimage is a tool to create and modify images to be used as a Guest xenguest-mkimage is a tool to create and modify images to be used as Guest with
with Xen. It defines a format to store completely defined guests as a file or as Xen. It defines a format to store completely defined guests as a file or as
a directory, and provides options to create and modify those images. a directory and provides options to create and modify those images.
A xenguest image contains all elements required to create a xen guest. A xenguest image contains all elements required to create a xen guest.
This is the base elements like a Xen configuration and a Linux kernel binary This is the base elements like a Xen configuration and a Linux kernel binary
@@ -15,8 +15,8 @@ but also some more advanced elements like init scripts or a disk definition.
The format is made to be deployable easily by storing everything in a single The format is made to be deployable easily by storing everything in a single
file and provide tools to easily manipulate the images. It can also easily be file and provide tools to easily manipulate the images. It can also easily be
extended to have features like encryption or signature of images, updates or extended to have features like encryption or signature of images, updates or
complex configurations by providing the ability to have init scripts embedded complex configurations by providing features to have init script that will be
inside the image that will be executed on the host when the guest is started. executed on the host embedded inside the image.
Xenguest images content Xenguest images content
----------------------- -----------------------
@@ -35,7 +35,7 @@ before starting the guest.
### files ### files
This directory contains files that can be used by the xen configuration, for This directory contains files that can be used by the xen configuration, for
example the kernel image referenced in xen configuration. example the binary of the kernel referenced in xen configuration).
This is where the kernel binary, the dtb or a ramdisk will be stored. This is where the kernel binary, the dtb or a ramdisk will be stored.
### init.pre, init.d and init.post ### init.pre, init.d and init.post
@@ -47,7 +47,7 @@ contains scripts called at a different time:
generate part of the xen configuration dynamically. generate part of the xen configuration dynamically.
- init.d: scripts executed when the guest has been created but before it is - init.d: scripts executed when the guest has been created but before it is
started. This can be used to do some xenstore operations or configure the started. This can be used to do some xenstore operations or configure the
guest behaviour, using xl for example. guest behaviour using xl, for example.
- init.post: scripts executed just after starting the guest. This can be - init.post: scripts executed just after starting the guest. This can be
used to configure things created by xen for the guest like network used to configure things created by xen for the guest like network
network interfaces. network interfaces.
@@ -58,19 +58,12 @@ order.
### disk.cfg and disk-files ### disk.cfg and disk-files
disk.cfg contains the guest disk description (disk size and disk partitions). disk.cfg contains the guest disk description (disk size and disk partitions).
The file contains the following entries: The file contains the following entries:
- `DISK_SIZE=X`: size of the disk to create in MB or GB(default), - `DISK_SIZE=X`: size of the disk to create in GB
e.g. 1000M or 4[G]
- `DISK_PARTX=SIZE:FS:CONTENT`: create a partition number X (1 to 4) with a - `DISK_PARTX=SIZE:FS:CONTENT`: create a partition number X (1 to 4) with a
size of SIZE MB or GB(default), e.g 1000M or 2[G]. size of SIZE GB, format it with filesystem FS (can be ext2, ext3, ext4, vfat
Format it with filesystem FS (can be ext2, ext3, ext4, vfat or swap) or swap) and extract CONTENT as initial partition content
and extract CONTENT as initial partition content (.tar[.gz|.xz|.bz2] file (.tar[.gz|.xz|.bz2] file or img[.gz|.bz2] file to be dumped in the partition). FS and
or img[.gz|.bz2] file to be dumped in the partition). CONTENT can be empty.
FS and CONTENT can be empty.
- `DISK_DEVICE=X`: disk or partition to be used by lvm. Setting this option
allows to bind guest disk with any partition or disk available on host,
e.g. /dev/sda3 or /dev/sdb.
This variable is not set by default, but if set, it overrides disk settings
inside xenguest-manager.conf - 'XENGUEST_VOLUME_DEVICE'.
The disk-files contain files to be used for initializing the disk partitions The disk-files contain files to be used for initializing the disk partitions
content. Those should be used to create a LVM or a physical disk and initialize content. Those should be used to create a LVM or a physical disk and initialize
@@ -112,12 +105,12 @@ For a detailed help on available operations, please use:
image file. Several script can be added and the basename of FILE is used to image file. Several script can be added and the basename of FILE is used to
distinguish them (calling the option twice with the same file will update the distinguish them (calling the option twice with the same file will update the
script in the image with the second one). script in the image with the second one).
--disk-size=SIZE: set the guest disk size to SIZE in MB or GB(default), --disk-size=SIZE: set the guest disk size to SIZE in GB. Calling this with 0
e.g 1000M or 2[G]. Calling this with 0 disable the guest disk. disable the guest disk.
- --disk-add-part=NUM:SIZE:FS:CONTENT: This is adding a partition to the - --disk-add-part=NUM:SIZE:FS:CONTENT: This is adding a partition to the
xenguest image disk. The partition is described with the arguments: xenguest image disk. The partition is described with the arguments:
- NUM: partition number. - NUM: partition number.
- SIZE: partition size in MB or GB(default), e.g 1000M or 2[G]. - SIZE: partition size in GB.
- FS: filesystem to format the partition with. This can be ext2, ext3, ext4, - FS: filesystem to format the partition with. This can be ext2, ext3, ext4,
vfat of swap. If empty the partition is not formated. vfat of swap. If empty the partition is not formated.
- CONTENT: tar of img file to use to initialize the partition. The file must - CONTENT: tar of img file to use to initialize the partition. The file must
@@ -1,7 +1,7 @@
# Require extra machine specific settings # Require extra machine specific settings
ARM_BSP_DYN_MACHINE_EXTRA_REQUIRE ?= "" ARM_BSP_DYN_MACHINE_EXTRA_REQUIRE ?= ""
ARM_BSP_DYN_MACHINE_EXTRA_REQUIRE:n1sdp = "n1sdp-extra-settings.inc" ARM_BSP_DYN_MACHINE_EXTRA_REQUIRE_n1sdp = "n1sdp-extra-settings.inc"
ARM_BSP_DYN_MACHINE_EXTRA_REQUIRE:fvp-base = "fvp-base-extra-settings.inc" ARM_BSP_DYN_MACHINE_EXTRA_REQUIRE_fvp-base = "fvp-base-extra-settings.inc"
ARM_BSP_DYN_MACHINE_EXTRA_REQUIRE:juno = "juno-extra-settings.inc" ARM_BSP_DYN_MACHINE_EXTRA_REQUIRE_juno = "juno-extra-settings.inc"
require ${ARM_BSP_DYN_MACHINE_EXTRA_REQUIRE} require ${ARM_BSP_DYN_MACHINE_EXTRA_REQUIRE}
@@ -1,39 +1,7 @@
# Extra machine settings for fvp-base # Extra machine settings for fvp-base
# FVP uses vda as hard drive and partition 1 is the # FVP uses vda as hard drive and partition 2 is the
# default rootfs, so use vda2 for guest lvm # default rootfs, so use vda3 for guest lvm
XENGUEST_MANAGER_VOLUME_DEVICE ?= "/dev/vda2" XENGUEST_MANAGER_VOLUME_DEVICE ?= "/dev/vda3"
# We need to extend the wks search path to be able to find the wks file set in
# ARM_AUTONOMY_WKS_FILE.
WKS_SEARCH_PATH:prepend := "${ARM_AUTONOMY_ARM_BSP_DYNAMIC_DIR}/wic:"
ARM_AUTONOMY_WKS_FILE ?= "arm-autonomy-fvp-base-disk.wks.in"
# set wks file only if INITRAMFS_IMAGE_BUNDLE is not set
WKS_FILE = "${@bb.utils.contains('INITRAMFS_IMAGE_BUNDLE', '1', '',\
'${ARM_AUTONOMY_WKS_FILE}', d)}"
XEN_FILE ?= "xen-fvp-base"
DTB_FILE ?= "${@ get_xen_dtb_filename(d)}"
XEN_ADDR ?= "0x84000000"
DTB_ADDR ?= "0x83000000"
FVP_DATA += "cluster0.cpu0=${DEPLOY_DIR_IMAGE}/${XEN_FILE}@${XEN_ADDR} \
cluster0.cpu0=${DEPLOY_DIR_IMAGE}/${DTB_FILE}@${DTB_ADDR}"
# Set the wks guest partition size and unit. It must be aligned with the sum of
# all XENGUEST_IMAGE_DISK_SIZE set for the guests. By default, LVM2 metadata is
# 1 MiB per physical volume, hence it needs to be taken into account when
# setting GUEST_PART_SIZE. The XENGUEST_IMAGE_DISK_SIZE default value is 4GiB.
GUEST_PART_SIZE ?= "4097"
GUEST_PART_SIZE_UNIT ?= "M"
XENGUEST_NETWORK_BRIDGE_MEMBERS ?= "eth0" XENGUEST_NETWORK_BRIDGE_MEMBERS ?= "eth0"
# This function uses the "KERNEL_DEVICETREE" variable and manipulates it to
# return the xen kernel device tree file name.
def get_xen_dtb_filename(d):
kernel_dtb_filename = d.getVar('KERNEL_DEVICETREE',d)
xen_dtb_filename = os.path.splitext(os.path.basename(kernel_dtb_filename))[0] + '-xen.dtb'
return xen_dtb_filename
@@ -7,7 +7,7 @@ XEN_DEVICETREE_DOM0_SIZE ?= "0x02400000"
# We need to extend the wks search path to be able to find the wks file set in # We need to extend the wks search path to be able to find the wks file set in
# ARM_AUTONOMY_WKS_FILE. # ARM_AUTONOMY_WKS_FILE.
WKS_SEARCH_PATH:prepend := "${ARM_AUTONOMY_ARM_BSP_DYNAMIC_DIR}/wic:" WKS_SEARCH_PATH_prepend := "${ARM_AUTONOMY_ARM_BSP_DYNAMIC_DIR}/wic:"
ARM_AUTONOMY_WKS_FILE ?= "arm-autonomy-juno-disk.wks.in" ARM_AUTONOMY_WKS_FILE ?= "arm-autonomy-juno-disk.wks.in"
# set wks file only if INITRAMFS_IMAGE_BUNDLE is not set # set wks file only if INITRAMFS_IMAGE_BUNDLE is not set
@@ -2,7 +2,7 @@
# We need to extent the wks search path to be able to find the wks file set in # We need to extent the wks search path to be able to find the wks file set in
# ARM_AUTONOMY_WKS_FILE. # ARM_AUTONOMY_WKS_FILE.
WKS_SEARCH_PATH:prepend := "${ARM_AUTONOMY_ARM_BSP_DYNAMIC_DIR}/wic:" WKS_SEARCH_PATH_prepend := "${ARM_AUTONOMY_ARM_BSP_DYNAMIC_DIR}/wic:"
ARM_AUTONOMY_WKS_FILE ?= "arm-autonomy-n1sdp-efidisk.wks.in" ARM_AUTONOMY_WKS_FILE ?= "arm-autonomy-n1sdp-efidisk.wks.in"
WKS_FILE = "${ARM_AUTONOMY_WKS_FILE}" WKS_FILE = "${ARM_AUTONOMY_WKS_FILE}"
@@ -14,19 +14,8 @@ WKS_FILE = "${ARM_AUTONOMY_WKS_FILE}"
GUEST_PART_SIZE ?= "4097" GUEST_PART_SIZE ?= "4097"
GUEST_PART_SIZE_UNIT ?= "M" GUEST_PART_SIZE_UNIT ?= "M"
# Set default boot partition size and unit
BOOT_PART_SIZE ?= "100"
BOOT_PART_SIZE_UNIT ?= "M"
# The GRUB_CFG_FILE affects arm-autonomy-n1sdp-efidisk.wks.in file # The GRUB_CFG_FILE affects arm-autonomy-n1sdp-efidisk.wks.in file
# GRUB_CFG_FILE ?= "${ARM_AUTONOMY_ARM_BSP_DYNAMIC_DIR}/wic/arm-autonomy-n1sdp-grub.cfg"
# When alternate-kernel DISTRO_FEATURE is present we set the
# arm-autonomy-n1sdp-rt-grub.cfg by default. This GRUB config file has
# additional entries for booting with the PREEMPT_RT kernel.
GRUB_CFG_FILE ?= "${@bb.utils.contains('DISTRO_FEATURES','alternate-kernel', \
'${ARM_AUTONOMY_ARM_BSP_DYNAMIC_DIR}/wic/arm-autonomy-n1sdp-rt-grub.cfg', \
'${ARM_AUTONOMY_ARM_BSP_DYNAMIC_DIR}/wic/arm-autonomy-n1sdp-grub.cfg' \
, d)}"
# From arm-autonomy-n1sdp-efidisk.wks.in, the /boot partition is /dev/sda1, and # From arm-autonomy-n1sdp-efidisk.wks.in, the /boot partition is /dev/sda1, and
# the "/" partition is /dev/sda2. # the "/" partition is /dev/sda2.
@@ -49,46 +38,3 @@ do_image_wic[depends] += "xen:do_deploy"
IMAGE_EFI_BOOT_FILES += "xen-n1sdp.efi;xen.efi" IMAGE_EFI_BOOT_FILES += "xen-n1sdp.efi;xen.efi"
IMAGE_EFI_BOOT_FILES += "${XEN_MOD_DEVICETREE_DTBS}" IMAGE_EFI_BOOT_FILES += "${XEN_MOD_DEVICETREE_DTBS}"
# When alternate-kernel DISTRO_FEATURE is present we set the linux-yocto-rt
# by default
PREFERRED_PROVIDER_alternate/kernel ?= "\
${@bb.utils.contains('DISTRO_FEATURES', 'alternate-kernel', \
'linux-yocto-rt', '', d)}"
KERNEL_PACKAGE_NAME_alternate/kernel ?= "kernel-rt"
# When alternate-kernel DISTRO_FEATURE is present we set the kernel-rt by
# default
KERNEL_PACKAGE_NAME:pn-linux-yocto-rt = "\
${@ d.getVar('KERNEL_PACKAGE_NAME_alternate/kernel') \
if bb.utils.contains('DISTRO_FEATURES', 'alternate-kernel', True, False, d) \
else 'kernel' }"
# Relative path from DEPLOY_DIR_IMAGE of the Kernel PREEMPT_RT deployed Image
KERNEL_RT_IMAGE ?= "kernel-rt/Image-n1sdp.bin;Image-preempt-rt"
# Only include the Kernel PREEMPT_RT Image if we are building with
# alternate-kernel DISTRO_FEATURE
IMAGE_EFI_BOOT_FILES += "\
${@ d.getVar('KERNEL_RT_IMAGE',d) or '' \
if bb.utils.contains('DISTRO_FEATURES', 'alternate-kernel', True, False, d) and \
d.getVar('PREFERRED_PROVIDER_alternate/kernel') else ''}"
EFIDIR ?= "/EFI/BOOT"
GRUB_CFG_EXTRA_FILE ?= "${ARM_AUTONOMY_ARM_BSP_DYNAMIC_DIR}/wic/arm-autonomy-n1sdp-grub.cfg;.${EFIDIR}}"
# When alternate-kernel DISTRO_FEATURE is present we set the
# arm-autonomy-n1sdp-rt-grub.cfg by default. This GRUB config file has
# additional entries for booting with the PREEMPT_RT kernel and also includes
# the main GRUB config file set by GRUB_CFG_EXTRA_FILE.
IMAGE_EFI_BOOT_FILES += "\
${@ d.getVar('GRUB_CFG_EXTRA_FILE',d) or '' \
if bb.utils.contains('DISTRO_FEATURES', 'alternate-kernel', True, False, d) and \
d.getVar('PREFERRED_PROVIDER_alternate/kernel') else ''}"
# Additionnal kernel modules are necessary for n1sdp to be able to mount FAT
# filesystems using CP437.
MACHINE_ESSENTIAL_EXTRA_RDEPENDS:append = " kernel-module-nls-cp437 kernel-module-nls-iso8859-1"
# '-mcpu=' and '-march=' conflicts for xen build
# lets not set '-march=' and let xen to overwrite '-mcpu='
TUNE_CCARGS:remove:pn-xen = "${TUNE_CCARGS_MARCH}${TUNE_CCARGS_MARCH_OPTS}"
@@ -1,14 +1,14 @@
# Use OVERRIDES to minimize the usage of # Use OVERRIDES to minimize the usage of
# ${@bb.utils.contains('DISTRO_FEATURES', 'autonomy-host', ... # ${@bb.utils.contains('DISTRO_FEATURES', 'xen', ...
OVERRIDES:append = "${ARM_AUTONOMY_HOST_OVERRIDES}" OVERRIDES_append = "${@bb.utils.contains('DISTRO_FEATURES', 'xen', ':xen', '', d)}"
FILESEXTRAPATHS:prepend:autonomy-host := "${THISDIR}/${PN}:" FILESEXTRAPATHS_prepend_xen := "${THISDIR}/${PN}:"
DEPENDS:append:autonomy-host = " dos2unix-native" DEPENDS_append_xen = " dos2unix-native"
SRC_URI:append:autonomy-host = " file://add-xen-support.patch;patchdir=../" SRC_URI_append_xen = " file://add-xen-support.patch;patchdir=../"
do_install:append:autonomy-host() { do_install_append_xen() {
mv -v ${D}/${UNPACK_DIR}/SOFTWARE/uEnv.txt \ mv -v ${D}/${UNPACK_DIR}/SOFTWARE/uEnv.txt \
${D}/${UNPACK_DIR}/SOFTWARE/uenvfile ${D}/${UNPACK_DIR}/SOFTWARE/uenvfile
for dir in $(ls ${D}/${UNPACK_DIR}/SITE1/) for dir in $(ls ${D}/${UNPACK_DIR}/SITE1/)
@@ -18,11 +18,11 @@ do_install:append:autonomy-host() {
} }
DEPLOY_EXTRA_DEPS ??= "" DEPLOY_EXTRA_DEPS ??= ""
DEPLOY_EXTRA_DEPS:autonomy-host = "xen:do_deploy xen-devicetree:do_deploy" DEPLOY_EXTRA_DEPS_xen = "xen:do_deploy xen-devicetree:do_deploy"
do_deploy[depends] += "${DEPLOY_EXTRA_DEPS}" do_deploy[depends] += "${DEPLOY_EXTRA_DEPS}"
do_deploy:prepend:autonomy-host() { do_deploy_prepend_xen() {
# To avoid dependency loop between firmware-image-juno:do_install, # To avoid dependency loop between firmware-image-juno:do_install,
# xen:do_deploy and xen-devicetree:do_deploy when # xen:do_deploy and xen-devicetree:do_deploy when
# INITRAMFS_IMAGE_BUNDLE = "1", we need to handle the xen and # INITRAMFS_IMAGE_BUNDLE = "1", we need to handle the xen and
@@ -1,10 +0,0 @@
# Use OVERRIDES to minimize the usage of
# ${@bb.utils.contains('DISTRO_FEATURES', 'autonomy-host', ...
OVERRIDES:append = "${ARM_AUTONOMY_HOST_OVERRIDES}"
FILESEXTRAPATHS:prepend:autonomy-host:fvp-base := "${THISDIR}/${PN}:"
#
# FVP BASE
#
SRC_URI:append:autonomy-host:fvp-base = " file://xen_u-boot_kernel_addr.patch"
@@ -38,14 +38,4 @@
/delete-property/ iommu-map; /delete-property/ iommu-map;
}; };
}; };
/*
* Delete module node for Dom0, #size-cells and #address-cells because Grub2
* is responsible to create them
*/
chosen {
/delete-property/ #size-cells;
/delete-property/ #address-cells;
/delete-node/ module@0;
};
}; };
@@ -1,23 +1,23 @@
# Platform dependent parameters # Platform dependent parameters
FILESEXTRAPATHS:prepend := "${THISDIR}/files:" FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
# Add a dtb snippet to turn off iommu in dom0 on Juno board # Add a dtb snippet to turn off iommu in dom0 on Juno board
SRC_URI:append:juno = " file://xen-juno.dtsi" SRC_URI_append_juno = " file://xen-juno.dtsi"
XEN_DEVICETREE_DTSI_MERGE:append:juno = " xen-juno.dtsi" XEN_DEVICETREE_DTSI_MERGE_append_juno = " xen-juno.dtsi"
# Add a dtb snippet to remove pmu and iommu in dom0 on N1SDP # Add a dtb snippet to remove pmu and iommu in dom0 on N1SDP
SRC_URI:append:n1sdp = " file://xen-n1sdp.dtsi" SRC_URI_append_n1sdp = " file://xen-n1sdp.dtsi"
XEN_DEVICETREE_DTSI_MERGE:append:n1sdp = " xen-n1sdp.dtsi" XEN_DEVICETREE_DTSI_MERGE_append_n1sdp = " xen-n1sdp.dtsi"
# For N1SDP, the XEN_DEVICETREE_DEPEND and XEN_DEVICETREE_DTBS variables are # For N1SDP, the XEN_DEVICETREE_DEPEND and XEN_DEVICETREE_DTBS variables are
# being set in meta-arm-autonomy/dynamic-layers/meta-arm-bsp/conf/machine/n1sdp-extra-settings.inc # being set in meta-arm-autonomy/dynamic-layers/meta-arm-bsp/conf/machine/n1sdp-extra-settings.inc
# Board specific configs # Board specific configs
XEN_DEVICETREE_DOM0_BOOTARGS:append:juno = " root=/dev/sda1 rootwait" XEN_DEVICETREE_DOM0_BOOTARGS_append_juno = " root=/dev/sda1 rootwait"
XEN_DEVICETREE_XEN_BOOTARGS:append:juno = " console=dtuart dtuart=serial0 bootscrub=0 iommu=no" XEN_DEVICETREE_XEN_BOOTARGS_append_juno = " console=dtuart dtuart=serial0 bootscrub=0 iommu=no"
XEN_DEVICETREE_DOM0_BOOTARGS:append:n1sdp = " root=/dev/sda2 rootwait" XEN_DEVICETREE_DOM0_BOOTARGS_append_n1sdp = " root=/dev/sda2 rootwait"
XEN_DEVICETREE_XEN_BOOTARGS:append:n1sdp = " console=dtuart dtuart=serial0 bootscrub=0 iommu=no" XEN_DEVICETREE_XEN_BOOTARGS_append_n1sdp = " console=dtuart dtuart=serial0 bootscrub=0 iommu=no"
XEN_DEVICETREE_DOM0_BOOTARGS:append:fvp-base = " root=/dev/vda1" XEN_DEVICETREE_DOM0_BOOTARGS_append_fvp-base = " root=/dev/vda2"
XEN_DEVICETREE_XEN_BOOTARGS:append:fvp-base = " console=dtuart dtuart=serial0 bootscrub=0" XEN_DEVICETREE_XEN_BOOTARGS_append_fvp-base = " console=dtuart dtuart=serial0 bootscrub=0"
@@ -1,15 +1,15 @@
# FVP Base support # FVP Base support
COMPATIBLE_MACHINE:fvp-base = "fvp-base" COMPATIBLE_MACHINE_fvp-base = "fvp-base"
FILESEXTRAPATHS:prepend:fvp-base := "${THISDIR}/files:" FILESEXTRAPATHS_prepend_fvp-base := "${THISDIR}/files:"
SRC_URI:append:fvp-base = " file://early-printk.cfg" SRC_URI_append_fvp-base = " file://early-printk.cfg"
# Juno support # Juno support
COMPATIBLE_MACHINE:juno = "juno" COMPATIBLE_MACHINE_juno = "juno"
FILESEXTRAPATHS:prepend:juno := "${THISDIR}/files:" FILESEXTRAPATHS_prepend_juno := "${THISDIR}/files:"
SRC_URI:append:juno = " file://early-printk.cfg" SRC_URI_append_juno = " file://early-printk.cfg"
# N1SDP support # N1SDP support
COMPATIBLE_MACHINE:n1sdp = "n1sdp" COMPATIBLE_MACHINE_n1sdp = "n1sdp"
FILESEXTRAPATHS:prepend:n1sdp := "${THISDIR}/files:" FILESEXTRAPATHS_prepend_n1sdp := "${THISDIR}/files:"
SRC_URI:append:n1sdp = " file://n1sdp.cfg \ SRC_URI_append_n1sdp = " file://n1sdp.cfg \
file://early-printk.cfg" file://early-printk.cfg"
@@ -0,0 +1,15 @@
FILESEXTRAPATHS_prepend := "${THISDIR}:"
#
# arm-autonomy kmeta extra
#
SRC_URI_append = " file://arm-autonomy-kmeta-extra;type=kmeta;name=arm-autonomy-kmeta-extra;destsuffix=arm-autonomy-kmeta-extra"
# We need to turn off SVE support in the Linux kernel otherwise Xen is stopping
# Linux kernel with a coredump while trying to access XEN bit of CPACR1 core
# register.
LINUX_ARM_AUTONOMY_DISABLE_ARM64_SVE = "${@bb.utils.contains_any('DISTRO_FEATURES', \
'arm-autonomy-host arm-autonomy-guest', \
' features/arm-autonomy/disable-arm64-sve.scc','',d)}"
KERNEL_FEATURES_append_fvp-base = "${LINUX_ARM_AUTONOMY_DISABLE_ARM64_SVE}"
@@ -1,14 +0,0 @@
# short-description: Create a disk image
# long-description: Creates a partitioned disk image that the user
# can directly dd to boot media.
# For FVP Base first partition is rootfs normally populated as /dev/vda1
part / --source rootfs --ondisk sda --fstype=ext4 --label root --align 1024
# Second partition to accomodate guests images normally populated as /dev/vda2 (used by XENGUEST_MANAGER_VOLUME_DEVICE)
part --label guests --source empty --ondisk sda --size="${GUEST_PART_SIZE}${GUEST_PART_SIZE_UNIT}" --system-id 8e --align 1024
# Third partition is user defined entry normally populated as /dev/vda3
${AUTONOMY_HOST_EXTRA_PARTITION}
bootloader --ptable msdos
@@ -3,7 +3,7 @@
# can directly dd to boot media. Uses a custom grub.cfg file to configure the boot. # can directly dd to boot media. Uses a custom grub.cfg file to configure the boot.
# First boot partition normally populated as /dev/sda1 # First boot partition normally populated as /dev/sda1
part /boot --source bootimg-efi --sourceparams="loader=grub-efi" --ondisk sda --size="${BOOT_PART_SIZE}${BOOT_PART_SIZE_UNIT}" --label msdos --active --align 1024 part /boot --source bootimg-efi --sourceparams="loader=grub-efi" --ondisk sda --label msdos --active --align 1024
# Second rootfs partition normally populated as /dev/sda2 # Second rootfs partition normally populated as /dev/sda2
part / --source rootfs --ondisk sda --fstype=ext4 --label root --align 1024 part / --source rootfs --ondisk sda --fstype=ext4 --label root --align 1024
@@ -1,28 +0,0 @@
set term="vt100"
set default="3"
set timeout="5"
source $prefix/arm-autonomy-n1sdp-grub.cfg
menuentry 'N1SDP PREEMPT_RT ACPI Boot' {
linux /Image-preempt-rt $kernel_cmdline acpi=force
}
menuentry 'N1SDP PREEMPT_RT Single-Chip Boot (Device Tree)' {
devicetree /n1sdp-single-chip.dtb
linux /Image-preempt-rt $kernel_cmdline
}
menuentry 'N1SDP PREEMPT_RT Multi-Chip Boot (Device Tree)' {
devicetree /n1sdp-multi-chip.dtb
linux /Image-preempt-rt $kernel_cmdline
}
menuentry 'N1SDP PREEMPT_RT Arm Autonomy (Xen) Single-Chip Boot (Device Tree)' {
# no_argumants under here is a workaround for a bug
# also any kernel or dom0 cmdline arguments has to be passed via dtb
# because any arguments put here will be ignored by xen
xen_hypervisor /xen.efi no_arguments=use_dtb_for_xen_or_kernel_cmdline
xen_module /Image-preempt-rt
devicetree /n1sdp-single-chip-xen.dtb
}
@@ -1,6 +1,6 @@
# Use OVERRIDES to minimize the usage of # Use OVERRIDES to minimize the usage of
# ${@bb.utils.contains('DISTRO_FEATURES', 'xen', ... # ${@bb.utils.contains('DISTRO_FEATURES', 'xen', ...
OVERRIDES:append = "${@bb.utils.contains('DISTRO_FEATURES', 'xen', ':xen', '', d)}" OVERRIDES_append = "${@bb.utils.contains('DISTRO_FEATURES', 'xen', ':xen', '', d)}"
# Xen image to put in the image # Xen image to put in the image
# This should point to a file in the deploy image directory # This should point to a file in the deploy image directory
@@ -9,21 +9,21 @@ BOOT_WRAPPER_AARCH64_XEN ??= "xen-${MACHINE}"
# Xen command line for the image # Xen command line for the image
BOOT_WRAPPER_AARCH64_XEN_CMDLINE ??= "noreboot dom0_mem=256M" BOOT_WRAPPER_AARCH64_XEN_CMDLINE ??= "noreboot dom0_mem=256M"
BOOT_WRAPPER_AARCH64_XEN_CMDLINE:gem5-arm64 = "noreboot dom0_mem=256M console=dtuart \ BOOT_WRAPPER_AARCH64_XEN_CMDLINE_gem5-arm64 = "noreboot dom0_mem=256M console=dtuart \
dtuart=/uart@1c090000 bootscrub=0" dtuart=/uart@1c090000 bootscrub=0"
# Fix command line in the axf file for gem5-arm64 when Xen is present # Fix command line in the axf file for gem5-arm64 when Xen is present
BOOT_WRAPPER_AARCH64_CMDLINE_xen:gem5-arm64 = "console=hvc0 root=/dev/vda rw" BOOT_WRAPPER_AARCH64_CMDLINE_xen_gem5-arm64 = "console=hvc0 root=/dev/vda rw"
# Image generated by boot wrapper when Xen is present # Image generated by boot wrapper when Xen is present
BOOT_WRAPPER_AARCH64_IMAGE:xen ?= "xen-system.axf" BOOT_WRAPPER_AARCH64_IMAGE_xen ?= "xen-system.axf"
EXTRA_OECONF:append:xen = " \ EXTRA_OECONF_append_xen = " \
--with-xen=${WORKDIR}/kernel/arch/arm64/boot/Image \ --with-xen=${WORKDIR}/kernel/arch/arm64/boot/Image \
--with-xen-cmdline="" \ --with-xen-cmdline="" \
" "
EXTRA_OEMAKE:append:xen = " \ EXTRA_OEMAKE_append_xen = " \
XEN_IMAGE=${DEPLOY_DIR_IMAGE}/${BOOT_WRAPPER_AARCH64_XEN} \ XEN_IMAGE=${DEPLOY_DIR_IMAGE}/${BOOT_WRAPPER_AARCH64_XEN} \
XEN_CMDLINE="${BOOT_WRAPPER_AARCH64_XEN_CMDLINE}" \ XEN_CMDLINE="${BOOT_WRAPPER_AARCH64_XEN_CMDLINE}" \
" "
@@ -1,7 +1,7 @@
# When booting gem5-arm64 with Xen we need to set the cpu as Cortex A53 and # When booting gem5-arm64 with Xen we need to set the cpu as Cortex A53 and
# remove support for pointer authentification # remove support for pointer authentification
GEM5_RUN_EXTRA:append = " \ GEM5_RUN_EXTRA_append = " \
${@bb.utils.contains('DISTRO_FEATURES_NATIVE', 'xen', \ ${@bb.utils.contains('DISTRO_FEATURES_NATIVE', 'arm-autonomy-host', \
'--param=system.cpu_cluster[0].cpus[0].isa[0].midr=0x410fd030 \ '--param=system.cpu_cluster[0].cpus[0].isa[0].midr=0x410fd030 \
--param=system.cpu_cluster[0].cpus[0].isa[0].id_aa64isar1_el1=0x0', \ --param=system.cpu_cluster[0].cpus[0].isa[0].id_aa64isar1_el1=0x0', \
'', d)}" '', d)}"
@@ -0,0 +1,4 @@
# gem5-arm64 support
COMPATIBLE_MACHINE_gem5-arm64 = "gem5-arm64"
FILESEXTRAPATHS_prepend_gem5-arm64 := "${THISDIR}/files:"
SRC_URI_append_gem5-arm64 = " file://early-printk.cfg"
@@ -0,0 +1 @@
XENGUEST_NETWORK_BRIDGE_MEMBERS_gem5-arm64 ?= "eth0"
@@ -0,0 +1,4 @@
# We need to turn off SVE support in the Linux kernel otherwise Xen is stopping
# Linux kernel with a coredump while trying to access ZEN bit of CPACR1 core
# register.
# CONFIG_ARM64_SVE is not set

Some files were not shown because too many files have changed in this diff Show More