Files
Deshab-OS/CODE/linux/build_initrd.sh
T

70 lines
2.4 KiB
Bash
Raw Normal View History

2026-07-29 10:26:25 +08:00
#!/bin/bash
# Build initramfs only (assumes bzImage already built)
set -e
# 按脚本自身位置推导,不认死盘符路径。
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
2026-07-29 10:26:25 +08:00
OUTPUT_DIR="$PROJECT_ROOT/SYSTEM/boot"
INITRAMFS_DIR="$SCRIPT_DIR/initramfs"
2026-07-31 13:53:49 +08:00
LINUX_SRC="${LINUX_SRC:-$HOME/linux-6.6}"
2026-07-29 10:26:25 +08:00
INITRAMFS_TMP="$SCRIPT_DIR/initramfs.tmp"
rm -rf "$INITRAMFS_TMP"
mkdir -p "$INITRAMFS_TMP/bin"
cp -a "$INITRAMFS_DIR"/* "$INITRAMFS_TMP"/
# Download static busybox
BUSYBOX_CACHE="$SCRIPT_DIR/.cache/busybox"
BUSYBOX_URL="https://busybox.net/downloads/binaries/1.35.0-x86_64-linux-musl/busybox"
if [ ! -x "$BUSYBOX_CACHE" ]; then
echo "[initrd] Downloading static busybox..."
mkdir -p "$(dirname "$BUSYBOX_CACHE")"
curl -fL --retry 3 -o "$BUSYBOX_CACHE" "$BUSYBOX_URL"
chmod +x "$BUSYBOX_CACHE"
fi
cp "$BUSYBOX_CACHE" "$INITRAMFS_TMP/bin/busybox"
chmod +x "$INITRAMFS_TMP/bin/busybox"
echo "[initrd] busybox copied"
# Build utsm_exec_daemon
DAEMON_SRC="$INITRAMFS_DIR/bin/utsm_exec_daemon.c"
if [ -f "$DAEMON_SRC" ]; then
echo "[initrd] Compiling utsm_exec_daemon..."
cc -static -O2 -Wall "-I$PROJECT_ROOT/CODE/utsm-ipc" \
-o "$INITRAMFS_TMP/bin/utsm_exec_daemon" "$DAEMON_SRC"
strip "$INITRAMFS_TMP/bin/utsm_exec_daemon" 2>/dev/null || true
echo "[initrd] daemon compiled"
fi
# gen_init_cpio
GEN_INIT_CPIO="$LINUX_SRC/usr/gen_init_cpio"
if [ ! -x "$GEN_INIT_CPIO" ]; then
echo "[initrd] Building gen_init_cpio..."
cd "$LINUX_SRC" && make usr/ >/dev/null
fi
SPEC="$SCRIPT_DIR/initramfs.tmp.spec"
{
echo "dir /bin 755 0 0"
echo "dir /dev 755 0 0"
echo "dir /proc 755 0 0"
echo "dir /sys 755 0 0"
echo "nod /dev/console 600 0 0 c 5 1"
echo "nod /dev/null 666 0 0 c 1 3"
echo "nod /dev/ttyS0 600 0 0 c 4 64"
echo "file /init $INITRAMFS_TMP/init 755 0 0"
echo "file /bin/busybox $INITRAMFS_TMP/bin/busybox 755 0 0"
if [ -f "$INITRAMFS_TMP/bin/utsm_exec_daemon" ]; then
echo "file /bin/utsm_exec_daemon $INITRAMFS_TMP/bin/utsm_exec_daemon 755 0 0"
fi
2026-07-31 13:53:49 +08:00
for app in sh mount umount echo sleep uname ls cat ps mkdir switch_root setsid cttyhack; do
2026-07-29 10:26:25 +08:00
echo "slink /bin/$app /bin/busybox 777 0 0"
done
} > "$SPEC"
"$GEN_INIT_CPIO" "$SPEC" | gzip -9 > "$OUTPUT_DIR/linux-initrd.img"
echo "[initrd] Done: $OUTPUT_DIR/linux-initrd.img"
ls -lh "$OUTPUT_DIR/linux-initrd.img"
rm -rf "$INITRAMFS_TMP" "$SPEC"