ci/docker: add nintendo switch buildroot image

This commit is contained in:
itsmattkc committed 2026-04-24 23:39:45 -07:00
1 parent 9c44c4e4a8
commit 49a05a2be3
35 files changed
+28319 -50

No files matched your search

+5 -2
View File
@@ -33,6 +33,9 @@ jobs:
- os: raspberrypizero2w
arch: aarch64
artifact: vanilla-raspberrypizero2w-image.zip
- os: nintendoswitch
arch: aarch64
artifact: vanilla-nintendoswitch-image.zip
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
@@ -64,8 +67,8 @@ jobs:
run: |
tar czf ${{ matrix.platform.artifact }} -C "${{ github.workspace }}/build" .
- name: Archive (Windows/macOS/Raspberry Pi)
if: ${{ matrix.platform.os == 'windows' || matrix.platform.os == 'macos' || matrix.platform.os == 'raspberrypi0w' || matrix.platform.os == 'raspberrypizero2w' }}
- name: Archive (Windows/macOS/Raspberry Pi/Nintendo Switch)
if: ${{ matrix.platform.os == 'windows' || matrix.platform.os == 'macos' || matrix.platform.os == 'raspberrypi0w' || matrix.platform.os == 'raspberrypizero2w' || matrix.platform.os == 'nintendoswitch' }}
run: |
cd build
zip -r ../${{ matrix.platform.artifact }} .
+11
View File
@@ -0,0 +1,11 @@
#!/bin/sh
set -e
TARGET_DIR="$1"
grep -q '/usr/bin/vanilla-wrapper' "$TARGET_DIR/etc/inittab" || \
sed -i '/^::sysinit:\/etc\/init\.d\/rcS/a ::once:/usr/bin/vanilla-wrapper' \
"$TARGET_DIR/etc/inittab"
grep -q '/mnt' "$TARGET_DIR/etc/fstab" || \
echo "/dev/mmcblk0p1 /mnt vfat defaults 0 0" >> "$TARGET_DIR/etc/fstab"
+1
View File
@@ -0,0 +1 @@
/mnt/switchroot/vanilla/data
@@ -0,0 +1,4 @@
Section "Monitor"
Identifier "DFP-0"
Option "Rotate" "left"
EndSection
+18
View File
@@ -0,0 +1,18 @@
pcm.!default {
type asym
playback.pcm {
type hw
card tegrasndt210ref
device 0
}
capture.pcm {
type hw
card tegrasndt210ref
device 1 # <-- replace with the DMIC subdevice you found
}
}
ctl.!default {
type hw
card tegrasndt210ref
}
+11
View File
@@ -0,0 +1,11 @@
#!/bin/sh
case "$1" in
start)
# Wait for the device, with a timeout
for i in $(seq 1 50); do
[ -b /dev/mmcblk0p1 ] && break
usleep 100000
done
mount /dev/mmcblk0p1 2>/dev/null || mount -a
;;
esac
+26
View File
@@ -0,0 +1,26 @@
#!/bin/sh
#
# Restore ALSA mixer state at boot
#
ALSACTL=/usr/sbin/alsactl
ASOUND_STATE=/var/lib/alsa/asound.state
case "$1" in
start)
printf "Restoring ALSA state: "
$ALSACTL -f $ASOUND_STATE restore && echo "OK" || echo "FAIL"
;;
stop)
# intentionally NOT storing on shutdown — see note below
;;
restart|reload)
"$0" start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
;;
esac
exit 0
+19
View File
@@ -0,0 +1,19 @@
#!/bin/sh
case "$1" in
start)
# Run joycond to provide virtual combined joycon device
/usr/bin/joycond &
;;
stop)
killall joycond 2>/dev/null
;;
restart)
"$0" stop
"$0" start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
;;
esac
+15
View File
@@ -0,0 +1,15 @@
#!/bin/sh
# Listen for power button presses, in which case quit Vanilla (which should in turn reboot the Switch)
DEV=/dev/input/event0
APP=vanilla
evtest "$DEV" 2>/dev/null | while read -r line; do
case "$line" in
*KEY_SLEEP*,\ value\ 1*)
pid="$(pidof "$APP" | awk '{print $1}')"
[ -n "$pid" ] && kill -TERM "$pid"
;;
esac
done
+16
View File
@@ -0,0 +1,16 @@
#!/bin/sh
# Listen for volume button presses, in which case increase/decrease volume in ALSA
DEV=/dev/input/event5
evtest "$DEV" 2>/dev/null | while read -r line; do
case "$line" in
*KEY_VOLUMEDOWN*,\ value\ 1*)
amixer sset 'x Speaker' 5%- >/dev/null
;;
*KEY_VOLUMEUP*,\ value\ 1*)
amixer sset 'x Speaker' 5%+ unmute >/dev/null
;;
esac
done
+43
View File
@@ -0,0 +1,43 @@
#!/bin/sh
# Buildroot doesn't allow us to have a ld.conf.so.d so force the LD_LIBRARY_PATH here
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/lib/aarch64-linux-gnu/tegra:/usr/lib/aarch64-linux-gnu/tegra-egl"
export DISPLAY=:0
export SDL_VIDEODRIVER=x11
# Listen for power button presses
/usr/bin/vanilla-nx-power-btn &
POWER_BTN_WATCHER_PID=$!
/usr/bin/vanilla-nx-volume-btn &
VOLUME_BTN_WATCHER_PID=$!
# Ensure watcher is closed
cleanup() {
kill "$POWER_BTN_WATCHER_PID" 2>/dev/null
kill "$VOLUME_BTN_WATCHER_PID" 2>/dev/null
}
trap cleanup EXIT
# Start X
X "$DISPLAY" -nolisten tcp vt1 &
X_PID=$!
# Wait until X is responsive
for i in 1 2 3 4 5 6 7 8 9 10; do
xset q >/dev/null 2>&1 && break
sleep 1
done
# Run Vanilla in foreground
/usr/bin/vanilla > /vanilla.log 2>&1
APP_RC=$?
# Clean up X
kill "$X_PID" 2>/dev/null
wait "$X_PID" 2>/dev/null
# Reboot when app exits
reboot -f
# Fallback if reboot fails
exit "$APP_RC"
@@ -0,0 +1,191 @@
# Use case Configuration for Nintendo Switch
SectionVerb {
EnableSequence [
cdev "hw:tegrasndt210ref"
cset "name='x OUT MIXL DAC L1 Switch' off"
cset "name='x OUT MIXR DAC R1 Switch' off"
cset "name='x SPK MIXL DAC L1 Switch' off"
cset "name='x SPK MIXR DAC R1 Switch' off"
cset "name='ADMAIF1 Mux' I2S1"
cset "name='I2S1 Mux' ADMAIF1"
cset "name='I2S1 Sample Rate' 48000"
]
DisableSequence [
cdev "hw:tegrasndt210ref"
cset "name='x OUT MIXL DAC L1 Switch' off"
cset "name='x OUT MIXR DAC R1 Switch' off"
cset "name='x SPK MIXL DAC L1 Switch' off"
cset "name='x SPK MIXR DAC R1 Switch' off"
cset "name='I2S1 Sample Rate' 0"
]
# ALSA PCM
Value {
}
}
SectionDevice."Headphones" {
Comment "Headphones playback"
ConflictingDevice [
"Speaker"
]
EnableSequence [
cdev "hw:tegrasndt210ref"
cset "name='x HPO MIX HPVOL Switch' on"
cset "name='x HP L Playback Switch' on"
cset "name='x HP R Playback Switch' on"
cset "name='x OUT MIXL DAC L1 Switch' on"
cset "name='x OUT MIXR DAC R1 Switch' on"
cset "name='x Stereo DAC MIXL DAC L1 Switch' on"
cset "name='x Stereo DAC MIXR DAC R1 Switch' on"
cset "name='x DAC1 HP Playback Volume' 170,170"
cset "name='x HP Playback Volume' 31,31"
cset "name='x HP Channel Switch' on,on"
]
DisableSequence [
cdev "hw:tegrasndt210ref"
cset "name='x HP Playback Volume' 0,0"
cset "name='x HP Channel Switch' off,off"
cset "name='x DAC1 HP Playback Volume' 0,0"
cset "name='x OUT MIXL DAC L1 Switch' off"
cset "name='x OUT MIXR DAC R1 Switch' off"
cset "name='x HPO MIX HPVOL Switch' off"
cset "name='x HP L Playback Switch' off"
cset "name='x HP R Playback Switch' off"
cset "name='x Stereo DAC MIXL DAC L1 Switch' off"
cset "name='x Stereo DAC MIXR DAC R1 Switch' off"
]
Value {
PlaybackPCM "hw:tegrasndt210ref"
PlaybackChannels "2"
PlaybackRate "48000"
PlaybackVolume "x DAC1 HP Playback Volume"
PlaybackSwitch "x HP Channel Switch"
JackControl "x Headphone Jack"
}
}
SectionDevice."Speaker" {
Comment "Speaker playback"
ConflictingDevice [
"Headphones"
]
EnableSequence [
cdev "hw:tegrasndt210ref"
cset "name='x SPK MIXL DAC L1 Switch' on"
cset "name='x SPK MIXR DAC R1 Switch' on"
cset "name='x Speaker Channel Switch' on,on"
cset "name='x SPOL MIX SPKVOL L Switch' on"
cset "name='x SPOR MIX SPKVOL R Switch' on"
cset "name='x Stereo DAC MIXL DAC L1 Switch' on"
cset "name='x Stereo DAC MIXR DAC R1 Switch' on"
cset "name='x DAC1 Speaker Playback Volume' 148,148"
cset "name='x Speaker Playback Volume' 35,35"
cset "name='x Speaker L Playback Switch' on"
cset "name='x Speaker R Playback Switch' on"
]
DisableSequence [
cdev "hw:tegrasndt210ref"
cset "name='x Speaker L Playback Switch' off"
cset "name='x Speaker R Playback Switch' off"
cset "name='x Speaker Channel Switch' off,off"
cset "name='x Speaker Playback Volume' 35,35"
cset "name='x DAC1 Speaker Playback Volume' 0,0"
cset "name='x SPK MIXL DAC L1 Switch' off"
cset "name='x SPK MIXR DAC R1 Switch' off"
cset "name='x SPOL MIX SPKVOL L Switch' off"
cset "name='x SPOR MIX SPKVOL R Switch' off"
cset "name='x Stereo DAC MIXL DAC L1 Switch' off"
cset "name='x Stereo DAC MIXR DAC R1 Switch' off"
]
Value {
PlaybackPCM "hw:tegrasndt210ref"
PlaybackChannels "2"
PlaybackRate "48000"
PlaybackVolume "x DAC1 Speaker Playback Volume"
PlaybackSwitch "x Speaker Channel Switch"
}
}
SectionDevice."HeadsetMic" {
Comment "Headset Microphone"
ConflictingDevice [
"DummyMic"
]
EnableSequence [
cdev "hw:tegrasndt210ref"
cset "name='x IN1 Boost' 5"
cset "name='x Stereo ADC MIXL ADC1 Switch' on"
cset "name='x ADC IF1 Data Switch' 2"
cset "name='x ADC MIC Capture Volume' 47,0"
cset "name='x ADC Capture Switch' on,off"
cset "name='x RECMIXL BST1 Switch' on"
]
DisableSequence [
cdev "hw:tegrasndt210ref"
cset "name='x RECMIXL BST1 Switch' off"
cset "name='x Stereo ADC MIXL ADC1 Switch' off"
cset "name='x ADC MIC Capture Volume' 0,0"
cset "name='x ADC Capture Switch' off"
cset "name='x ADC IF1 Data Switch' 0"
]
Value {
CapturePCM "hw:tegrasndt210ref"
CapturePriority "100"
CaptureChannels "2"
CaptureRate "48000"
CaptureVolume "x ADC MIC Capture Volume"
CaptureSwitch "x ADC Capture Switch"
JackControl "x Mic Jack"
}
}
SectionDevice."DummyMic" {
Comment "Dummy Microphone"
ConflictingDevice [
"HeadsetMic"
]
EnableSequence [
cdev "hw:tegrasndt210ref"
]
DisableSequence [
cdev "hw:tegrasndt210ref"
]
Value {
CapturePCM "hw:tegrasndt210ref"
CapturePriority "100"
CaptureChannels "2"
CaptureRate "48000"
}
}
@@ -0,0 +1,8 @@
SectionUseCase."HiFi" {
File "HiFi"
Comment "Play HiFi quality Music"
}
SectionDefaults [
cdev "hw:tegrasndt210ref"
]
@@ -0,0 +1,173 @@
# Use case Configuration for Nintendo Switch
SectionVerb {
EnableSequence [
cset "name='x OUT MIXL DAC L1 Switch' off"
cset "name='x OUT MIXR DAC R1 Switch' off"
cset "name='x SPK MIXL DAC L1 Switch' off"
cset "name='x SPK MIXR DAC R1 Switch' off"
cset "name='ADMAIF1 Mux' I2S1"
cset "name='I2S1 Mux' ADMAIF1"
cset "name='I2S1 Sample Rate' 48000"
]
DisableSequence [
cset "name='x OUT MIXL DAC L1 Switch' off"
cset "name='x OUT MIXR DAC R1 Switch' off"
cset "name='x SPK MIXL DAC L1 Switch' off"
cset "name='x SPK MIXR DAC R1 Switch' off"
cset "name='I2S1 Sample Rate' 0"
]
# ALSA PCM
Value {
}
}
SectionDevice."Headphones" {
Comment "Headphones playback"
ConflictingDevice [
"Speaker"
]
EnableSequence [
cset "name='x HPO MIX HPVOL Switch' on"
cset "name='x HP L Playback Switch' on"
cset "name='x HP R Playback Switch' on"
cset "name='x OUT MIXL DAC L1 Switch' on"
cset "name='x OUT MIXR DAC R1 Switch' on"
cset "name='x Stereo DAC MIXL DAC L1 Switch' on"
cset "name='x Stereo DAC MIXR DAC R1 Switch' on"
cset "name='x DAC1 HP Playback Volume' 170,170"
cset "name='x HP Playback Volume' 31,31"
cset "name='x HP Channel Switch' on,on"
]
DisableSequence [
cset "name='x HP Playback Volume' 0,0"
cset "name='x HP Channel Switch' off,off"
cset "name='x DAC1 HP Playback Volume' 0,0"
cset "name='x OUT MIXL DAC L1 Switch' off"
cset "name='x OUT MIXR DAC R1 Switch' off"
cset "name='x HPO MIX HPVOL Switch' off"
cset "name='x HP L Playback Switch' off"
cset "name='x HP R Playback Switch' off"
cset "name='x Stereo DAC MIXL DAC L1 Switch' off"
cset "name='x Stereo DAC MIXR DAC R1 Switch' off"
]
Value {
PlaybackPCM "hw:${CardId}"
PlaybackChannels "2"
PlaybackRate "48000"
PlaybackVolume "x DAC1 HP Playback Volume"
PlaybackSwitch "x HP Channel Switch"
JackControl "x Headphone Jack"
}
}
SectionDevice."Speaker" {
Comment "Speaker playback"
ConflictingDevice [
"Headphones"
]
EnableSequence [
cset "name='x SPK MIXL DAC L1 Switch' on"
cset "name='x SPK MIXR DAC R1 Switch' on"
cset "name='x Speaker Channel Switch' on,on"
cset "name='x SPOL MIX SPKVOL L Switch' on"
cset "name='x SPOR MIX SPKVOL R Switch' on"
cset "name='x Stereo DAC MIXL DAC L1 Switch' on"
cset "name='x Stereo DAC MIXR DAC R1 Switch' on"
cset "name='x DAC1 Speaker Playback Volume' 148,148"
cset "name='x Speaker Playback Volume' 35,35"
cset "name='x Speaker L Playback Switch' on"
cset "name='x Speaker R Playback Switch' on"
]
DisableSequence [
cset "name='x Speaker L Playback Switch' off"
cset "name='x Speaker R Playback Switch' off"
cset "name='x Speaker Channel Switch' off,off"
cset "name='x Speaker Playback Volume' 35,35"
cset "name='x DAC1 Speaker Playback Volume' 0,0"
cset "name='x SPK MIXL DAC L1 Switch' off"
cset "name='x SPK MIXR DAC R1 Switch' off"
cset "name='x SPOL MIX SPKVOL L Switch' off"
cset "name='x SPOR MIX SPKVOL R Switch' off"
cset "name='x Stereo DAC MIXL DAC L1 Switch' off"
cset "name='x Stereo DAC MIXR DAC R1 Switch' off"
]
Value {
PlaybackPCM "hw:${CardId}"
PlaybackChannels "2"
PlaybackRate "48000"
PlaybackVolume "x DAC1 Speaker Playback Volume"
PlaybackSwitch "x Speaker Channel Switch"
}
}
SectionDevice."HeadsetMic" {
Comment "Headset Microphone"
ConflictingDevice [
"DummyMic"
]
EnableSequence [
cset "name='x IN1 Boost' 5"
cset "name='x Stereo ADC MIXL ADC1 Switch' on"
cset "name='x ADC IF1 Data Switch' 2"
cset "name='x ADC MIC Capture Volume' 47,0"
cset "name='x ADC Capture Switch' on,off"
cset "name='x RECMIXL BST1 Switch' on"
]
DisableSequence [
cset "name='x RECMIXL BST1 Switch' off"
cset "name='x Stereo ADC MIXL ADC1 Switch' off"
cset "name='x ADC MIC Capture Volume' 0,0"
cset "name='x ADC Capture Switch' off"
cset "name='x ADC IF1 Data Switch' 0"
]
Value {
CapturePCM "hw:${CardId}"
CapturePriority "100"
CaptureChannels "2"
CaptureRate "48000"
CaptureVolume "x ADC MIC Capture Volume"
CaptureSwitch "x ADC Capture Switch"
JackControl "x Mic Jack"
}
}
SectionDevice."DummyMic" {
Comment "Dummy Microphone"
ConflictingDevice [
"HeadsetMic"
]
EnableSequence [
]
DisableSequence [
]
Value {
CapturePCM "hw:${CardId}"
CapturePriority "100"
CaptureChannels "2"
CaptureRate "48000"
}
}
@@ -0,0 +1,6 @@
Syntax 2
SectionUseCase."HiFi" {
File "/tegra-snd-t210r/HiFi.conf"
Comment "Play HiFi quality Music"
}
File diff suppressed because it is too large. Load diff
@@ -2,18 +2,26 @@ BR2_aarch64=y
BR2_cortex_a57=y
BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_9=y
BR2_TOOLCHAIN_BUILDROOT_CXX=y
BR2_TOOLCHAIN_GLIBC_GCONV_LIBS_COPY=y
BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y
BR2_TARGET_GENERIC_ROOT_PASSWD="root"
# BR2_TARGET_GENERIC_GETTY is not set
# BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW is not set
BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_VANILLA_PATH)/rootfs $(BR2_EXTERNAL_VANILLA_PATH)/board/nx/rootfs/"
BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_VANILLA_PATH)/board/nx/rootfs/"
BR2_ROOTFS_POST_BUILD_SCRIPT="$(BR2_EXTERNAL_VANILLA_PATH)/board/nx/post_build.sh"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_GIT=y
BR2_LINUX_KERNEL_CUSTOM_REPO_URL="https://github.com/CTCaer/switch-l4t-kernel-4.9.git"
BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="linux-5.1.2"
BR2_LINUX_KERNEL_DEFCONFIG="tegra_linux"
BR2_PACKAGE_ALSA_UTILS=y
# BR2_PACKAGE_ALSA_UTILS_ALSAMIXER is not set
BR2_PACKAGE_ALSA_UTILS_AMIXER=y
BR2_PACKAGE_FFMPEG=y
# BR2_PACKAGE_FFMPEG_FFMPEG is not set
BR2_PACKAGE_FFMPEG_SWSCALE=y
BR2_PACKAGE_FFMPEG_ENCODERS="png"
BR2_PACKAGE_FFMPEG_DECODERS="h264"
BR2_PACKAGE_FFMPEG_MUXERS="image2 mp4"
BR2_PACKAGE_FFMPEG_DEMUXERS=""
BR2_PACKAGE_FFMPEG_PARSERS=""
@@ -22,18 +30,25 @@ BR2_PACKAGE_FFMPEG_PROTOCOLS=""
BR2_PACKAGE_FFMPEG_FILTERS=""
# BR2_PACKAGE_FFMPEG_INDEVS is not set
# BR2_PACKAGE_FFMPEG_OUTDEVS is not set
BR2_PACKAGE_KMSCUBE=y
BR2_PACKAGE_MESA3D=y
BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_TEGRA=y
BR2_PACKAGE_MESA3D_OPENGL_EGL=y
BR2_PACKAGE_MESA3D_OPENGL_ES=y
BR2_PACKAGE_LIBGLVND=y
BR2_PACKAGE_SDL2=y
BR2_PACKAGE_SDL2_KMSDRM=y
BR2_PACKAGE_SDL2_X11=y
BR2_PACKAGE_SDL2_OPENGLES=y
BR2_PACKAGE_SDL2_IMAGE=y
BR2_PACKAGE_SDL2_TTF=y
BR2_PACKAGE_ALSA_LIB=y
BR2_PACKAGE_XORG7=y
BR2_PACKAGE_XSERVER_XORG_SERVER=y
BR2_PACKAGE_XLIB_LIBXAW=y
BR2_PACKAGE_XLIB_LIBXCOMPOSITE=y
BR2_PACKAGE_XAPP_XINPUT=y
BR2_PACKAGE_XAPP_XRANDR=y
BR2_PACKAGE_XDRIVER_XF86_INPUT_LIBINPUT=y
BR2_PACKAGE_EVTEST=y
BR2_PACKAGE_LIBXCRYPT=y
BR2_PACKAGE_OPENSSL=y
BR2_PACKAGE_LIBGUDEV=y
BR2_PACKAGE_LIBUSB=y
BR2_PACKAGE_MTDEV=y
BR2_PACKAGE_LIBXML2=y
BR2_PACKAGE_LIBNL=y
BR2_PACKAGE_READLINE=y
@@ -44,4 +59,9 @@ BR2_TARGET_ROOTFS_CPIO_UIMAGE=y
BR2_PACKAGE_HOST_E2FSPROGS=y
BR2_PACKAGE_NEXMON=y
BR2_PACKAGE_VANILLA=y
# BR2_PACKAGE_VANILLA_USE_DRM is not set
BR2_PACKAGE_VANILLA_USE_LOCAL=y
BR2_PACKAGE_VANILLA_LOCAL_PATH="/home/matt/src/vanilla"
BR2_PACKAGE_NVIDIA_TEGRA_BSP=y
BR2_PACKAGE_JOYCOND=y
BR2_LINUX_TEGRA_T210_DEPS=y
+1
View File
@@ -2,3 +2,4 @@ source "$BR2_EXTERNAL_VANILLA_PATH/package/nexmon/Config.in"
source "$BR2_EXTERNAL_VANILLA_PATH/package/rpi-ffmpeg/Config.in"
source "$BR2_EXTERNAL_VANILLA_PATH/package/vanilla/Config.in"
source "$BR2_EXTERNAL_VANILLA_PATH/package/nvidia-tegra-bsp/Config.in"
source "$BR2_EXTERNAL_VANILLA_PATH/package/joycond/Config.in"
+6
View File
@@ -0,0 +1,6 @@
config BR2_PACKAGE_JOYCOND
bool "joycond"
help
Userspace daemon to combine joy-cons from the hid-nintendo kernel driver
https://github.com/DanielOgorchock/joycond.git
+6
View File
@@ -0,0 +1,6 @@
JOYCOND_VERSION = master
JOYCOND_SITE = $(call github,DanielOgorchock,joycond,$(JOYCOND_VERSION))
JOYCOND_LICENSE = GPL-3.0
JOYCOND_LICENSE_FILES = LICENSE
$(eval $(cmake-package))
@@ -0,0 +1,13 @@
--- a/buildtools/b43/assembler/Makefile
+++ b/buildtools/b43/assembler/Makefile
@@ -24,8 +24,8 @@
-Wshadow -Wpointer-arith
SPARSEFLAGS = $(CFLAGS) -D__transparent_union__=__unused__ -D_STRING_ARCH_unaligned=1 \
-D__builtin_stpcpy=stpcpy
-#LDFLAGS += -lfl
-LDFLAGS += -ll
+LDFLAGS += -lfl
+#LDFLAGS += -ll
BIN = b43-asm.bin
SRCS = parser.c scanner.c main.c initvals.c util.c args.c
+15 -1
View File
@@ -1,5 +1,5 @@
NEXMON_VERSION = master
NEXMON_SITE = $(call github,seemoo-lab,nexmon,$(NEXMON_VERSION))
NEXMON_SITE = $(call github,vanilla-wiiu,nexmon,$(NEXMON_VERSION))
NEXMON_LICENSE = GPL-3.0
NEXMON_LICENSE_FILES = LICENSE.txt
@@ -9,5 +9,19 @@ LD_MINOR_VER := $(word 2,$(LD_VERSION))
NEXMON_MODULE_SUBDIRS = patches/driver/brcmfmac_$(LD_MAJOR_VER).$(LD_MINOR_VER).y-nexmon
define NEXMON_BUILD_CMDS
$(TARGET_MAKE_ENV)
. $(@D)/setup_env.sh && \
$(MAKE1) -C $(@D)
endef
define NEXMON_INSTALL_TARGET_CMDS
$(TARGET_MAKE_ENV) \
. $(@D)/setup_env.sh && \
$(MAKE1) -C $(@D)/patches/bcm4356/7_35_101_5_sta/wiiu
cp $(@D)/patches/bcm4356/7_35_101_5_sta/wiiu/brcmfmac4356-pcie.bin \
$(TARGET_DIR)/lib/firmware/brcm/brcmfmac4356A3-pcie.bin
endef
$(eval $(kernel-module))
$(eval $(generic-package))
@@ -1,60 +1,80 @@
NVIDIA_TEGRA_BSP_VERSION = 32.7.6
NVIDIA_TEGRA_BSP_DEBS = $(BR2_EXTERNAL_VANILLA_PATH)/package/nvidia-tegra-bsp/debs
NVIDIA_TEGRA_BSP_SITE = $(NVIDIA_TEGRA_BSP_DEBS)
NVIDIA_TEGRA_BSP_SITE_METHOD = local
NVIDIA_TEGRA_BSP_SITE = https://developer.nvidia.com/downloads/embedded/l4t/r32_release_v7.6/t210
NVIDIA_TEGRA_BSP_SOURCE = jetson-210_linux_r32.7.6_aarch64.tbz2
# Keep the Linux_for_Tegra/ top-level directory from the NVIDIA tarball.
# Without this, Buildroot may strip the first path component during extraction.
NVIDIA_TEGRA_BSP_STRIP_COMPONENTS = 0
# NVIDIA redistributability is restricted; do not mirror this package.
NVIDIA_TEGRA_BSP_REDISTRIBUTE = NO
NVIDIA_TEGRA_BSP_LICENSE = NVIDIA Tegra Linux Driver Package
NVIDIA_TEGRA_BSP_DEBS = $(@D)/Linux_for_Tegra/nv_tegra/l4t_deb_packages
#NVIDIA_TEGRA_BSP_PROVIDES = libegl libgles
TEGRA_TEGRA_DIR = /usr/lib/aarch64-linux-gnu/tegra
define NVIDIA_TEGRA_BSP_EXTRACT_DEB
cd $(TARGET_DIR) && ar p $(strip $(1)) data.tar.zst | tar --zstd -xf -
set -e; \
deb="$(strip $(1))"; \
data="$$(ar t "$$deb" | grep '^data\.tar' | head -n 1)"; \
echo "Extracting $$(basename "$$deb")"; \
case "$$data" in \
data.tar.zst) ar p "$$deb" "$$data" | tar --zstd -C $(TARGET_DIR) -xf - ;; \
data.tar.xz) ar p "$$deb" "$$data" | tar -xJ -C $(TARGET_DIR) -f - ;; \
data.tar.gz) ar p "$$deb" "$$data" | tar -xz -C $(TARGET_DIR) -f - ;; \
data.tar) ar p "$$deb" "$$data" | tar -x -C $(TARGET_DIR) -f - ;; \
*) echo "Unsupported deb payload: $$data in $$deb"; exit 1 ;; \
esac
endef
define NVIDIA_TEGRA_BSP_INSTALL_TARGET_CMDS
$(call NVIDIA_TEGRA_BSP_EXTRACT_DEB,$(wildcard $(NVIDIA_TEGRA_BSP_DEBS)/nvidia-l4t-core_*.deb))
$(call NVIDIA_TEGRA_BSP_EXTRACT_DEB,$(wildcard $(NVIDIA_TEGRA_BSP_DEBS)/nvidia-l4t-3d-core_*.deb))
$(call NVIDIA_TEGRA_BSP_EXTRACT_DEB,$(wildcard $(NVIDIA_TEGRA_BSP_DEBS)/nvidia-l4t-x11_*.deb))
$(call NVIDIA_TEGRA_BSP_EXTRACT_DEB,$(wildcard $(NVIDIA_TEGRA_BSP_DEBS)/nvidia-l4t-multimedia_*.deb))
$(call NVIDIA_TEGRA_BSP_EXTRACT_DEB,$(wildcard $(NVIDIA_TEGRA_BSP_DEBS)/nvidia-l4t-xusb-firmware_*.deb))
$(call NVIDIA_TEGRA_BSP_EXTRACT_DEB,$(wildcard $(NVIDIA_TEGRA_BSP_DEBS)/nvidia-l4t-firmware_*.deb))
$(call NVIDIA_TEGRA_BSP_EXTRACT_DEB,$(wildcard $(NVIDIA_TEGRA_BSP_DEBS)/nvidia-l4t-core_*.deb))
$(call NVIDIA_TEGRA_BSP_EXTRACT_DEB,$(wildcard $(NVIDIA_TEGRA_BSP_DEBS)/nvidia-l4t-3d-core_*.deb))
$(call NVIDIA_TEGRA_BSP_EXTRACT_DEB,$(wildcard $(NVIDIA_TEGRA_BSP_DEBS)/nvidia-l4t-x11_*.deb))
$(call NVIDIA_TEGRA_BSP_EXTRACT_DEB,$(wildcard $(NVIDIA_TEGRA_BSP_DEBS)/nvidia-l4t-multimedia_*.deb))
$(call NVIDIA_TEGRA_BSP_EXTRACT_DEB,$(wildcard $(NVIDIA_TEGRA_BSP_DEBS)/nvidia-l4t-xusb-firmware_*.deb))
$(call NVIDIA_TEGRA_BSP_EXTRACT_DEB,$(wildcard $(NVIDIA_TEGRA_BSP_DEBS)/nvidia-l4t-firmware_*.deb))
# Symlink tegra libs into standard lib path
for lib in $(TARGET_DIR)$(TEGRA_TEGRA_DIR)/*.so*; do \
ln -sf $(TEGRA_TEGRA_DIR)/$$(basename $$lib) \
$(TARGET_DIR)/usr/lib/aarch64-linux-gnu/$$(basename $$lib); \
done
# Symlink tegra libs into standard lib path
for lib in $(TARGET_DIR)$(TEGRA_TEGRA_DIR)/*.so*; do \
ln -sf $(TEGRA_TEGRA_DIR)/$$(basename $$lib) \
$(TARGET_DIR)/usr/lib/aarch64-linux-gnu/$$(basename $$lib); \
done
# GM20B firmware symlinks expected by the GPU driver
$(INSTALL) -d $(TARGET_DIR)/lib/firmware/gm20b
ln -sf ../tegra21x/nv_acr_ucode_prod.bin \
$(TARGET_DIR)/lib/firmware/gm20b/acr_ucode.bin
# GM20B firmware symlinks expected by the GPU driver
$(INSTALL) -d $(TARGET_DIR)/lib/firmware/gm20b
ln -sf ../tegra21x/nv_acr_ucode_prod.bin \
$(TARGET_DIR)/lib/firmware/gm20b/acr_ucode.bin
# A .deb may contain this but Buildroot will fail if it's present
rm -r $(TARGET_DIR)/etc/ld.so.conf.d
# A .deb may contain this but Buildroot will fail if it's present
rm -rf $(TARGET_DIR)/etc/ld.so.conf.d
endef
define NVIDIA_TEGRA_BSP_INSTALL_STAGING_CMDS
# EGL/GLES headers
if [ -d $(TARGET_DIR)/usr/include/EGL ]; then \
cp -a $(TARGET_DIR)/usr/include/EGL \
$(STAGING_DIR)/usr/include/; \
fi
if [ -d $(TARGET_DIR)/usr/include/GLES2 ]; then \
cp -a $(TARGET_DIR)/usr/include/GLES2 \
$(STAGING_DIR)/usr/include/; \
fi
# EGL/GLES headers
if [ -d $(TARGET_DIR)/usr/include/EGL ]; then \
cp -a $(TARGET_DIR)/usr/include/EGL \
$(STAGING_DIR)/usr/include/; \
fi
if [ -d $(TARGET_DIR)/usr/include/GLES2 ]; then \
cp -a $(TARGET_DIR)/usr/include/GLES2 \
$(STAGING_DIR)/usr/include/; \
fi
# EGL/GLES libs for linking
cp -a $(TARGET_DIR)$(TEGRA_TEGRA_DIR)/libEGL* $(STAGING_DIR)/usr/lib/
cp -a $(TARGET_DIR)$(TEGRA_TEGRA_DIR)/libGLES* $(STAGING_DIR)/usr/lib/
# EGL/GLES libs for linking
cp -a $(TARGET_DIR)$(TEGRA_TEGRA_DIR)/libEGL* $(STAGING_DIR)/usr/lib/
cp -a $(TARGET_DIR)$(TEGRA_TEGRA_DIR)/libGLES* $(STAGING_DIR)/usr/lib/
# pkg-config files
$(INSTALL) -d $(STAGING_DIR)/usr/lib/pkgconfig/
printf 'Name: egl\nDescription: NVIDIA Tegra EGL\nVersion: 1.5\nLibs: -lEGL\nCflags:\n' \
> $(STAGING_DIR)/usr/lib/pkgconfig/egl.pc
printf 'Name: glesv2\nDescription: NVIDIA Tegra GLES2\nVersion: 3.2\nLibs: -lGLESv2\nCflags:\n' \
> $(STAGING_DIR)/usr/lib/pkgconfig/glesv2.pc
# pkg-config files
$(INSTALL) -d $(STAGING_DIR)/usr/lib/pkgconfig/
printf 'Name: egl\nDescription: NVIDIA Tegra EGL\nVersion: 1.5\nLibs: -lEGL\nCflags:\n' \
> $(STAGING_DIR)/usr/lib/pkgconfig/egl.pc
printf 'Name: glesv2\nDescription: NVIDIA Tegra GLES2\nVersion: 3.2\nLibs: -lGLESv2\nCflags:\n' \
> $(STAGING_DIR)/usr/lib/pkgconfig/glesv2.pc
endef
$(eval $(generic-package))
@@ -0,0 +1,5 @@
# Locally calculated
sha256 54b199c9280ff8bf0f73a54a759645bd0eeeda7255d1c99310d5b7595f3ac066 xorg-server-1.20.14.tar.gz
sha512 37be65b3b1054816454c524eacb5ba25c00020abdb4f3580c91a18139cb9f2f9d2d3f22b3608a2242f73a5de2b6361e913fa8ba2cbc692772ccd800cf86e7b5f xorg-server-1.20.14.tar.gz
# Locally calculated
sha256 4cc0447a22635c7b2f1a93fec4aa94f1970fadeb72a063de006b51cf4963a06f COPYING
@@ -0,0 +1,199 @@
################################################################################
#
# xserver_xorg-server
#
################################################################################
XSERVER_XORG_SERVER_VERSION = 1.20.14
XSERVER_XORG_SERVER_SOURCE = xorg-server-$(XSERVER_XORG_SERVER_VERSION).tar.gz
XSERVER_XORG_SERVER_SITE = https://xorg.freedesktop.org/archive/individual/xserver
XSERVER_XORG_SERVER_LICENSE = MIT
XSERVER_XORG_SERVER_LICENSE_FILES = COPYING
XSERVER_XORG_SERVER_CPE_ID_VENDOR = x.org
XSERVER_XORG_SERVER_CPE_ID_PRODUCT = x_server
XSERVER_XORG_SERVER_SELINUX_MODULES = xdg xserver
XSERVER_XORG_SERVER_INSTALL_STAGING = YES
XSERVER_XORG_SERVER_DEPENDENCIES = \
xutil_util-macros \
xlib_libX11 \
xlib_libXau \
xlib_libXdmcp \
xlib_libXext \
xlib_libXfixes \
xlib_libXfont2 \
xlib_libXi \
xlib_libXrender \
xlib_libXres \
xlib_libXft \
xlib_libXcursor \
xlib_libXinerama \
xlib_libXrandr \
xlib_libXdamage \
xlib_libXxf86vm \
xlib_libxkbfile \
xlib_libxcvt \
xlib_xtrans \
xdata_xbitmaps \
xorgproto \
xkeyboard-config \
pixman \
mcookie \
host-pkgconf
# We force -O2 regardless of the optimization level chosen by the
# user, as the X.org server is known to trigger some compiler bugs at
# -Os on several architectures.
XSERVER_XORG_SERVER_CONF_OPTS = \
--disable-config-hal \
--enable-record \
--disable-xnest \
--disable-unit-tests \
--with-builder-addr=buildroot@buildroot.org \
CFLAGS="$(TARGET_CFLAGS) -Wno-array-bounds -I$(STAGING_DIR)/usr/include/pixman-1 -O2" \
--with-fontrootdir=/usr/share/fonts/X11/ \
--$(if $(BR2_PACKAGE_XSERVER_XORG_SERVER_XEPHYR),en,dis)able-xephyr \
--$(if $(BR2_PACKAGE_XSERVER_XORG_SERVER_XVFB),en,dis)able-xvfb
ifeq ($(BR2_PACKAGE_SYSTEMD),y)
XSERVER_XORG_SERVER_CONF_OPTS += \
--with-systemd-daemon \
--enable-systemd-logind
XSERVER_XORG_SERVER_DEPENDENCIES += \
systemd
else
XSERVER_XORG_SERVER_CONF_OPTS += \
--without-systemd-daemon \
--disable-systemd-logind
endif
ifeq ($(BR2_PACKAGE_XSERVER_XORG_SERVER_MODULAR),y)
XSERVER_XORG_SERVER_CONF_OPTS += --enable-xorg
XSERVER_XORG_SERVER_DEPENDENCIES += libpciaccess
ifeq ($(BR2_PACKAGE_LIBDRM),y)
XSERVER_XORG_SERVER_DEPENDENCIES += libdrm
XSERVER_XORG_SERVER_CONF_OPTS += --enable-libdrm
else
XSERVER_XORG_SERVER_CONF_OPTS += --disable-libdrm
endif
else
XSERVER_XORG_SERVER_CONF_OPTS += --disable-xorg
endif
ifeq ($(BR2_PACKAGE_XSERVER_XORG_SERVER_KDRIVE),y)
XSERVER_XORG_SERVER_CONF_OPTS += \
--enable-kdrive \
--disable-glx \
--disable-dri
ifeq ($(BR2_PACKAGE_XSERVER_XORG_SERVER_XEPHYR),y)
XSERVER_XORG_SERVER_DEPENDENCIES += \
xcb-util-image \
xcb-util-keysyms \
xcb-util-renderutil \
xcb-util-wm
endif
else # modular
XSERVER_XORG_SERVER_CONF_OPTS += --disable-kdrive
endif
ifeq ($(BR2_PACKAGE_HAS_LIBGL),y)
XSERVER_XORG_SERVER_CONF_OPTS += --enable-dri --enable-glx
XSERVER_XORG_SERVER_DEPENDENCIES += libgl
else
XSERVER_XORG_SERVER_CONF_OPTS += --disable-dri --disable-glx
endif
# Optional packages
ifeq ($(BR2_PACKAGE_HAS_UDEV),y)
XSERVER_XORG_SERVER_DEPENDENCIES += udev
XSERVER_XORG_SERVER_CONF_OPTS += --enable-config-udev
# udev kms support depends on libdrm and dri2
ifeq ($(BR2_PACKAGE_LIBDRM),y)
XSERVER_XORG_SERVER_CONF_OPTS += --enable-config-udev-kms
else
XSERVER_XORG_SERVER_CONF_OPTS += --disable-config-udev-kms
endif
endif
ifeq ($(BR2_PACKAGE_DBUS),y)
XSERVER_XORG_SERVER_DEPENDENCIES += dbus
XSERVER_XORG_SERVER_CONF_OPTS += --enable-config-dbus
endif
ifeq ($(BR2_PACKAGE_FREETYPE),y)
XSERVER_XORG_SERVER_DEPENDENCIES += freetype
endif
ifeq ($(BR2_PACKAGE_LIBUNWIND),y)
XSERVER_XORG_SERVER_DEPENDENCIES += libunwind
XSERVER_XORG_SERVER_CONF_OPTS += --enable-libunwind
else
XSERVER_XORG_SERVER_CONF_OPTS += --disable-libunwind
endif
ifneq ($(BR2_PACKAGE_XLIB_LIBXVMC),y)
XSERVER_XORG_SERVER_CONF_OPTS += --disable-xvmc
endif
ifeq ($(BR2_PACKAGE_XLIB_LIBXCOMPOSITE),y)
XSERVER_XORG_SERVER_DEPENDENCIES += xlib_libXcomposite
else
XSERVER_XORG_SERVER_CONF_OPTS += --disable-composite
endif
ifeq ($(BR2_PACKAGE_XSERVER_XORG_SERVER_MODULAR),y)
XSERVER_XORG_SERVER_CONF_OPTS += --enable-dri2
ifeq ($(BR2_PACKAGE_XLIB_LIBXSHMFENCE),y)
XSERVER_XORG_SERVER_DEPENDENCIES += xlib_libxshmfence
XSERVER_XORG_SERVER_CONF_OPTS += --enable-dri3
ifeq ($(BR2_PACKAGE_HAS_LIBEGL)$(BR2_PACKAGE_HAS_LIBGL)$(BR2_PACKAGE_LIBEPOXY),yyy)
XSERVER_XORG_SERVER_DEPENDENCIES += libepoxy
XSERVER_XORG_SERVER_CONF_OPTS += --enable-glamor
else
XSERVER_XORG_SERVER_CONF_OPTS += --disable-glamor
endif
else
XSERVER_XORG_SERVER_CONF_OPTS += --disable-dri3 --disable-glamor
endif
else
XSERVER_XORG_SERVER_CONF_OPTS += --disable-dri2 --disable-dri3 --disable-glamor
endif
ifeq ($(BR2_PACKAGE_XLIB_LIBXSCRNSAVER),y)
XSERVER_XORG_SERVER_DEPENDENCIES += xlib_libXScrnSaver
XSERVER_XORG_SERVER_CONF_OPTS += --enable-screensaver
else
XSERVER_XORG_SERVER_CONF_OPTS += --disable-screensaver
endif
ifeq ($(BR2_PACKAGE_OPENSSL),y)
XSERVER_XORG_SERVER_CONF_OPTS += --with-sha1=libcrypto
XSERVER_XORG_SERVER_DEPENDENCIES += openssl
else ifeq ($(BR2_PACKAGE_LIBGCRYPT),y)
XSERVER_XORG_SERVER_CONF_OPTS += --with-sha1=libgcrypt
XSERVER_XORG_SERVER_DEPENDENCIES += libgcrypt
else
XSERVER_XORG_SERVER_CONF_OPTS += --with-sha1=libsha1
XSERVER_XORG_SERVER_DEPENDENCIES += libsha1
endif
# Install the systemd unit only when nodm nor xdm aren't enabled, as
# they would be responsible for starting the server.
ifeq ($(BR2_PACKAGE_NODM)$(BR2_PACKAGE_XAPP_XDM),)
define XSERVER_XORG_SERVER_INSTALL_INIT_SYSTEMD
$(INSTALL) -D -m 0644 package/x11r7/xserver_xorg-server/xorg.service \
$(TARGET_DIR)/usr/lib/systemd/system/xorg.service
endef
endif
# Install the init script only when neither nodm nor xdm are enabled, as
# they would be responsible for starting the server.
ifeq ($(BR2_PACKAGE_NODM)$(BR2_PACKAGE_XAPP_XDM),)
define XSERVER_XORG_SERVER_INSTALL_INIT_SYSV
$(INSTALL) -D -m 755 package/x11r7/xserver_xorg-server/S40xorg \
$(TARGET_DIR)/etc/init.d/S40xorg
endef
endif
$(eval $(autotools-package))
+49
View File
@@ -0,0 +1,49 @@
FROM docker.io/debian:trixie
ARG ARCH=x86_64
ENV ARCH=${ARCH}
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Etc/UTC
RUN dpkg --add-architecture i386 && \
apt -y update && \
apt -y install which \
sed \
make \
binutils \
build-essential \
diffutils \
gcc \
g++ \
bash \
patch \
gzip \
bzip2 \
perl \
tar \
cpio \
unzip \
rsync \
file \
bc \
findutils \
gawk \
wget \
flex \
xxd \
bison \
libc6:i386 \
libstdc++6:i386 \
qpdf \
zstd \
git && \
apt-get clean && \
apt-get autoremove --yes && \
rm -rf /var/lib/{apt,dpkg,cache,log}/
RUN git clone --branch 2025.11-rc2 https://github.com/buildroot/buildroot.git /buildroot
ENV FORCE_UNSAFE_CONFIGURE=1
ENTRYPOINT [ "/vanilla/docker/nintendoswitch/build.sh" ]
+36
View File
@@ -0,0 +1,36 @@
#!/bin/bash
set -e
# Patch Buildroot to build an older version of X11 because the Tegra BSP isn't compatible with the newer one
cp /vanilla/buildroot/package/x11r7/* /buildroot/package/x11r7/xserver_xorg-server/
# Main build
make -C /buildroot O=/build BR2_EXTERNAL=/vanilla/buildroot vanilla_nx_defconfig
/buildroot/utils/config --file /build/.config -e BR2_PACKAGE_VANILLA_USE_LOCAL
/buildroot/utils/config --file /build/.config --set-str BR2_PACKAGE_VANILLA_LOCAL_PATH /vanilla
make -C /buildroot O=/build
# Copy initramfs
mkdir -p /install/bootloader/ini
mkdir -p /install/switchroot/vanilla/data
mv /build/images/rootfs.cpio.uboot /install/switchroot/vanilla/initramfs
# Copy icons
cp /vanilla/gui/res/switch/bootlogo_vanilla.bmp /install/switchroot/vanilla/
cp /vanilla/gui/res/switch/icon_vanilla.bmp /install/switchroot/vanilla/
# Copy bootloader ini
cp /vanilla/gui/res/switch/vanilla.ini /install/bootloader/ini/
# Create U-Boot image of kernel
/build/host/bin/mkimage -A arm64 -O linux -T kernel -C none -a 0x80200000 -e 0x80200000 -d /build/images/Image /install/switchroot/vanilla/uImage
# Copy pre-made config
cp /vanilla/gui/res/switch/config.xml /install/switchroot/vanilla/data/
# Copy support files
cp /vanilla/gui/res/switch/bl31.bin /install/switchroot/vanilla/
cp /vanilla/gui/res/switch/bl33.bin /install/switchroot/vanilla/
cp /vanilla/gui/res/switch/boot.scr /install/switchroot/vanilla/
cp /vanilla/gui/res/switch/nx-plat.dtimg /install/switchroot/vanilla/
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 MiB

+24
View File
@@ -0,0 +1,24 @@
<?xml version="1.0"?>
<vanilla>
<consoles>
<console>
<name>Wii U</name>
<bssid>9ce63589f813</bssid>
<psk>e6a31b46fd78b758e15245486e6ca81d12d7aec63ace0007a742b91500b7d40c</psk>
</console>
</consoles>
<server>FFFFFFFF</server>
<wireless>wlan0</wireless>
<connectionsetup>1</connectionsetup>
<region>0</region>
<swapabxy>0</swapabxy>
<fullscreen>1</fullscreen>
<fastdrm>0</fastdrm>
<controls>
<keys/>
<buttons/>
<axes/>
</controls>
<cursorinfullscreen>0</cursorinfullscreen>
<recordingdir></recordingdir>
</vanilla>
Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.
+11
View File
@@ -0,0 +1,11 @@
[Vanilla]
l4t=1
boot_prefixes=/switchroot/vanilla/
id=SWR-VAN
r2p_action=bootloader
icon=switchroot/vanilla/icon_vanilla.bmp
uart_port=0
fbconsole=0 ; TEMP: Verbose boot
hdmi_fbconsole=0 ; TEMP: Verbose boot
logopath=switchroot/vanilla/bootlogo_vanilla.bmp
bootargs_extra=net.ifnames=0