From 46a1ed07f64ce9af14e6e82823339129aa107744 Mon Sep 17 00:00:00 2001 From: fi Date: Fri, 25 Jul 2025 04:16:46 +0200 Subject: [PATCH] Add doltool and script to convert linux kernel to .dol executable --- Dockerfile | 14 ++++++++++++-- makedol.sh | 28 ++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) create mode 100755 makedol.sh diff --git a/Dockerfile b/Dockerfile index feaa68f..c7f8b8d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -36,20 +36,30 @@ RUN git clone https://github.com/fail0verflow/bootmii-utils.git /build/bootmii-u git checkout a32b8f6520d136677213fcbb730035a7e89567e2 && \ make +RUN git clone https://github.com/nullgemm/doltool.git /build/doltool && \ + cd /build/doltool && \ + git checkout 716ca5390bb6467689165db595079e84c80b9b46 && \ + make + ## final build image -FROM ubuntu:${VARIANT} +FROM ubuntu:${VARIANT} ENV DEBIAN_FRONTEND="noninteractive" RUN apt-get update && \ apt-get -y install \ patch ninja-build make bc ccache gcc libncurses-dev \ - kmod bison flex libssl-dev openssl + kmod bison flex libssl-dev openssl binutils-powerpc-linux-gnu + +RUN mkdir -p /usr/local/doltool/bin +ADD makedol.sh /usr/local/doltool/bin/makedol.sh COPY --from=build /root/x-tools/powerpc-unknown-linux-gnu/ /usr/local/crosstool COPY --from=build /build/hbc/channel/wiiload/wiiload /usr/local/crosstool/bin/wiiload COPY --from=build /build/bootmii-utils/client/bootmii /usr/local/crosstool/bin/bootmii +COPY --from=build /build/doltool/doltool /usr/local/doltool/bin/doltool ENV PATH=/usr/local/crosstool/bin:$PATH +ENV PATH=/usr/local/doltool/bin:$PATH ENV CROSS_COMPILE=powerpc-unknown-linux-gnu- ENV CC=powerpc-unknown-linux-gnu-gcc ENV ARCH=powerpc diff --git a/makedol.sh b/makedol.sh new file mode 100755 index 0000000..b6693f4 --- /dev/null +++ b/makedol.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +# copied from https://themkat.net/2022/12/19/gamecube_linux_sd_boot.html, which itself copied it from the now offline gc-linux wiki +# edited slightly to make it more readable and convenient to use + +KSRC=${KSRC:-.} +target=${1:-zImage} +ofile=zImage + +[ -r ${KSRC}/arch/powerpc/boot/${target} ] || { + echo "Can't find target image ${KSRC}/arch/powerpc/boot/${target}" + exit 1 +} + +cp ${KSRC}/arch/powerpc/boot/${target} ${ofile} + +CROSS=powerpc-linux-gnu- + +echo "+ building DOL" +load=$(${CROSS}readelf -l "$ofile" | perl -lane'printf"%08x\n",hex($F[3])+0x80000000 if /LOAD/;') +echo " LOAD: $load" +entry=$(${CROSS}readelf -l "$ofile" | perl -lane'printf"%08x\n",hex($F[2])+0x80000000 if /Entry point/;') +echo " EP : $entry" + +${CROSS}objcopy -O binary -R .comment -R .shstrtab -R .symtab -R .strtab -R .gnu.attributes ${ofile} ${ofile}.bin +doltool -c ${ofile}.bin $load $entry +doltool -i ${ofile}.dol +echo ""