Issue: When deploying a BSP 5 based custom image to the Colibri IMX7 using the Torizoncore CLI tool, the target is unable to boot the Arm-A core with the new image as outlined below:
Background: I am trying to run the RPMsg TTY demo as outlined here on my target Colibri IMX7D 1GB eMMC running on a Colibri Evaluation Board v3.2B, and my host machine is an x86_64 based Ubuntu machine. Below are some additional details:
- My workdir on my host machine looks like the following:
- The kernel module I am trying to build is rpmsg and this is what I did to get the rpmsg directory into my root workdir, based on my understanding of this statement: “Point to the source code directory for kernel module tha you want to add to your image…”
$ cp -i -r linux-toradex/modules/lib/modules/5.4.193-42243-gcf754d7aaa94/build/drivers/rpmsg/ ~/workdir
- I also added lines 13 to 19 to the
~/workdir/rpmsg/Makefile
to make it compile using the$ torizoncore build
command:
- Both the
~/workdir/device-tree-overlays
and~/workdir/linux-toradex
directories are checked out to this branch:toradex_5.4-2.3.x-imx
- This is my
tcbuild.yaml
file (available for download below):
# >> NOTES:
# >> Lines containing ">>" are simply comments explaining the properties that
# >> follow; if you don't like these comments run:
# >> $ grep -v '>>' tcbuild.yaml > tcbuild-clean.yaml
# >> A line not containing ">>" can be uncommented (by removing the hash mark
# >> plus a space from its beginning); also set the corresponding property to
# >> appropriate values.
# >> When uncommenting a line having a property, remember to uncomment all its
# >> parent properties as well; for example: if you uncomment the
# >> 'splash-screen' property, also uncomment its parent property called
# >> 'customization'.
# >> The input section specifies the image to be taken as the base for the
# >> customization.
input:
easy-installer:
# >> Choose one of the options (REQUIRED):
# >> (1) Image as local folder or tarball.
local: torizon-core-docker-colibri-imx7-emmc-Tezi_5.7.2+build.20.tar
# >> (2) Remote file (optionally with a filename and or a sha256 checksum):
# remote: "https://artifacts.toradex.com/.../torizon-core-docker-apalis-imx8-Tezi_5.1.0%2Bbuild.1.tar"
# remote: "https://artifacts.toradex.com/.../torizon-core-docker-colibri-imx6-Tezi_5.0.0-devel-202009%2Bbuild.2.tar;filename=torizon-core-docker-colibri-imx6-Tezi_5.0.0-devel-202009+build.2.tar;sha256sum=368595fa3fb00af9604e70311de3b04df6b30b280deec2f8918c46f479026ddb"
# >> (3) Image specification (URL will be generated by the tool)
# toradex-feed:
# version: "5.1.0"
# release: quarterly
# machine: colibri-imx7-emmc
# distro: torizon-upstream
# variant: torizon-core-docker
# build-number: "1"
# # build-date: "20210408"
# >> The customization section defines the modifications to be applied to get
# >> the desired output image.
customization:
# >> Splash screen:
# splash-screen: custom-splash-screen.png
# >> Directories overlayed to the base OSTree
# filesystem:
# - changes/
kernel:
modules:
- source-dir: rpmsg/
autoload: true
device-tree:
# >> Directories where to look for include files.
include-dirs:
- device-tree-overlays/include
- linux-toradex/include
# >> Custom device tree source:
custom: linux-toradex/arch/arm/boot/dts/imx7d-colibri-eval-v3.dts
# >> Device-tree overlays configuration:
overlays:
add:
- device-tree-overlays/overlays/colibri-imx7_disable-uart-b_overlay.dts
- device-tree-overlays/overlays/colibri-imx7_fix_rpmsg_demo.dts
# >> Whether to ignore all overlays from the base image (or ostree
# >> archive in the future).
# clear: false
# >> Specific overlays not to use from base image (useful only when
# >> clear is false and not DT has been selected).
# remove:
# - apalis-imx8_hdmi_overlay.dtbo
# >> Overlays to add to output image.
# add:
# kernel:
# >> Custom kernel arguments.
# arguments:
# - key1=val1
# - key2=val2
# >> Modules to build and possibly load automatically.
# modules:
# - source-dir: virtual_touchscreen/
# autoload: false
# >> The output section defines properties of the output image.
output:
# >> OSTree deployment configuration (relevant also for Easy Installer output).
# ostree:
# branch: my-dev-branch
# commit-subject: "OSTree commit subject"
# commit-body: "OSTree commit body"
# >> Parameters for deploying to an Easy Installer image.
easy-installer:
# >> Output directory of the customized image (REQUIRED):
local: output_directory
# >> Information used by Toradex Easy Installer:
# name: "My customized image"
# description: "My customized image (description)"
# licence: files/custom-licence.html
# release-notes: files/custom-release-notes.html
# accept-licence: true
# autoinstall: true
# autoreboot: true
# bundle:
# >> Choose one of the options:
# >> (1) Specify a docker-compose file whose referenced images will be downloaded.
# >> Properties platform, username, password and registry are optional.
# compose-file: files/docker-compose.yml
# platform: linux/arm/v7
# username: "${USERNAME}"
# password: "${PASSWORD}"
# registry: hub.docker.com
# >> (2) Specify a local directory containing the bundled images (previously
# >> obtained by 'torizoncore-builder bundle' command).
# dir: bundle/
# >> Provisioning configuration:
# provisioning:
# >> For "online" mode, properties "shared-data" and "online-data" must be specified.
# >> For "offline" mode, property "shared-data" must be specified alone.
# mode: "online"
# shared-data: "shared-data.tar.gz"
# online-data: "${ONLINE_PROVISIONING_DATA:?online provisioning data not supplied}"
- This is my
colibri-imx7_disable-uart-b_overlay.dts
device tree overlay file to disable UART-B on the Colibri IMX7 to allow serial debug for M-Core (available for download below):
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
/*
* Copyright 2020-2021 Toradex
*/
// Disable UART2, aka UART_B on the Colibri iMX7
/dts-v1/;
/plugin/;
/ {
compatible = "toradex,colibri-imx7d",
"toradex,colibri-imx7d-emmc",
"toradex,colibri-imx7s";
};
&uart2 {
status = "disabled";
};
- This is my
colibri-imx7_fix_rpmsg_demo.dts
device tree overlay file to resolve a Kernel Panic boot issue that I ran into (available for download below):
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
/*
* Copyright 2020-2021 Toradex
*/
// Disable UART2, aka UART_B on the Colibri iMX7
/dts-v1/;
/plugin/;
/ {
compatible = "toradex,colibri-imx7d",
"toradex,colibri-imx7d-emmc",
"toradex,colibri-imx7s";
};
/ {
memory {
linux,usable-memory = <0x80000000 0xff00000>;
};
};
- This is the output of the build command:
$ docker run --rm -it -v /deploy -v "$(pwd)":/workdir -v storage:/storage -v /var/run/docker.sock:/var/run/docker.sock --network=host $(tcb_dynamic_params) torizon/torizoncore-builder:3 build
- This is the output of the image unpack command:
$ torizoncore-builder images unpack output_directory
- This is the output of the deploy command:
$ torizoncore-builder deploy --remote-host 192.168.0.102 --remote-username torizon --remote-password temppwd --reboot
After deploying, I made sure to enter U-Boot and ensure the m4boot
command was empty, so that the M-core doesn’t start. Afterwards, the A-core fails to boot with the error outlined at the top of this post.
I have attached the following files: dmesg
logs (logs.txt), tcbuild.yml
, colibri-imx7_fix_rpmsg_demo.dts
and colibri-imx7_disable-uart-b_overlay.dts
tcbuild.yaml (4.7 KB)
logs.txt (22.4 KB)
colibri-imx7_disable-uart-b_overlay.dts (312 Bytes)
colibri-imx7_fix_rpmsg_demo.dts (346 Bytes)