129 lines
5.3 KiB
Plaintext
129 lines
5.3 KiB
Plaintext
# classes/wolfssl-initramfs.bbclass
|
|
#
|
|
# Purpose:
|
|
# Provide reusable functions that allow initramfs images to:
|
|
# - include wolfssl-linuxkm
|
|
# - run depmod inside the initramfs rootfs
|
|
# - optionally inject `modprobe libwolfssl` into /init
|
|
#
|
|
# IMPORTANT:
|
|
# This class does *not* automatically modify ROOTFS_POSTPROCESS_COMMAND.
|
|
# The consuming image recipe must explicitly opt-in:
|
|
#
|
|
# inherit wolfssl-initramfs
|
|
# PACKAGE_INSTALL:append = " wolfssl-linuxkm"
|
|
# ROOTFS_POSTPROCESS_COMMAND += " wolfssl_initramfs_run_depmod; "
|
|
# ROOTFS_POSTPROCESS_COMMAND += " wolfssl_initramfs_inject_after_modalias; "
|
|
#
|
|
# Available injection functions are documented below.
|
|
|
|
### ─────────────────────────────────────────────────────────────
|
|
### 0. Common helper
|
|
### ─────────────────────────────────────────────────────────────
|
|
|
|
wolfssl_initramfs_has_module() {
|
|
find "${IMAGE_ROOTFS}/lib/modules" -name 'libwolfssl.ko' >/dev/null 2>&1
|
|
}
|
|
|
|
wolfssl_initramfs_has_init() {
|
|
[ -f "${IMAGE_ROOTFS}/init" ]
|
|
}
|
|
|
|
### ─────────────────────────────────────────────────────────────
|
|
### 1. Run depmod inside the initramfs
|
|
### ─────────────────────────────────────────────────────────────
|
|
|
|
wolfssl_initramfs_run_depmod() {
|
|
echo "wolfssl-initramfs: running depmod" >&2
|
|
|
|
if [ ! -d "${IMAGE_ROOTFS}/lib/modules" ]; then
|
|
echo "wolfssl-initramfs: no modules directory found; skipping depmod" >&2
|
|
return 0
|
|
fi
|
|
|
|
if ! command -v depmod >/dev/null 2>&1; then
|
|
echo "wolfssl-initramfs: depmod not available; skipping" >&2
|
|
return 0
|
|
fi
|
|
|
|
for kdir in "${IMAGE_ROOTFS}"/lib/modules/*; do
|
|
[ -d "$kdir" ] || continue
|
|
|
|
kver=$(basename "$kdir")
|
|
echo "wolfssl-initramfs: depmod -a -b ${IMAGE_ROOTFS} ${kver}" >&2
|
|
|
|
depmod -a -b "${IMAGE_ROOTFS}" "${kver}" || \
|
|
echo "wolfssl-initramfs: WARNING: depmod failed for ${kver}" >&2
|
|
done
|
|
}
|
|
|
|
### ─────────────────────────────────────────────────────────────
|
|
### 2. Injection methods for /init
|
|
### ─────────────────────────────────────────────────────────────
|
|
|
|
# Common injection wrapper
|
|
wolfssl_initramfs_try_inject() {
|
|
local anchor="$1"
|
|
local sed_expr="$2"
|
|
local desc="$3"
|
|
|
|
if grep -q "$anchor" "${IMAGE_ROOTFS}/init"; then
|
|
echo "wolfssl-initramfs: injecting modprobe at: $desc" >&2
|
|
sed -i "$sed_expr" "${IMAGE_ROOTFS}/init" || \
|
|
echo "wolfssl-initramfs: WARNING: failed to inject at $desc" >&2
|
|
fi
|
|
}
|
|
|
|
### 2A: Inject after modalias scan loop
|
|
wolfssl_initramfs_inject_after_modalias() {
|
|
echo "wolfssl-initramfs: checking modalias injection" >&2
|
|
|
|
wolfssl_initramfs_has_init || { echo "… no /init, skip"; return 0; }
|
|
wolfssl_initramfs_has_module || { echo "… module missing, skip"; return 0; }
|
|
|
|
wolfssl_initramfs_try_inject \
|
|
"find /sys -name modalias" \
|
|
'/find \/sys -name modalias/a\
|
|
modprobe libwolfssl || echo "wolfssl-initramfs: failed to load libwolfssl" >&2' \
|
|
"modalias section"
|
|
}
|
|
|
|
### 2B: Inject after '# Load and run modules'
|
|
wolfssl_initramfs_inject_after_loadmodules() {
|
|
echo "wolfssl-initramfs: checking loadmodules injection" >&2
|
|
|
|
wolfssl_initramfs_has_init || { echo "… no /init, skip"; return 0; }
|
|
wolfssl_initramfs_has_module || { echo "… module missing, skip"; return 0; }
|
|
|
|
wolfssl_initramfs_try_inject \
|
|
'^# Load and run modules' \
|
|
'/^# Load and run modules/a\
|
|
modprobe libwolfssl || echo "wolfssl-initramfs: failed to load libwolfssl" >&2' \
|
|
"Load-and-run-modules section"
|
|
}
|
|
|
|
### 2C: Last-resort: Inject after kmsg redirect
|
|
wolfssl_initramfs_inject_after_kmsg() {
|
|
echo "wolfssl-initramfs: checking kmsg injection" >&2
|
|
|
|
wolfssl_initramfs_has_init || { echo "… no /init, skip"; return 0; }
|
|
wolfssl_initramfs_has_module || { echo "… module missing, skip"; return 0; }
|
|
|
|
wolfssl_initramfs_try_inject \
|
|
'exec > /dev/kmsg' \
|
|
'/exec > \/dev\/kmsg 2>&1/a\
|
|
modprobe libwolfssl || echo "wolfssl-initramfs: failed to load libwolfssl" >&2' \
|
|
"kmsg redirection section"
|
|
}
|
|
|
|
### ─────────────────────────────────────────────────────────────
|
|
### 3. Documentation (shown in bitbake -e or debugging)
|
|
### ─────────────────────────────────────────────────────────────
|
|
|
|
WOLFSSL_INITRAMFS_FUNCTIONS = "\
|
|
wolfssl_initramfs_run_depmod \
|
|
wolfssl_initramfs_inject_after_modalias \
|
|
wolfssl_initramfs_inject_after_loadmodules \
|
|
wolfssl_initramfs_inject_after_kmsg \
|
|
"
|