Skip to content

Instantly share code, notes, and snippets.

@YourWishes
Forked from nepnep1111/Dockerfile
Last active February 4, 2026 00:48
Show Gist options
  • Select an option

  • Save YourWishes/eac928e3b9e37cffc3a5150ebb4ea66c to your computer and use it in GitHub Desktop.

Select an option

Save YourWishes/eac928e3b9e37cffc3a5150ebb4ea66c to your computer and use it in GitHub Desktop.
DSpico Firmware Builder
#!/bin/bash
sudo docker build -t dspico:latest .
CONTAINER_ID=$(sudo docker create dspico:latest)
mkdir -p ./output ./output/pico ./output/sdcard/_pico
sudo docker cp ${CONTAINER_ID}:/opt/pico-launcher/_pico ./output/sdcard/
sudo docker cp ${CONTAINER_ID}:/opt/pico-launcher/LAUNCHER.nds ./output/sdcard/_picoboot.nds
sudo docker cp ${CONTAINER_ID}:/opt/dspico-firmware/build/DSpico.uf2 ./output/pico/DSpico.uf2
sudo docker cp ${CONTAINER_ID}:/opt/pico-loader/picoLoader7.bin ./output/sdcard/_pico/picoLoader7.bin
sudo docker cp ${CONTAINER_ID}:/opt/pico-loader/picoLoader9_DSPICO.bin ./output/sdcard/_pico/picoLoader9.bin
sudo docker cp ${CONTAINER_ID}:/opt/pico-loader/data/aplist.bin ./output/sdcard/_pico/aplist.bin
sudo docker cp ${CONTAINER_ID}:/opt/pico-loader/data/savelist.bin ./output/sdcard/_pico/savelist.bin
sudo docker rm ${CONTAINER_ID}
FROM skylyrac/blocksds:slim-latest
RUN apt update && apt install -y \
build-essential \
cmake \
gcc-arm-none-eabi \
git \
python3
ENV DLDITOOL=/opt/wonderful/thirdparty/blocksds/core/tools/dlditool/dlditool
ENV DOTNET_ROOT=/opt/dotnet
WORKDIR /opt
RUN mkdir -p dotnet && curl -s -L https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.308/dotnet-sdk-9.0.308-linux-x64.tar.gz | tar xzf - -C dotnet
ENV PATH="/opt/dotnet:${PATH}"
RUN git clone https://github.com/Gericom/DSRomEncryptor.git
RUN git clone https://github.com/LNH-team/dspico-bootloader.git
RUN git clone https://github.com/LNH-team/dspico-dldi.git
RUN git clone https://github.com/edo9300/dspico-firmware.git
RUN git clone https://github.com/LNH-team/dspico-wrfuxxed.git
RUN git clone https://github.com/LNH-team/pico-loader.git
RUN git clone https://github.com/LNH-team/pico-launcher.git
RUN cd /opt/dspico-dldi && make
RUN cd /opt/dspico-bootloader && git submodule update --init && make
RUN $DLDITOOL /opt/dspico-dldi/DSpico.dldi /opt/dspico-bootloader/BOOTLOADER.nds
RUN cd /opt/DSRomEncryptor && /opt/dotnet/dotnet build
RUN ls -l
COPY biosnds7.rom biosdsi7.rom /opt/DSRomEncryptor/DSRomEncryptor/bin/Debug/net9.0/
RUN /opt/DSRomEncryptor/DSRomEncryptor/bin/Debug/net9.0/DSRomEncryptor /opt/dspico-bootloader/BOOTLOADER.nds /opt/dspico-firmware/roms/default.nds
RUN cd /opt/dspico-wrfuxxed && make
RUN $DLDITOOL /opt/dspico-dldi/DSpico.dldi /opt/dspico-wrfuxxed/uartBufv060.bin
RUN cd /opt/dspico-firmware && git submodule update --init
RUN cd /opt/dspico-firmware/pico-sdk && git submodule update --init
COPY wrfu.srl /opt/dspico-firmware/roms/dsimode.nds
COPY default.gcd /opt/dspico-firmware/roms/ntrbootdsi.nds
COPY boot9strap_ntr.firm /opt/dspico-firmware/roms/ntrboot.nds
RUN cp /opt/dspico-wrfuxxed/uartBufv060.bin /opt/dspico-firmware/data
RUN sed -i 's/^.*DSPICO_ENABLE_WRFUXXED.*$/ DSPICO_ENABLE_WRFUXXED/' /opt/dspico-firmware/CMakeLists.txt
RUN chmod +x /opt/dspico-firmware/compile.sh
RUN cd /opt/dspico-firmware && ./compile.sh
RUN cd /opt/pico-loader && git submodule update --init && PATH="/opt/dotnet:$PATH" make
RUN cd /opt/pico-launcher && git submodule update --init && make
WORKDIR /build
a3aa751eb6bdaaf8a827ba9e03576a6f1ab0f547 biosdsi7.rom
24f67bdea115a2c847c8813a262502ee1607b7df biosnds7.rom
2d65fb7a0c62a4f08954b98c95f42b804fccfd26 wrfu.srl
eca89918bbff09090a43e67f2805d9743e2ac343 default.gcd
26bf0b603ec1c72fa648b27c5d547de05d447748 boot9strap_ntr.firm
@YourWishes
Copy link
Author

Builds pico-loader also, copies output files for immediate prep to device.

  1. Setup your files mentioned in files.sha1, most can be found from public git repos but some you need to dump yourself.
  2. Take the Dockerfile and build.sh, run chmod +x on your build.sh, execute it.
  3. Let process run, takes a while, probably need to execute as sudo on most distros.
  4. output dir created with sdcard and pico folders, pico folder contains the uf2 for the DS Pico itself, sdcard output contains predefined directory for SD card. I tested with exFAT to no success, worked fine with FAT32.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment