From b0410672c56acba2edb9bfea166130ed16429028 Mon Sep 17 00:00:00 2001 From: Baptiste Le Duc Date: Wed, 15 Apr 2026 11:46:42 +0200 Subject: [PATCH 1/7] docker/riscv/trixie: add sbin as a PATH in rcS script Signed-off-by: Baptiste Le Duc --- docker/riscv/trixie/image/Makefile | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docker/riscv/trixie/image/Makefile b/docker/riscv/trixie/image/Makefile index da882b8..5aeaa5f 100644 --- a/docker/riscv/trixie/image/Makefile +++ b/docker/riscv/trixie/image/Makefile @@ -147,9 +147,10 @@ initrd-tools: dist-tools create-tools-dirs ## Create initrd with Xen tools inclu 'mount -t devpts devpts /dev/pts' \ 'mount -t sysfs sysfs /sys' \ 'export LIBXL_DEBUG_DUMP_DTB="/var/log/xen/debug_dump_dt.dtb"' \ - './dist/install/usr/local/sbin/xenstored' \ - './dist/install/usr/local/sbin/xenconsoled' \ - 'sleep 1' \ + 'export PATH=$$PATH:/dist/install/usr/local/sbin' \ + 'xenstored' \ + 'xenconsoled' \ + 'sleep 0.5' \ './lib/xen/bin/xen-init-dom0' \ 'exec /bin/sh' \ > $(RCS_FILE) && \ From e347ca628676151e1cac8cfc4b09c673811789eb Mon Sep 17 00:00:00 2001 From: Baptiste Le Duc Date: Wed, 22 Apr 2026 14:07:05 +0200 Subject: [PATCH 2/7] docker/riscv/trixie: wip guest creation support Signed-off-by: Baptiste Le Duc --- docker/riscv/trixie/image/Dockerfile | 7 +++---- docker/riscv/trixie/image/Makefile | 23 +++++++++++++---------- docker/riscv/trixie/image/domu.cfg | 5 ++++- docker/riscv/trixie/image/generate_dtb.sh | 2 +- 4 files changed, 21 insertions(+), 16 deletions(-) diff --git a/docker/riscv/trixie/image/Dockerfile b/docker/riscv/trixie/image/Dockerfile index 1078d67..e8a9338 100644 --- a/docker/riscv/trixie/image/Dockerfile +++ b/docker/riscv/trixie/image/Dockerfile @@ -102,14 +102,12 @@ RUN mkdir -p lib && \ done -WORKDIR ${BUILD_DIR} - +WORKDIR ${TMP_DOMU_INITRD_DIR} +COPY --from=busybox-builder /busybox-install . # Build minimal domU initrd from busybox RUN mkdir -p ${TMP_DOMU_INITRD_DIR}/bin ${TMP_DOMU_INITRD_DIR}/sbin \ ${TMP_DOMU_INITRD_DIR}/proc ${TMP_DOMU_INITRD_DIR}/sys \ ${TMP_DOMU_INITRD_DIR}/dev ${TMP_DOMU_INITRD_DIR}/etc/init.d && \ - cp -a ${INITRD_DIR}/bin/busybox ${TMP_DOMU_INITRD_DIR}/bin/ && \ - ${TMP_DOMU_INITRD_DIR}/bin/busybox --install -s ${TMP_DOMU_INITRD_DIR}/bin/ && \ printf '%s\n' \ '#!/bin/sh' \ 'mount -t proc proc /proc' \ @@ -122,6 +120,7 @@ RUN mkdir -p ${TMP_DOMU_INITRD_DIR}/bin ${TMP_DOMU_INITRD_DIR}/sbin \ genext2fs -b 4096 -N 512 -U -d ${TMP_DOMU_INITRD_DIR}/ ${DOMU_INITRD_IMG} && \ rm -rf ${TMP_DOMU_INITRD_DIR} +WORKDIR ${BUILD_DIR} # External binaries COPY --from=kernel-riscv64 \ /Image.gz ${ARTIFACTS_DIR}/Image.gz diff --git a/docker/riscv/trixie/image/Makefile b/docker/riscv/trixie/image/Makefile index 5aeaa5f..ae62601 100644 --- a/docker/riscv/trixie/image/Makefile +++ b/docker/riscv/trixie/image/Makefile @@ -26,7 +26,7 @@ XEN_MAKE := $(MAKE) -C $(XEN_ROOT) -j$(nproc) QEMU_BASE_FLAGS = \ -M virt,aclint=off,aia=aplic-imsic,aia-guests=7 \ - -cpu rv64,smstateen=on \ + -cpu rv64,smstateen=on,sstc=off\ -bios $(OPENSBI) \ -smp 2 \ -nographic \ @@ -58,7 +58,7 @@ GDB_ARGS += \ -ex "b start_xen" \ -ex "c" -.PHONY: all clean help initrd-tools dist-tools dist-xen dist build-tools build-xen build go go-debug gdb initrd create-common-dirs create-tools-dirs +.PHONY: all clean help initrd-tools dist-tools dist-xen dist build-tools build-xen build go go-debug gdb initrd create-common-dirs create-tools-dirs install help: ## Display this help message @grep -E '^[a-zA-Z_-]+:.*##' $(MAKEFILE_LIST) | \ @@ -67,7 +67,7 @@ help: ## Display this help message # --- Internal targets --- $(XEN_CONFIGURE_OUT): $(XEN_ROOT)/configure - cd $(XEN_ROOT) && ./configure --host=riscv64-linux-gnu + cd $(XEN_ROOT) && ./configure --prefix=/usr --host=riscv64-linux-gnu $(XEN_CONFIG): cp $(CONFIGS_DIR)/.config $(XEN_CONFIG) @@ -104,7 +104,10 @@ dist-tools: $(XEN_CONFIGURE_OUT) ## Build and install Xen tools to /dist # Use sub-make to preserve parallel build (-j$(nproc) not propagated by top-level Xen build) dist-xen: $(XEN_CONFIG) $(XEN_CONFIGURE_OUT) ## Build and install Xen hypervisor to /dist - $(MAKE) -C $(XEN_ROOT)/xen install DESTDIR=$(XEN_ROOT)/dist/install -j$(nproc) + $(MAKE) -C $(XEN_ROOT)/xen install DESTDIR=$(XEN_ROOT) -j$(nproc) + +install: $(XEN_CONFIG) $(XEN_CONFIGURE_OUT) + $(MAKE) -C $(XEN_ROOT) install DESTDIR=$(INITRD_DIR) -j$(nproc) dist: dist-tools dist-xen ## Build and install both tools and Xen to /dist @@ -134,10 +137,8 @@ initrd: $(INITRD_STAMP) create-common-dirs ## Create basic initrd image cp $(RCS_FILE) $(INITRD_DIR)/etc/init.d/ genext2fs -b 6500 -N 1024 -U -d $(INITRD_DIR)/ $(INITRD) -initrd-tools: dist-tools create-tools-dirs ## Create initrd with Xen tools included +initrd-tools: install create-tools-dirs ## Create initrd with Xen tools included echo "Building initrd with tools image" - cp -r $(XEN_ROOT)/dist/* $(INITRD_DIR)/dist/ - mv $(INITRD_DIR)/dist/install/usr/local/lib/* $(INITRD_DIR)/lib/ printf '%s\n' \ '#!/bin/sh' \ 'echo "Hello RISC-V World!"' \ @@ -147,11 +148,13 @@ initrd-tools: dist-tools create-tools-dirs ## Create initrd with Xen tools inclu 'mount -t devpts devpts /dev/pts' \ 'mount -t sysfs sysfs /sys' \ 'export LIBXL_DEBUG_DUMP_DTB="/var/log/xen/debug_dump_dt.dtb"' \ - 'export PATH=$$PATH:/dist/install/usr/local/sbin' \ 'xenstored' \ - 'xenconsoled' \ + 'xenconsoled -vvvv' \ 'sleep 0.5' \ - './lib/xen/bin/xen-init-dom0' \ + '/usr/lib/xen/bin/xen-init-dom0' \ + 'xl cpupool-create name=\"test\"' \ + 'xl cpupool-cpu-remove Pool-0 1' \ + 'xl cpupool-cpu-add test 1' \ 'exec /bin/sh' \ > $(RCS_FILE) && \ chmod +x $(RCS_FILE) diff --git a/docker/riscv/trixie/image/domu.cfg b/docker/riscv/trixie/image/domu.cfg index 0207127..37d088d 100644 --- a/docker/riscv/trixie/image/domu.cfg +++ b/docker/riscv/trixie/image/domu.cfg @@ -3,5 +3,8 @@ type = "pvh" kernel = "/domu/Image.gz" ramdisk = "/domu/initrd.img" memory = 256 +cpus = "1" +pool = "test" +cpus_soft = "1" vcpus = 1 -extra = "console=hvc0 rw root=/dev/ram" +extra = "console=hvc0 keep_bootcon rw root=/dev/ram" diff --git a/docker/riscv/trixie/image/generate_dtb.sh b/docker/riscv/trixie/image/generate_dtb.sh index 9c1ca7a..244c3d3 100755 --- a/docker/riscv/trixie/image/generate_dtb.sh +++ b/docker/riscv/trixie/image/generate_dtb.sh @@ -54,7 +54,7 @@ generate_base_dts() { local ic_flags="" case $platform_interrupt_controller in aplic-imsic) - ic_flags=",aclint=off,aia=aplic-imsic,aia-guests=7 -cpu rv64,smstateen=on" + ic_flags=",aclint=off,aia=aplic-imsic,aia-guests=7 -cpu rv64,smstateen=on,sstc=off" ;; esac From adb11d8ccf6d1aab7d8ad5a770c7be971970cbeb Mon Sep 17 00:00:00 2001 From: Baptiste Le Duc Date: Wed, 22 Apr 2026 15:43:37 +0200 Subject: [PATCH 3/7] docker/riscv/trixie: error on missing KERNEL or VMLINUX path Silent docker volume mount failure when path invalid $(wildcard) check now aborts early with a clear error message. Signed-off-by: Baptiste Le Duc --- docker/riscv/trixie/Makefile | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docker/riscv/trixie/Makefile b/docker/riscv/trixie/Makefile index 3b9b497..3dbdda8 100644 --- a/docker/riscv/trixie/Makefile +++ b/docker/riscv/trixie/Makefile @@ -29,12 +29,18 @@ DOCKER := docker run --rm -it \ # Override the pre-compiled kernel bundled in the Docker image ifdef KERNEL +ifeq ($(wildcard $(KERNEL)),) +$(error KERNEL file not found: $(KERNEL)) +endif DOCKER += -v "$(KERNEL)":/build/kernel/Image.gz \ -e "KERNEL=/build/kernel/Image.gz" endif # Mount vmlinux for GDB kernel symbol loading ifdef VMLINUX +ifeq ($(wildcard $(VMLINUX)),) +$(error VMLINUX file not found: $(VMLINUX)) +endif DOCKER += -v "$(VMLINUX)":/build/vmlinux \ -e "VMLINUX=/build/vmlinux" endif From 022d95b807c0cdb0b63cf69f2d0c55f1a847c011 Mon Sep 17 00:00:00 2001 From: Baptiste Le Duc Date: Wed, 29 Apr 2026 11:41:13 +0200 Subject: [PATCH 4/7] docker/riscv/trixie: add dtc to debug initrd Cross-compile dtc for riscv64 in a dedicated build stage and include the binary in the dom0 initrd only when DEBUG_XL=1 (build-image-debug). libfdt and libc dependencies are already present in the initrd. Signed-off-by: Baptiste Le Duc --- docker/riscv/trixie/Makefile | 3 +++ docker/riscv/trixie/image/Dockerfile | 22 ++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/docker/riscv/trixie/Makefile b/docker/riscv/trixie/Makefile index 3dbdda8..fa675cd 100644 --- a/docker/riscv/trixie/Makefile +++ b/docker/riscv/trixie/Makefile @@ -73,6 +73,9 @@ setup: ## Register QEMU binfmt emulators (run once after each reboot) build-image: ## Build the Docker image locally from image/ docker buildx build --platform linux/amd64 -f image/Dockerfile -t $(IMAGE) image/ +build-image-debug: ## Build the Docker image with debug tools (gdb) included + docker buildx build --platform linux/amd64 --build-arg DEBUG_XL=1 -f image/Dockerfile -t $(IMAGE) image/ + shell: ## Open an interactive shell in the container $(DOCKER) -p 1234:1234 $(IMAGE) /bin/bash diff --git a/docker/riscv/trixie/image/Dockerfile b/docker/riscv/trixie/image/Dockerfile index e8a9338..f50625d 100644 --- a/docker/riscv/trixie/image/Dockerfile +++ b/docker/riscv/trixie/image/Dockerfile @@ -7,6 +7,21 @@ FROM baptleduc/xen-riscv64-kernel:6.18 AS kernel-riscv64 FROM registry.gitlab.com/xen-project/people/olkur/xen/tests-artifacts/qemu-system-riscv64:8.2.0-aia-riscv64 AS qemu-aia-riscv64 +FROM debian:trixie-slim AS dtc-riscv64 +ENV DEBIAN_FRONTEND=noninteractive +RUN apt-get update && apt-get install -y --no-install-recommends \ + build-essential gcc-riscv64-linux-gnu libc6-dev-riscv64-cross \ + make bison flex pkg-config curl ca-certificates && \ + rm -rf /var/lib/apt/lists/* +ARG DTC_VER=1.7.0 +RUN curl -fsSL https://github.com/dgibson/dtc/archive/refs/tags/v${DTC_VER}.tar.gz \ + | tar xz && \ + cd dtc-${DTC_VER} && \ + make NO_PYTHON=1 NO_YAML=1 \ + CC=riscv64-linux-gnu-gcc \ + PREFIX=/dtc-install install-bin && \ + riscv64-linux-gnu-strip /dtc-install/bin/dtc + FROM debian:trixie-slim AS busybox-builder ARG BUSYBOX_VER=1.36.1 @@ -54,6 +69,9 @@ ARG DOMU_INITRD_DIR=/build/domu-initrd ENV DOMU_INITRD_IMG=${DOMU_INITRD_DIR}/domu-initrd.img ARG TMP_DOMU_INITRD_DIR=/tmp/domu-initrd +# Debug tools (opt-in via --build-arg DEBUG_XL=1) +ARG DEBUG_XL=0 + # Cross-compilation settings ENV DEBIAN_FRONTEND=noninteractive ENV CROSS_COMPILE=riscv64-linux-gnu- @@ -101,6 +119,10 @@ RUN mkdir -p lib && \ cp "$lib" ./lib/; \ done +RUN --mount=type=bind,from=dtc-riscv64,source=/dtc-install,target=/dtc-stage \ + if [ "${DEBUG_XL}" = "1" ]; then \ + cp /dtc-stage/bin/dtc ./bin/dtc; \ + fi WORKDIR ${TMP_DOMU_INITRD_DIR} COPY --from=busybox-builder /busybox-install . From b2637a9ef056da6b94b95dedd9cb3bf5f80de605 Mon Sep 17 00:00:00 2001 From: Baptiste Le Duc Date: Mon, 4 May 2026 15:15:42 +0200 Subject: [PATCH 5/7] docker/riscv/trixie: remove useless building of doc Signed-off-by: Baptiste Le Duc --- docker/riscv/trixie/image/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docker/riscv/trixie/image/Makefile b/docker/riscv/trixie/image/Makefile index ae62601..b1af9ec 100644 --- a/docker/riscv/trixie/image/Makefile +++ b/docker/riscv/trixie/image/Makefile @@ -106,9 +106,6 @@ dist-tools: $(XEN_CONFIGURE_OUT) ## Build and install Xen tools to /dist dist-xen: $(XEN_CONFIG) $(XEN_CONFIGURE_OUT) ## Build and install Xen hypervisor to /dist $(MAKE) -C $(XEN_ROOT)/xen install DESTDIR=$(XEN_ROOT) -j$(nproc) -install: $(XEN_CONFIG) $(XEN_CONFIGURE_OUT) - $(MAKE) -C $(XEN_ROOT) install DESTDIR=$(INITRD_DIR) -j$(nproc) - dist: dist-tools dist-xen ## Build and install both tools and Xen to /dist # Uses the Xen top-level build-tools (no -j bypass): same rationale as dist-tools. @@ -121,6 +118,9 @@ build-xen: $(XEN_CONFIG) $(XEN_CONFIGURE_OUT) ## Build Xen hypervisor build: build-tools build-xen ## Build both Xen tools and hypervisor +install: $(XEN_CONFIG) $(XEN_CONFIGURE_OUT) + $(MAKE) -C $(XEN_ROOT) install SUBSYSTEM="xen tools" DESTDIR=$(INITRD_DIR) -j$(nproc) + # --- Initrd targets --- initrd: $(INITRD_STAMP) create-common-dirs ## Create basic initrd image From b6799217f7df201cec7d0940a39f7f43293f17d2 Mon Sep 17 00:00:00 2001 From: Baptiste Le Duc Date: Mon, 4 May 2026 15:45:24 +0200 Subject: [PATCH 6/7] docker/riscv/trixie: remove useless pool creation Signed-off-by: Baptiste Le Duc --- docker/riscv/trixie/image/Makefile | 3 --- docker/riscv/trixie/image/domu.cfg | 2 -- 2 files changed, 5 deletions(-) diff --git a/docker/riscv/trixie/image/Makefile b/docker/riscv/trixie/image/Makefile index b1af9ec..3bae786 100644 --- a/docker/riscv/trixie/image/Makefile +++ b/docker/riscv/trixie/image/Makefile @@ -152,9 +152,6 @@ initrd-tools: install create-tools-dirs ## Create initrd with Xen tools included 'xenconsoled -vvvv' \ 'sleep 0.5' \ '/usr/lib/xen/bin/xen-init-dom0' \ - 'xl cpupool-create name=\"test\"' \ - 'xl cpupool-cpu-remove Pool-0 1' \ - 'xl cpupool-cpu-add test 1' \ 'exec /bin/sh' \ > $(RCS_FILE) && \ chmod +x $(RCS_FILE) diff --git a/docker/riscv/trixie/image/domu.cfg b/docker/riscv/trixie/image/domu.cfg index 37d088d..7f06c09 100644 --- a/docker/riscv/trixie/image/domu.cfg +++ b/docker/riscv/trixie/image/domu.cfg @@ -4,7 +4,5 @@ kernel = "/domu/Image.gz" ramdisk = "/domu/initrd.img" memory = 256 cpus = "1" -pool = "test" -cpus_soft = "1" vcpus = 1 extra = "console=hvc0 keep_bootcon rw root=/dev/ram" From efe483397928c5b4a6438e45502fa1b6df721b76 Mon Sep 17 00:00:00 2001 From: Baptiste Le Duc Date: Tue, 5 May 2026 18:19:58 +0200 Subject: [PATCH 7/7] docker/riscv/trixie: align Makefile targets with Xen build conventions Replace broken dist-* targets and mixed $(MAKE) calls with uniform XEN_MAKE usage. Split install into install-xen/install-tools, fix SUBSYSTEM -> SUBSYSTEMS typo that caused all subsystems to build. Signed-off-by: Baptiste Le Duc --- docker/riscv/trixie/Makefile | 8 ------- docker/riscv/trixie/image/Makefile | 38 ++++++++++++++---------------- 2 files changed, 18 insertions(+), 28 deletions(-) diff --git a/docker/riscv/trixie/Makefile b/docker/riscv/trixie/Makefile index fa675cd..6ea2852 100644 --- a/docker/riscv/trixie/Makefile +++ b/docker/riscv/trixie/Makefile @@ -83,18 +83,10 @@ run: ## Boot Xen + dom0 in QEMU $(DOCKER) -p 1234:1234 $(IMAGE) \ /bin/bash -c "make $(INITRD) && make go" -run-rebuild: ## Rebuild Xen hypervisor, then boot - $(DOCKER) -p 1234:1234 $(IMAGE) \ - /bin/bash -c "make build-xen && make $(INITRD) && make go" - debug: ## Boot Xen in QEMU, wait for GDB on port 1234 $(DOCKER) -p 1234:1234 $(IMAGE) \ /bin/bash -c "make $(INITRD) && make go-debug" -debug-rebuild: ## Rebuild Xen, then boot in GDB-wait mode - $(DOCKER) -p 1234:1234 $(IMAGE) \ - /bin/bash -c "make build-xen && make $(INITRD) && make go-debug" - # VMLINUX is optional: without it, GDB loads Xen symbols only. gdb: ## Attach GDB (TUI) to a running Xen instance ifndef VMLINUX diff --git a/docker/riscv/trixie/image/Makefile b/docker/riscv/trixie/image/Makefile index 3bae786..69015d9 100644 --- a/docker/riscv/trixie/image/Makefile +++ b/docker/riscv/trixie/image/Makefile @@ -58,7 +58,7 @@ GDB_ARGS += \ -ex "b start_xen" \ -ex "c" -.PHONY: all clean help initrd-tools dist-tools dist-xen dist build-tools build-xen build go go-debug gdb initrd create-common-dirs create-tools-dirs install +.PHONY: all clean help initrd-tools install-tools install-xen install build-tools build-xen build go go-debug gdb initrd create-common-dirs create-tools-dirs help: ## Display this help message @grep -E '^[a-zA-Z_-]+:.*##' $(MAKEFILE_LIST) | \ @@ -97,45 +97,43 @@ create-tools-dirs: create-common-dirs # --- Build targets --- -# Uses the Xen top-level dist-tools (no -j bypass): replicating it requires -# running install-tools-public-headers first, which adds complexity. -dist-tools: $(XEN_CONFIGURE_OUT) ## Build and install Xen tools to /dist - $(XEN_MAKE) dist-tools - -# Use sub-make to preserve parallel build (-j$(nproc) not propagated by top-level Xen build) -dist-xen: $(XEN_CONFIG) $(XEN_CONFIGURE_OUT) ## Build and install Xen hypervisor to /dist - $(MAKE) -C $(XEN_ROOT)/xen install DESTDIR=$(XEN_ROOT) -j$(nproc) - -dist: dist-tools dist-xen ## Build and install both tools and Xen to /dist - -# Uses the Xen top-level build-tools (no -j bypass): same rationale as dist-tools. build-tools: $(XEN_CONFIGURE_OUT) ## Build Xen tools $(XEN_MAKE) build-tools -# Use sub-make to preserve parallel build (-j$(nproc) not propagated by top-level Xen build) build-xen: $(XEN_CONFIG) $(XEN_CONFIGURE_OUT) ## Build Xen hypervisor - $(MAKE) -C $(XEN_ROOT)/xen -j$(nproc) + $(XEN_MAKE) build-xen + +build: $(XEN_CONFIG) $(XEN_CONFIGURE_OUT) ## Build Xen hypervisor and tools + $(XEN_MAKE) build SUBSYSTEMS="xen tools" -build: build-tools build-xen ## Build both Xen tools and hypervisor +# --- Install targets --- -install: $(XEN_CONFIG) $(XEN_CONFIGURE_OUT) - $(MAKE) -C $(XEN_ROOT) install SUBSYSTEM="xen tools" DESTDIR=$(INITRD_DIR) -j$(nproc) +install-tools: $(XEN_CONFIGURE_OUT) ## Build and install Xen tools to INITRD_DIR + $(XEN_MAKE) install-tools DESTDIR=$(INITRD_DIR) + +install-xen: $(XEN_CONFIG) $(XEN_CONFIGURE_OUT) ## Build and install Xen hypervisor to INITRD_DIR + $(XEN_MAKE) install-xen DESTDIR=$(INITRD_DIR) + +install: $(XEN_CONFIG) $(XEN_CONFIGURE_OUT) ## Build and install Xen hypervisor and tools to INITRD_DIR + $(XEN_MAKE) install DESTDIR=$(INITRD_DIR) SUBSYSTEMS="xen tools" # --- Initrd targets --- -initrd: $(INITRD_STAMP) create-common-dirs ## Create basic initrd image +initrd: $(INITRD_STAMP) install-xen create-common-dirs ## Create basic initrd image echo "Building initrd image" printf '%s\n' \ '#!/bin/sh' \ 'echo "Hello RISC-V World!"' \ 'mount -t proc proc /proc' \ 'mount -t xenfs xenfs /proc/xen' \ + 'mkdir -p /dev/pts/' \ + 'mount -t devpts devpts /dev/pts' \ 'mount -t sysfs sysfs /sys' \ 'exec /bin/sh' \ > $(RCS_FILE) && \ chmod +x $(RCS_FILE) cp $(RCS_FILE) $(INITRD_DIR)/etc/init.d/ - genext2fs -b 6500 -N 1024 -U -d $(INITRD_DIR)/ $(INITRD) + genext2fs -b 10000 -N 1024 -U -d $(INITRD_DIR)/ $(INITRD) initrd-tools: install create-tools-dirs ## Create initrd with Xen tools included echo "Building initrd with tools image"