Initial RK1 media-center image project
This commit is contained in:
Executable
+149
@@ -0,0 +1,149 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -Eeuo pipefail
|
||||
|
||||
TEST_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)
|
||||
RUNTIME_DIR=$(cd -- "$TEST_DIR/.." && pwd -P)
|
||||
TEST_TMP=$(mktemp -d "${TMPDIR:-/tmp}/rk1-runtime-tests.XXXXXXXX")
|
||||
|
||||
cleanup() {
|
||||
rm -rf -- "$TEST_TMP"
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
fail() {
|
||||
printf 'FAIL: %s\n' "$*" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
pass() {
|
||||
printf 'PASS: %s\n' "$*"
|
||||
}
|
||||
|
||||
bash -n \
|
||||
"$RUNTIME_DIR/install-rknn-runtime.sh" \
|
||||
"$RUNTIME_DIR/rk1-media-selftest" \
|
||||
"$RUNTIME_DIR/rk1-media-diagnostics"
|
||||
pass "shell syntax"
|
||||
|
||||
"$RUNTIME_DIR/install-rknn-runtime.sh" --help >/dev/null
|
||||
"$RUNTIME_DIR/rk1-media-selftest" --help >/dev/null
|
||||
"$RUNTIME_DIR/rk1-media-diagnostics" --help >/dev/null
|
||||
pass "command help"
|
||||
|
||||
mkdir -p \
|
||||
"$TEST_TMP/empty/sys" \
|
||||
"$TEST_TMP/empty/proc" \
|
||||
"$TEST_TMP/empty/dev" \
|
||||
"$TEST_TMP/empty/rknn"
|
||||
RK1_SYSFS_ROOT="$TEST_TMP/empty/sys" \
|
||||
RK1_PROCFS_ROOT="$TEST_TMP/empty/proc" \
|
||||
RK1_DEV_ROOT="$TEST_TMP/empty/dev" \
|
||||
RKNN_HOME="$TEST_TMP/empty/rknn" \
|
||||
"$RUNTIME_DIR/rk1-media-selftest" --quick --json \
|
||||
>"$TEST_TMP/empty.json"
|
||||
grep -q '"overall":"warn"' "$TEST_TMP/empty.json" ||
|
||||
fail "empty-hardware JSON does not report a warning"
|
||||
grep -q '"checks":\[' "$TEST_TMP/empty.json" ||
|
||||
fail "empty-hardware JSON has no checks"
|
||||
pass "absent hardware degrades safely"
|
||||
|
||||
FAKE="$TEST_TMP/fake"
|
||||
mkdir -p \
|
||||
"$FAKE/sys/class/drm/card0-HDMI-A-1" \
|
||||
"$FAKE/sys/class/devfreq/fb000000.gpu" \
|
||||
"$FAKE/sys/class/devfreq/fdab0000.npu" \
|
||||
"$FAKE/sys/class/net/eth0" \
|
||||
"$FAKE/sys/block/mmcblk0" \
|
||||
"$FAKE/sys/block/nvme0n1" \
|
||||
"$FAKE/sys/bus/platform/drivers/dwhdmi-rockchip/fde80000.hdmi" \
|
||||
"$FAKE/sys/bus/platform/drivers/rockchip-hdptx-phy-hdmi/fed60000.hdmiphy" \
|
||||
"$FAKE/sys/bus/platform/drivers/panthor/fb000000.gpu" \
|
||||
"$FAKE/sys/bus/platform/drivers/mpp_rkvdec2/fdc38100.rkvdec-core" \
|
||||
"$FAKE/sys/bus/platform/drivers/mpp_rkvenc2/fdbd0000.rkvenc-core" \
|
||||
"$FAKE/sys/bus/platform/drivers/mpp_av1dec/av1-decoder" \
|
||||
"$FAKE/sys/bus/platform/drivers/rga2/fdb80000.rga" \
|
||||
"$FAKE/sys/bus/platform/drivers/rga3/fdb60000.rga" \
|
||||
"$FAKE/sys/bus/platform/drivers/RKNPU/fdab0000.npu" \
|
||||
"$FAKE/proc/device-tree" \
|
||||
"$FAKE/proc/asound" \
|
||||
"$FAKE/dev/dri" \
|
||||
"$FAKE/rknn"
|
||||
printf 'connected\n' >"$FAKE/sys/class/drm/card0-HDMI-A-1/status"
|
||||
printf '3840x2160\n1920x1080\n' >"$FAKE/sys/class/drm/card0-HDMI-A-1/modes"
|
||||
printf 'fake-edid' >"$FAKE/sys/class/drm/card0-HDMI-A-1/edid"
|
||||
printf 'Turing Machines RK1\0' >"$FAKE/proc/device-tree/model"
|
||||
printf ' 0 [rockchiphdmi]: rockchip-hdmi - rockchip-hdmi\n' \
|
||||
>"$FAKE/proc/asound/cards"
|
||||
printf 'up\n' >"$FAKE/sys/class/net/eth0/operstate"
|
||||
printf '1\n' >"$FAKE/sys/class/net/eth0/carrier"
|
||||
touch "$FAKE/dev/dri/renderD128"
|
||||
|
||||
RK1_SYSFS_ROOT="$FAKE/sys" \
|
||||
RK1_PROCFS_ROOT="$FAKE/proc" \
|
||||
RK1_DEV_ROOT="$FAKE/dev" \
|
||||
RKNN_HOME="$FAKE/rknn" \
|
||||
"$RUNTIME_DIR/rk1-media-selftest" --quick --json \
|
||||
>"$TEST_TMP/fake.json"
|
||||
grep -q '"name":"card0-HDMI-A-1","status":"pass"' \
|
||||
"$TEST_TMP/fake.json" || fail "fake connected HDMI was not detected"
|
||||
grep -q '"name":"kernel-driver","status":"pass","message":"Panthor' \
|
||||
"$TEST_TMP/fake.json" || fail "fake Panthor binding was not detected"
|
||||
pass "synthetic hardware inventory"
|
||||
|
||||
if command -v python3 >/dev/null 2>&1; then
|
||||
python3 -m json.tool "$TEST_TMP/empty.json" >/dev/null
|
||||
python3 -m json.tool "$TEST_TMP/fake.json" >/dev/null
|
||||
pass "JSON validity"
|
||||
fi
|
||||
|
||||
RK1_SYSFS_ROOT="$FAKE/sys" \
|
||||
RK1_PROCFS_ROOT="$FAKE/proc" \
|
||||
RK1_DEV_ROOT="$FAKE/dev" \
|
||||
RKNN_HOME="$FAKE/rknn" \
|
||||
"$RUNTIME_DIR/rk1-media-diagnostics" --directory \
|
||||
--output "$TEST_TMP/diagnostics" >/dev/null
|
||||
[[ -s "$TEST_TMP/diagnostics/selftest.json" ]] ||
|
||||
fail "diagnostic bundle is missing selftest.json"
|
||||
[[ -s "$TEST_TMP/diagnostics/drm-connectors.txt" ]] ||
|
||||
fail "diagnostic bundle is missing connector data"
|
||||
[[ -s "$TEST_TMP/diagnostics/kernel-media.log" ]] ||
|
||||
fail "diagnostic bundle is missing filtered kernel data"
|
||||
pass "diagnostic collection"
|
||||
|
||||
if [[ -n ${RKNN_SOURCE_DIR:-} ]]; then
|
||||
[[ -d "$RKNN_SOURCE_DIR" ]] || fail "RKNN_SOURCE_DIR is not a directory"
|
||||
bundled_source="$TEST_TMP/bundled-rknn-source"
|
||||
mkdir -p \
|
||||
"$bundled_source/rknpu2/runtime/Linux/librknn_api/include" \
|
||||
"$bundled_source/rknpu2/runtime/Linux/librknn_api/aarch64" \
|
||||
"$bundled_source/rknpu2/examples/rknn_api_demo/model/RK3588" \
|
||||
"$bundled_source/rknpu2/examples/rknn_api_demo/model"
|
||||
cp "$RKNN_SOURCE_DIR/LICENSE" "$bundled_source/LICENSE"
|
||||
cp "$RKNN_SOURCE_DIR/rknpu2/runtime/Linux/librknn_api/include/rknn_api.h" \
|
||||
"$bundled_source/rknpu2/runtime/Linux/librknn_api/include/rknn_api.h"
|
||||
cp "$RKNN_SOURCE_DIR/rknpu2/runtime/Linux/librknn_api/aarch64/librknnrt.so" \
|
||||
"$bundled_source/rknpu2/runtime/Linux/librknn_api/aarch64/librknnrt.so"
|
||||
cp "$RKNN_SOURCE_DIR/rknpu2/examples/rknn_api_demo/model/RK3588/mobilenet_v1.rknn" \
|
||||
"$bundled_source/rknpu2/examples/rknn_api_demo/model/RK3588/mobilenet_v1.rknn"
|
||||
cp "$RKNN_SOURCE_DIR/rknpu2/examples/rknn_api_demo/model/dog_224x224.jpg" \
|
||||
"$bundled_source/rknpu2/examples/rknn_api_demo/model/dog_224x224.jpg"
|
||||
mkdir -p "$TEST_TMP/rootfs"
|
||||
"$RUNTIME_DIR/install-rknn-runtime.sh" \
|
||||
--rootfs "$TEST_TMP/rootfs" --source-dir "$bundled_source"
|
||||
installed_runtime="$TEST_TMP/rootfs/opt/rknn/2.3.2/lib/librknnrt.so"
|
||||
installed_model="$TEST_TMP/rootfs/opt/rknn/2.3.2/share/models/rk3588/mobilenet_v1.rknn"
|
||||
[[ -x "$TEST_TMP/rootfs/opt/rknn/2.3.2/bin/rknn-inference-test" ]] ||
|
||||
fail "compiled inference test is missing"
|
||||
[[ $(sha256sum "$installed_runtime" | awk '{print $1}') == \
|
||||
d31fc19c85b85f6091b2bd0f6af9d962d5264a4e410bfb536402ec92bac738e8 ]] ||
|
||||
fail "installed runtime checksum differs"
|
||||
[[ $(sha256sum "$installed_model" | awk '{print $1}') == \
|
||||
381dae3b7038a98b10f6ec9dcdbb094a49247341856fb294e692ef518218fcfb ]] ||
|
||||
fail "installed model checksum differs"
|
||||
pass "pinned RKNN installation"
|
||||
else
|
||||
printf 'SKIP: installer integration (set RKNN_SOURCE_DIR to a v2.3.2 checkout)\n'
|
||||
fi
|
||||
|
||||
printf 'All runtime tests passed.\n'
|
||||
Reference in New Issue
Block a user