Compare commits
10 Commits
9de4842dc3
...
74628a35ce
| Author | SHA1 | Date |
|---|---|---|
|
|
74628a35ce | |
|
|
1acb052f68 | |
|
|
d58d20358e | |
|
|
14cd1e7966 | |
|
|
89c42a5b0f | |
|
|
ed9beccdcd | |
|
|
9be4f140d2 | |
|
|
0248d4a728 | |
|
|
18a23d71d6 | |
|
|
7950ac2460 |
|
|
@ -19,7 +19,7 @@ Digi Embedded Yocto provides the following image recipes:
|
||||||
Expansion of custom Digi core-image-base including full Flutter
|
Expansion of custom Digi core-image-base including full Flutter
|
||||||
framework support.
|
framework support.
|
||||||
|
|
||||||
* dey-image-container-manager: container management image
|
* dey-image-containers: container management image
|
||||||
|
|
||||||
Minimal image including the trimmed Podman and LXC runtimes used to
|
Minimal image including the trimmed Podman and LXC runtimes used to
|
||||||
manage container artifacts on target.
|
manage container artifacts on target.
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ Digi Embedded Yocto provides the following image recipes:
|
||||||
Expansion of custom Digi core-image-base including full Flutter
|
Expansion of custom Digi core-image-base including full Flutter
|
||||||
framework support.
|
framework support.
|
||||||
|
|
||||||
* dey-image-container-manager: container management image
|
* dey-image-containers: container management image
|
||||||
|
|
||||||
Minimal image including the trimmed Podman and LXC runtimes used to
|
Minimal image including the trimmed Podman and LXC runtimes used to
|
||||||
manage container artifacts on target.
|
manage container artifacts on target.
|
||||||
|
|
|
||||||
|
|
@ -179,7 +179,6 @@ fi
|
||||||
# - Erase the 'update' partition
|
# - Erase the 'update' partition
|
||||||
# - Configure recovery to wipe 'update' partition
|
# - Configure recovery to wipe 'update' partition
|
||||||
# - Run 'recovery' and let the system boot after
|
# - Run 'recovery' and let the system boot after
|
||||||
# NOTE: insert some 'usb reset' commands to avoid EHCI timeouts
|
|
||||||
setenv bootcmd "
|
setenv bootcmd "
|
||||||
env default -a;
|
env default -a;
|
||||||
setenv dualboot ${dualboot};
|
setenv dualboot ${dualboot};
|
||||||
|
|
@ -228,9 +227,6 @@ setenv bootcmd "
|
||||||
exit;
|
exit;
|
||||||
fi;
|
fi;
|
||||||
fi;
|
fi;
|
||||||
if test "${INSTALL_MEDIA}" = "usb"; then
|
|
||||||
usb reset;
|
|
||||||
fi;
|
|
||||||
echo \"\";
|
echo \"\";
|
||||||
echo \"\";
|
echo \"\";
|
||||||
echo \">> Installing file ${INSTALL_ROOTFS_FILENAME} on rootfs_a\";
|
echo \">> Installing file ${INSTALL_ROOTFS_FILENAME} on rootfs_a\";
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ CONTAINERS_BACKEND_TOOLS = "lxc"
|
||||||
the trimmed runtime packages to keep the image smaller.
|
the trimmed runtime packages to keep the image smaller.
|
||||||
|
|
||||||
The layer explicitly depends on `meta-virtualization`.
|
The layer explicitly depends on `meta-virtualization`.
|
||||||
`dey-image-dcp` and`dey-image-containers` requires
|
`dey-image-dcp` and `dey-image-containers` require
|
||||||
`DISTRO_FEATURES:append = " virtualization"` in `local.conf`.
|
`DISTRO_FEATURES:append = " virtualization"` in `local.conf`.
|
||||||
|
|
||||||
The `dey-image-dcp` workflow produces:
|
The `dey-image-dcp` workflow produces:
|
||||||
|
|
@ -78,13 +78,11 @@ The script generates exactly one runtime artifact per execution.
|
||||||
Notes:
|
Notes:
|
||||||
|
|
||||||
- `--output-dir` is optional. If omitted, the script writes the DCP to the current directory.
|
- `--output-dir` is optional. If omitted, the script writes the DCP to the current directory.
|
||||||
- If the input manifest omits `package_id`, the generator derives the final
|
- The input manifest must provide `package_id`, which becomes the stable target
|
||||||
`package_id` from `name` and appends a unique suffix using the `created_at`
|
identifier.
|
||||||
timestamp encoded in base36 milliseconds.
|
- The output file name is always derived from the package ID and
|
||||||
- If the input manifest provides `package_id`, that value is kept unchanged.
|
|
||||||
- The output file name is always derived from the generated package ID and
|
|
||||||
manifest fields as:
|
manifest fields as:
|
||||||
- `<generated_package_id>-<runtime>-<device_types[0]>.tar.gz`
|
- `<package_id>-<runtime>-<device_types[0]>.tar.gz`
|
||||||
- For Podman payloads, the final internal payload name is always `payload/image.tar`
|
- For Podman payloads, the final internal payload name is always `payload/image.tar`
|
||||||
- For LXC payloads, the generator requires a Yocto-style `.tar.gz` bundle, validates its layout,
|
- For LXC payloads, the generator requires a Yocto-style `.tar.gz` bundle, validates its layout,
|
||||||
and stores it inside the DCP using the original file name and format without re-packaging it.
|
and stores it inside the DCP using the original file name and format without re-packaging it.
|
||||||
|
|
@ -104,14 +102,13 @@ python3 meta-digi-containers/scripts/generate-dcp.py \
|
||||||
|
|
||||||
This generates a bundle named like:
|
This generates a bundle named like:
|
||||||
|
|
||||||
- `./flutter-demo-<base36_created_at_ms>-podman-ccmp25-dvk.tar.gz`
|
- `./flutter-demo-podman-ccmp25-dvk.tar.gz`
|
||||||
|
|
||||||
In those manifests:
|
In those manifests:
|
||||||
|
|
||||||
- `name` is the stable logical container name stored on the target.
|
- `package_id` is the stable target identifier.
|
||||||
- `friendly_name` is the user-facing label shown by the manager output when available.
|
- `friendly_name` is the user-facing label shown by the manager output when available.
|
||||||
- the final `package_id` is generated automatically from `name` unless the
|
- the final DCP manifest does not include a second container identifier
|
||||||
input manifest provides an explicit `package_id`
|
|
||||||
- `registration_defaults` is limited to local manager policy such as `autostart`,
|
- `registration_defaults` is limited to local manager policy such as `autostart`,
|
||||||
`monitor`, and `restart`; this release does not generate DRM-specific defaults
|
`monitor`, and `restart`; this release does not generate DRM-specific defaults
|
||||||
|
|
||||||
|
|
@ -182,19 +179,12 @@ Outputs are generated in:
|
||||||
|
|
||||||
Final outputs:
|
Final outputs:
|
||||||
|
|
||||||
- `${DCP_NAME}-<base36_created_at_ms>-podman-<device_types[0]>.tar.gz`
|
- `${DCP_NAME}-podman-<device_types[0]>.tar.gz`
|
||||||
- `${DCP_NAME}-<base36_created_at_ms>-lxc-<device_types[0]>.tar.gz`
|
- `${DCP_NAME}-lxc-<device_types[0]>.tar.gz`
|
||||||
|
|
||||||
Notes:
|
Notes:
|
||||||
|
|
||||||
- The generator script derives `package_id` from the input `name` only when the
|
- In Yocto builds, `dey-image-dcp` sets `package_id` to `${DCP_NAME}`.
|
||||||
manifest does not provide one explicitly. In that default case it appends a
|
|
||||||
base36-encoded millisecond timestamp suffix, stores the generated `package_id`
|
|
||||||
in the final `manifest.json`, and uses it in the DCP file name.
|
|
||||||
- In Yocto builds, `dey-image-dcp` keeps that unique-name behavior and
|
|
||||||
removes older DCP artifacts with the same `${DCP_NAME}` prefix before
|
|
||||||
generating the new one, so the deploy directory does not keep accumulating
|
|
||||||
previous builds of the same container/runtime.
|
|
||||||
|
|
||||||
Intermediate rootfs and OCI outputs are kept available for incremental rebuilds.
|
Intermediate rootfs and OCI outputs are kept available for incremental rebuilds.
|
||||||
The LXC bundle and Podman archive are generated as temporary payloads while
|
The LXC bundle and Podman archive are generated as temporary payloads while
|
||||||
|
|
@ -281,7 +271,6 @@ Supported placeholders in LXC config fragments:
|
||||||
The artifact manifest is generated automatically and includes:
|
The artifact manifest is generated automatically and includes:
|
||||||
|
|
||||||
- `package_id`
|
- `package_id`
|
||||||
- `name` [stable logical container name]
|
|
||||||
- `friendly_name` [optional user-facing display name]
|
- `friendly_name` [optional user-facing display name]
|
||||||
- `version`
|
- `version`
|
||||||
- `runtime`
|
- `runtime`
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"name": "flutter-demo",
|
"package_id": "flutter-demo",
|
||||||
"friendly_name": "Flutter Demo",
|
"friendly_name": "Flutter Demo",
|
||||||
"version": "1.0",
|
"version": "1.0",
|
||||||
"runtime": "lxc",
|
"runtime": "lxc",
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"name": "flutter-demo",
|
"package_id": "flutter-demo",
|
||||||
"friendly_name": "Flutter Demo",
|
"friendly_name": "Flutter Demo",
|
||||||
"version": "1.0",
|
"version": "1.0",
|
||||||
"runtime": "podman",
|
"runtime": "podman",
|
||||||
|
|
|
||||||
|
|
@ -15,8 +15,8 @@ SRC_URI = " \
|
||||||
file://cc-containerd.service \
|
file://cc-containerd.service \
|
||||||
file://cc-containerd-shutdown.service \
|
file://cc-containerd-shutdown.service \
|
||||||
"
|
"
|
||||||
SRC_URI[archive.md5sum] = "6d84c6f5ec9dc94d542c91001ff5fd36"
|
SRC_URI[archive.md5sum] = "2ae2c3c09e9bf223e7de4ec0994376f3"
|
||||||
SRC_URI[archive.sha256sum] = "ce24c4fde041a69a7646eb9bad4891d2eb91291f3534e71444552d3830247aaa"
|
SRC_URI[archive.sha256sum] = "627d90eb53a48bf978fb6993f661af3dba8e6bf091d295ff481457e4c0cb96a0"
|
||||||
|
|
||||||
S = "${WORKDIR}/${BP}"
|
S = "${WORKDIR}/${BP}"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,9 +15,9 @@ do_clean_old_container_artifacts() {
|
||||||
fi
|
fi
|
||||||
|
|
||||||
for runtime in lxc podman; do
|
for runtime in lxc podman; do
|
||||||
old_artifact_glob="${DEPLOY_DIR_IMAGE}/${DCP_NAME}-*-${runtime}-${primary_device_type}.tar.gz"
|
artifact_path="${DEPLOY_DIR_IMAGE}/${DCP_NAME}-${runtime}-${primary_device_type}.tar.gz"
|
||||||
bbnote "Removing old ${runtime} container artifacts matching ${old_artifact_glob}"
|
bbnote "Removing old ${runtime} container artifact ${artifact_path}"
|
||||||
rm -f ${old_artifact_glob}
|
rm -f "${artifact_path}"
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -69,7 +69,7 @@ do_image_container_artifacts() {
|
||||||
manifest_path="$2"
|
manifest_path="$2"
|
||||||
create_args="$3"
|
create_args="$3"
|
||||||
build_id="$4"
|
build_id="$4"
|
||||||
NAME="${DCP_NAME}" \
|
PACKAGE_ID="${DCP_NAME}" \
|
||||||
FRIENDLY_NAME="${CONTAINER_FRIENDLY_NAME}" \
|
FRIENDLY_NAME="${CONTAINER_FRIENDLY_NAME}" \
|
||||||
VERSION="${CONTAINER_ARTIFACT_VERSION}" \
|
VERSION="${CONTAINER_ARTIFACT_VERSION}" \
|
||||||
RUNTIME="${runtime}" \
|
RUNTIME="${runtime}" \
|
||||||
|
|
@ -87,7 +87,7 @@ do_image_container_artifacts() {
|
||||||
LABELS_JSON="${CONTAINER_ARTIFACT_LABELS_JSON}" \
|
LABELS_JSON="${CONTAINER_ARTIFACT_LABELS_JSON}" \
|
||||||
python3 -c 'import json, os, sys; \
|
python3 -c 'import json, os, sys; \
|
||||||
parse_bool = lambda name: os.environ[name].strip().lower() == "true"; \
|
parse_bool = lambda name: os.environ[name].strip().lower() == "true"; \
|
||||||
payload = {"name": os.environ["NAME"], "friendly_name": os.environ["FRIENDLY_NAME"], "version": os.environ["VERSION"], "runtime": os.environ["RUNTIME"], "registration_defaults": {"autostart": parse_bool("AUTOSTART"), "monitor": parse_bool("MONITOR"), "restart": {"enabled": parse_bool("RESTART_ENABLED"), "max_retries": int(os.environ["RESTART_MAX_RETRIES"]), "window": int(os.environ["RESTART_WINDOW"]), "retry_delay": int(os.environ["RESTART_RETRY_DELAY"]) } }, "device_types": json.loads(os.environ["DEVICE_TYPES_JSON"]), "firmware_versions": os.environ["FIRMWARE_VERSIONS"], "build_id": os.environ["BUILD_ID"], "description": os.environ["DESCRIPTION"], "labels": json.loads(os.environ["LABELS_JSON"])}; \
|
payload = {"package_id": os.environ["PACKAGE_ID"], "friendly_name": os.environ["FRIENDLY_NAME"], "version": os.environ["VERSION"], "runtime": os.environ["RUNTIME"], "registration_defaults": {"autostart": parse_bool("AUTOSTART"), "monitor": parse_bool("MONITOR"), "restart": {"enabled": parse_bool("RESTART_ENABLED"), "max_retries": int(os.environ["RESTART_MAX_RETRIES"]), "window": int(os.environ["RESTART_WINDOW"]), "retry_delay": int(os.environ["RESTART_RETRY_DELAY"]) } }, "device_types": json.loads(os.environ["DEVICE_TYPES_JSON"]), "firmware_versions": os.environ["FIRMWARE_VERSIONS"], "build_id": os.environ["BUILD_ID"], "description": os.environ["DESCRIPTION"], "labels": json.loads(os.environ["LABELS_JSON"])}; \
|
||||||
create_args = os.environ["CREATE_ARGS"].strip(); \
|
create_args = os.environ["CREATE_ARGS"].strip(); \
|
||||||
payload.update({"create_args": create_args} if create_args else {}); \
|
payload.update({"create_args": create_args} if create_args else {}); \
|
||||||
open(sys.argv[1], "w", encoding="utf-8").write(json.dumps(payload, indent=2) + "\n")' \
|
open(sys.argv[1], "w", encoding="utf-8").write(json.dumps(payload, indent=2) + "\n")' \
|
||||||
|
|
|
||||||
|
|
@ -15,32 +15,15 @@ import sys
|
||||||
import tarfile
|
import tarfile
|
||||||
import tempfile
|
import tempfile
|
||||||
|
|
||||||
BASE36_ALPHABET = "0123456789abcdefghijklmnopqrstuvwxyz"
|
|
||||||
|
|
||||||
def fail(message: str) -> "NoReturn":
|
def fail(message: str) -> "NoReturn":
|
||||||
raise SystemExit(f"error: {message}")
|
raise SystemExit(f"error: {message}")
|
||||||
|
|
||||||
|
|
||||||
def to_base36(value: int) -> str:
|
|
||||||
if value < 0:
|
|
||||||
fail("cannot convert negative values to base36")
|
|
||||||
if value == 0:
|
|
||||||
return "0"
|
|
||||||
result: list[str] = []
|
|
||||||
while value:
|
|
||||||
value, remainder = divmod(value, 36)
|
|
||||||
result.append(BASE36_ALPHABET[remainder])
|
|
||||||
return "".join(reversed(result))
|
|
||||||
|
|
||||||
|
|
||||||
def format_created_at(timestamp: datetime) -> str:
|
def format_created_at(timestamp: datetime) -> str:
|
||||||
return timestamp.astimezone(timezone.utc).isoformat(timespec="milliseconds").replace("+00:00", "Z")
|
return timestamp.astimezone(timezone.utc).isoformat(timespec="milliseconds").replace("+00:00", "Z")
|
||||||
|
|
||||||
|
|
||||||
def build_generated_package_id(base_name: str, *, created_at_ms: int) -> str:
|
|
||||||
return f"{base_name}-{to_base36(created_at_ms)}"
|
|
||||||
|
|
||||||
|
|
||||||
def load_manifest(path: Path) -> dict:
|
def load_manifest(path: Path) -> dict:
|
||||||
try:
|
try:
|
||||||
data = json.loads(path.read_text(encoding="utf-8"))
|
data = json.loads(path.read_text(encoding="utf-8"))
|
||||||
|
|
@ -100,11 +83,7 @@ def validate_labels(value: object) -> dict:
|
||||||
|
|
||||||
|
|
||||||
def validate_manifest(data: dict) -> dict:
|
def validate_manifest(data: dict) -> dict:
|
||||||
package_id = data.get("package_id")
|
package_id = validate_string(data, "package_id", path="manifest")
|
||||||
if package_id is not None:
|
|
||||||
if not isinstance(package_id, str) or not package_id.strip():
|
|
||||||
fail("invalid manifest: package_id must be a non-empty string")
|
|
||||||
package_id = package_id.strip()
|
|
||||||
version = validate_string(data, "version", path="manifest")
|
version = validate_string(data, "version", path="manifest")
|
||||||
runtime = validate_string(data, "runtime", path="manifest")
|
runtime = validate_string(data, "runtime", path="manifest")
|
||||||
if runtime not in {"lxc", "podman"}:
|
if runtime not in {"lxc", "podman"}:
|
||||||
|
|
@ -136,7 +115,6 @@ def validate_manifest(data: dict) -> dict:
|
||||||
description = data.get("description", "")
|
description = data.get("description", "")
|
||||||
if description is not None and not isinstance(description, str):
|
if description is not None and not isinstance(description, str):
|
||||||
fail("invalid manifest: description must be a string")
|
fail("invalid manifest: description must be a string")
|
||||||
name = validate_string(data, "name", path="manifest")
|
|
||||||
friendly_name = data.get("friendly_name")
|
friendly_name = data.get("friendly_name")
|
||||||
if friendly_name is not None:
|
if friendly_name is not None:
|
||||||
if not isinstance(friendly_name, str) or not friendly_name.strip():
|
if not isinstance(friendly_name, str) or not friendly_name.strip():
|
||||||
|
|
@ -145,7 +123,6 @@ def validate_manifest(data: dict) -> dict:
|
||||||
|
|
||||||
validated = {
|
validated = {
|
||||||
"package_id": package_id,
|
"package_id": package_id,
|
||||||
"name": name,
|
|
||||||
"friendly_name": friendly_name,
|
"friendly_name": friendly_name,
|
||||||
"version": version,
|
"version": version,
|
||||||
"runtime": runtime,
|
"runtime": runtime,
|
||||||
|
|
@ -269,7 +246,6 @@ def build_final_manifest(
|
||||||
) -> dict:
|
) -> dict:
|
||||||
output = {
|
output = {
|
||||||
"package_id": package_id,
|
"package_id": package_id,
|
||||||
"name": base["name"],
|
|
||||||
"friendly_name": base["friendly_name"],
|
"friendly_name": base["friendly_name"],
|
||||||
"version": base["version"],
|
"version": base["version"],
|
||||||
"runtime": base["runtime"],
|
"runtime": base["runtime"],
|
||||||
|
|
@ -332,18 +308,10 @@ def main() -> int:
|
||||||
fail(f"cannot create output directory {output_dir}: {exc}")
|
fail(f"cannot create output directory {output_dir}: {exc}")
|
||||||
|
|
||||||
created_at_dt = datetime.now(timezone.utc)
|
created_at_dt = datetime.now(timezone.utc)
|
||||||
created_at_ms = int(created_at_dt.timestamp() * 1000)
|
|
||||||
created_at = format_created_at(created_at_dt)
|
created_at = format_created_at(created_at_dt)
|
||||||
generated_package_id = (
|
package_id = manifest["package_id"]
|
||||||
manifest["package_id"]
|
|
||||||
if manifest["package_id"]
|
|
||||||
else build_generated_package_id(
|
|
||||||
manifest["name"],
|
|
||||||
created_at_ms=created_at_ms,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
output_name = build_output_name(
|
output_name = build_output_name(
|
||||||
package_id=generated_package_id,
|
package_id=package_id,
|
||||||
runtime=manifest["runtime"],
|
runtime=manifest["runtime"],
|
||||||
device_type=manifest["device_types"][0],
|
device_type=manifest["device_types"][0],
|
||||||
)
|
)
|
||||||
|
|
@ -375,7 +343,7 @@ def main() -> int:
|
||||||
|
|
||||||
final_manifest = build_final_manifest(
|
final_manifest = build_final_manifest(
|
||||||
manifest,
|
manifest,
|
||||||
package_id=generated_package_id,
|
package_id=package_id,
|
||||||
artifact_type=artifact_type,
|
artifact_type=artifact_type,
|
||||||
digest=digest,
|
digest=digest,
|
||||||
size_bytes=size_bytes,
|
size_bytes=size_bytes,
|
||||||
|
|
@ -389,7 +357,7 @@ def main() -> int:
|
||||||
lambda dst: write_default_readme(
|
lambda dst: write_default_readme(
|
||||||
dst,
|
dst,
|
||||||
manifest,
|
manifest,
|
||||||
package_id=generated_package_id,
|
package_id=package_id,
|
||||||
created_at=created_at,
|
created_at=created_at,
|
||||||
payload_name=payload_name,
|
payload_name=payload_name,
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ require conf/distro/poky.conf
|
||||||
YOCTO_MAJOR = "5"
|
YOCTO_MAJOR = "5"
|
||||||
YOCTO_MINOR = "0"
|
YOCTO_MINOR = "0"
|
||||||
DEY_RELEASE = "4"
|
DEY_RELEASE = "4"
|
||||||
DEY_BUILD = "1"
|
DEY_BUILD = "2"
|
||||||
|
|
||||||
# Firmware version of the system.
|
# Firmware version of the system.
|
||||||
DEY_FIRMWARE_VERSION ?= "${YOCTO_MAJOR}.${YOCTO_MINOR}.${DEY_RELEASE}.${DEY_BUILD}"
|
DEY_FIRMWARE_VERSION ?= "${YOCTO_MAJOR}.${YOCTO_MINOR}.${DEY_RELEASE}.${DEY_BUILD}"
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,8 @@ SRC_URI += "\
|
||||||
file://connectcore-demo-server.service \
|
file://connectcore-demo-server.service \
|
||||||
file://suspendtarget-connectcore-demo-server.service \
|
file://suspendtarget-connectcore-demo-server.service \
|
||||||
"
|
"
|
||||||
|
SRC_URI:append:ccimx95 = " file://0001-multimedia-replace-MOV-video-with-MP4.patch;patchdir=${WORKDIR}/git"
|
||||||
|
|
||||||
S = "${WORKDIR}/git/connectcore-demo-example"
|
S = "${WORKDIR}/git/connectcore-demo-example"
|
||||||
|
|
||||||
do_configure[noexec] = "1"
|
do_configure[noexec] = "1"
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,30 @@
|
||||||
|
From: Gonzalo Ruiz <Gonzalo.Ruiz@digi.com>
|
||||||
|
Date: Wed, 27 May 2026 16:33:46 +0200
|
||||||
|
Subject: [PATCH 1/1] multimedia: replace MOV video with MP4
|
||||||
|
|
||||||
|
This is required for Chromium demo.
|
||||||
|
|
||||||
|
Upstream-Status: Inappropriate [DEY specific]
|
||||||
|
|
||||||
|
Signed-off-by: Gonzalo Ruiz <Gonzalo.Ruiz@digi.com>
|
||||||
|
---
|
||||||
|
connectcore-demo-example/multimedia.html | 6 +++---
|
||||||
|
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/connectcore-demo-example/multimedia.html b/connectcore-demo-example/multimedia.html
|
||||||
|
index 4073ff0..0327c1a 100644
|
||||||
|
--- a/connectcore-demo-example/multimedia.html
|
||||||
|
+++ b/connectcore-demo-example/multimedia.html
|
||||||
|
@@ -189,9 +189,9 @@ Digi Demo - Multimedia
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xl-2 multimedia-container">
|
||||||
|
<div class="d-flex justify-content-center align-items-center multimedia-box">
|
||||||
|
- <div class="multimedia-item" onclick="location.href='multimedia_viewer.html?exampleURL=videos/big_buck_bunny.mov'">
|
||||||
|
- <div class="multimedia-title">Big Buck Bunny (MOV)</div>
|
||||||
|
- <img src="./static/images/big_buck_bunny.jpg" alt="Big Buck Bunny (MOV)">
|
||||||
|
+ <div class="multimedia-item" onclick="location.href='multimedia_viewer.html?exampleURL=videos/big_buck_bunny.mp4'">
|
||||||
|
+ <div class="multimedia-title">Big Buck Bunny (MP4)</div>
|
||||||
|
+ <img src="./static/images/big_buck_bunny.jpg" alt="Big Buck Bunny (MP4)">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# Copyright (C) 2020-2022, Digi International Inc.
|
# Copyright (C) 2020-2026, Digi International Inc.
|
||||||
|
|
||||||
SUMMARY = "Short videos to demonstrate video playback on the WPE WebKit"
|
SUMMARY = "Short videos to demonstrate video playback on the WPE WebKit"
|
||||||
DESCRIPTION = "This package contains fragments of the short film 'Big Buck Bunny', which are used to demonstrate how WebKit makes use of hardware acceleration for video decoding"
|
DESCRIPTION = "This package contains fragments of the short film 'Big Buck Bunny', which are used to demonstrate how WebKit makes use of hardware acceleration for video decoding"
|
||||||
|
|
@ -8,8 +8,8 @@ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/CC-BY-3.0;md5=dfa02b5755629022e
|
||||||
|
|
||||||
SRC_URI = "${DIGI_PKG_SRC}/${BPN}-${PV}.tar.gz"
|
SRC_URI = "${DIGI_PKG_SRC}/${BPN}-${PV}.tar.gz"
|
||||||
|
|
||||||
SRC_URI[md5sum] = "d22cc0fa20fde187455b27a799d2f9e6"
|
SRC_URI[md5sum] = "5b4cf8fe878adc6105df88866038e6db"
|
||||||
SRC_URI[sha256sum] = "97389f33d98c52d4311117366f0aa8dc78d00f51a787697af349de4668ccdbf6"
|
SRC_URI[sha256sum] = "18d64ec814d1a318641b1afc2ff51f93326390fc07dc2b79e53fb92477a0e8bd"
|
||||||
|
|
||||||
S = "${WORKDIR}/${PN}-${PV}"
|
S = "${WORKDIR}/${PN}-${PV}"
|
||||||
|
|
||||||
|
|
@ -20,6 +20,10 @@ VIDEO_FORMATS = " \
|
||||||
mov \
|
mov \
|
||||||
webm \
|
webm \
|
||||||
"
|
"
|
||||||
|
VIDEO_FORMATS:ccimx95 = " \
|
||||||
|
mp4 \
|
||||||
|
webm \
|
||||||
|
"
|
||||||
# Name of the video sample
|
# Name of the video sample
|
||||||
VIDEO_NAME = "big_buck_bunny"
|
VIDEO_NAME = "big_buck_bunny"
|
||||||
|
|
||||||
|
|
@ -41,3 +45,5 @@ FILES:${PN} = "/${WEBSERVER_ROOT}/*"
|
||||||
|
|
||||||
# Don't generate dbg or dev packages
|
# Don't generate dbg or dev packages
|
||||||
PACKAGES = "${PN}"
|
PACKAGES = "${PN}"
|
||||||
|
|
||||||
|
PACKAGE_ARCH = "${MACHINE_ARCH}"
|
||||||
|
|
@ -567,8 +567,14 @@ if grep -qs 'DVK' /proc/device-tree/model; then
|
||||||
else
|
else
|
||||||
BOARD_TYPE="SBC"
|
BOARD_TYPE="SBC"
|
||||||
fi
|
fi
|
||||||
BOARD_VARIANT="$(cat /proc/device-tree/digi,hwid,variant | tr -d '\0')"
|
SOM_SN="$(cat /proc/device-tree/digi,hwid,sn | tr -d '\0')"
|
||||||
BOARD_SN="$(cat /proc/device-tree/digi,hwid,sn | tr -d '\0')"
|
SOM_VARIANT="$(cat /proc/device-tree/digi,hwid,variant | tr -d '\0')"
|
||||||
|
SOM_VERSION="$(($(cat /proc/device-tree/digi,hwid,hv | tr -d '\0' )))"
|
||||||
|
if [ -e /proc/device-tree/digi,smarcid,variant ]; then
|
||||||
|
SMARC_SN="$(cat /proc/device-tree/digi,smarcid,sn | tr -d '\0')"
|
||||||
|
SMARC_VARIANT="$(cat /proc/device-tree/digi,smarcid,variant | tr -d '\0')"
|
||||||
|
SMARC_VERSION="$(($(cat /proc/device-tree/digi,smarcid,hv | tr -d '\0' )))"
|
||||||
|
fi
|
||||||
BOARD_VERSION="$(cat /proc/device-tree/digi,carrierboard,version | tr -d '\0')"
|
BOARD_VERSION="$(cat /proc/device-tree/digi,carrierboard,version | tr -d '\0')"
|
||||||
[ -e "/proc/device-tree/digi,carrierboard,id" ] && BOARD_ID="$(cat /proc/device-tree/digi,carrierboard,id | tr -d '\0')"
|
[ -e "/proc/device-tree/digi,carrierboard,id" ] && BOARD_ID="$(cat /proc/device-tree/digi,carrierboard,id | tr -d '\0')"
|
||||||
[ -e "/proc/device-tree/cpus/rev" ] && SOC_REV="$(cat /proc/device-tree/cpus/rev | tr -d '\0')"
|
[ -e "/proc/device-tree/cpus/rev" ] && SOC_REV="$(cat /proc/device-tree/cpus/rev | tr -d '\0')"
|
||||||
|
|
@ -627,7 +633,14 @@ print_qr || exit $?
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
echo "|||:Component|:Version"
|
echo "|||:Component|:Version"
|
||||||
DUT_HEADER="SN-${BOARD_SN}, ${MACHINE} ${BOARD_VARIANT} ${BOARD_TYPE}v${BOARD_VERSION}"
|
if [ -n "${SMARC_VARIANT}" ]; then
|
||||||
|
DUT_HEADER="SN-${SMARC_SN}, ${MACHINE} ${SMARC_VARIANT} SMARCv${SMARC_VERSION}"
|
||||||
|
else
|
||||||
|
DUT_HEADER="SN-${SOM_SN}, ${MACHINE} ${SOM_VARIANT} SOMv${SOM_VERSION}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
DUT_HEADER="${DUT_HEADER} ${BOARD_TYPE}v${BOARD_VERSION}"
|
||||||
|
|
||||||
if [ -n "${BOARD_ID}" ]; then
|
if [ -n "${BOARD_ID}" ]; then
|
||||||
DUT_HEADER="${DUT_HEADER} board_ID=${BOARD_ID}"
|
DUT_HEADER="${DUT_HEADER} board_ID=${BOARD_ID}"
|
||||||
fi
|
fi
|
||||||
|
|
|
||||||
10
sdk/build.sh
10
sdk/build.sh
|
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
# build.sh
|
# build.sh
|
||||||
#
|
#
|
||||||
# Copyright (C) 2013-2025 by Digi International Inc.
|
# Copyright (C) 2013-2026 by Digi International Inc.
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify it
|
# This program is free software; you can redistribute it and/or modify it
|
||||||
|
|
@ -275,22 +275,22 @@ done<<-_EOF_
|
||||||
ccimx6ulrftest dey-image-mft-module-rf
|
ccimx6ulrftest dey-image-mft-module-rf
|
||||||
ccmp15-dvk dey-image-qt,dey-image-webkit,dey-image-lvgl,dey-image-flutter
|
ccmp15-dvk dey-image-qt,dey-image-webkit,dey-image-lvgl,dey-image-flutter
|
||||||
ccmp13-dvk core-image-base
|
ccmp13-dvk core-image-base
|
||||||
ccmp25-dvk dey-image-qt,dey-image-webkit,dey-image-lvgl,dey-image-flutter,dey-image-container-manager
|
ccmp25-dvk dey-image-qt,dey-image-webkit,dey-image-lvgl,dey-image-flutter,dey-image-containers
|
||||||
ccimx91-dvk core-image-base
|
ccimx91-dvk core-image-base
|
||||||
ccimx93-dvk dey-image-qt,dey-image-lvgl
|
ccimx93-dvk dey-image-qt,dey-image-lvgl
|
||||||
ccimx95-dvk dey-image-qt,dey-image-chromium,dey-image-lvgl,dey-image-flutter,dey-image-container-manager
|
ccimx95-dvk dey-image-qt,dey-image-chromium,dey-image-lvgl,dey-image-flutter,dey-image-containers
|
||||||
_EOF_
|
_EOF_
|
||||||
|
|
||||||
# Set additional layers required for yocto images
|
# Set additional layers required for yocto images
|
||||||
declare -A EXTRA_YOCTO_LAYERS
|
declare -A EXTRA_YOCTO_LAYERS
|
||||||
EXTRA_YOCTO_LAYERS["dey-image-container-manager"]="\
|
EXTRA_YOCTO_LAYERS["dey-image-containers"]="\
|
||||||
meta-openembedded/meta-filesystems \
|
meta-openembedded/meta-filesystems \
|
||||||
meta-virtualization \
|
meta-virtualization \
|
||||||
meta-digi/meta-digi-containers"
|
meta-digi/meta-digi-containers"
|
||||||
|
|
||||||
# Set additional configurations required for yocto images
|
# Set additional configurations required for yocto images
|
||||||
declare -A EXTRA_YOCTO_CONF
|
declare -A EXTRA_YOCTO_CONF
|
||||||
EXTRA_YOCTO_CONF["dey-image-container-manager"]="\
|
EXTRA_YOCTO_CONF["dey-image-containers"]="\
|
||||||
DISTRO_FEATURES:append = \" virtualization\" \
|
DISTRO_FEATURES:append = \" virtualization\" \
|
||||||
"
|
"
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue