<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.wii-linux.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tech64DD</id>
	<title>Wii-Linux Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.wii-linux.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tech64DD"/>
	<link rel="alternate" type="text/html" href="https://wiki.wii-linux.org/wiki/Special:Contributions/Tech64DD"/>
	<updated>2026-04-22T15:02:56Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.44.3</generator>
	<entry>
		<id>https://wiki.wii-linux.org/index.php?title=Main_Page&amp;diff=249</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.wii-linux.org/index.php?title=Main_Page&amp;diff=249"/>
		<updated>2026-02-22T22:04:30Z</updated>

		<summary type="html">&lt;p&gt;Tech64DD: renamed troubleshooting page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Welcome to the Wii-Linux Wiki! ==&lt;br /&gt;
&lt;br /&gt;
You&#039;ve reached the wiki page of [[Wii-Linux]].  Here you may find some information related to Wii-Linux, it&#039;s development, and a bit about the [[Wii]] hardware itself.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; You may also want to check out a similar wiki site, &#039;&#039;&#039; [https://wiibrew.org WiiBrew].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Navigation ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Hardware !! Software !! Misc&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* Consoles&lt;br /&gt;
** [[Wii U]]&lt;br /&gt;
** [[Wii]]&lt;br /&gt;
** [[GameCube]]&lt;br /&gt;
* Accessories&lt;br /&gt;
** Memory Card ([[EXI]] bus)&lt;br /&gt;
*** [[SD Gecko]]&lt;br /&gt;
*** [[USB Gecko]]&lt;br /&gt;
*** [[Memory Card]]&lt;br /&gt;
*** [[Microphone]]&lt;br /&gt;
*** [[Broadband Adapter]]&lt;br /&gt;
*** [[Modem]]&lt;br /&gt;
** [[GameCube Controller]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Wii-Linux]]&lt;br /&gt;
* [[Wii-Linux Distros|Distros]]&lt;br /&gt;
** [[ArchPOWER]]&lt;br /&gt;
** [[Void-PPC]]&lt;br /&gt;
** [[Debian-Ports PPC]]&lt;br /&gt;
* [[Recommended Apps]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Troubleshooting/FAQ]]&lt;br /&gt;
* [[Useful Development Info]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Tech64DD</name></author>
	</entry>
	<entry>
		<id>https://wiki.wii-linux.org/index.php?title=Troubleshooting/FAQ&amp;diff=248</id>
		<title>Troubleshooting/FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.wii-linux.org/index.php?title=Troubleshooting/FAQ&amp;diff=248"/>
		<updated>2026-02-22T22:03:42Z</updated>

		<summary type="html">&lt;p&gt;Tech64DD: add some FAQs about wiimotes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains some fixes for common issues and frequently asked questions with [[Wii-Linux]].&lt;br /&gt;
&lt;br /&gt;
== [[Gumboot]] isn&#039;t loading!  What&#039;s going on? ==&lt;br /&gt;
Depends on what&#039;s wrong with it.&lt;br /&gt;
* &#039;&#039;&#039;Black screen?  Immediate reboot?&#039;&#039;&#039;  Check if you have [[BootMii]] installed correctly.&lt;br /&gt;
* &#039;&#039;&#039;Blinking disk slot?&#039;&#039;&#039;  Check if your SD Card is inserted properly, this means that BootMii can&#039;t find &amp;lt;code&amp;gt;bootmii/ppcboot.elf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;bootmii/armboot.bin&amp;lt;/code&amp;gt;, or its config.&lt;br /&gt;
* &#039;&#039;&#039;HBC / Priiloader won&#039;t load BootMii&#039;&#039;&#039;?  Check if BootMii is installed correctly as an IOS - these can&#039;t load BootMii as boot2.&lt;br /&gt;
&lt;br /&gt;
== I get an error from Gumboot trying to load the kernel!  What&#039;s wrong? ==&lt;br /&gt;
Check that you copied all of the files properly.  It&#039;s possible that the kernel was corrupted while copying it.  &lt;br /&gt;
Try putting the SD Card in a computer, deleting wiilinux/vX_X.krn, and copying it out of the SD Files archive.&lt;br /&gt;
&lt;br /&gt;
== How do I modify the kernel arguments? ==&lt;br /&gt;
Open the kernel binary (&amp;lt;code&amp;gt;wiilinux/vX_X.krn&amp;lt;/code&amp;gt;) in a hex editor, search for the ASCII text &amp;lt;code&amp;gt;root=&amp;lt;/code&amp;gt;, then user overwrite mode to modify the arguments (tip: overwrite the large chunk of padding, that&#039;s what it&#039;s there for!)&lt;br /&gt;
&lt;br /&gt;
== The kernel seems to load (green bar on Gumboot), but then the screen stays on garbled colors, fully black, or black screen with the loader text!  What&#039;s wrong? ==&lt;br /&gt;
This could be tons of things.&lt;br /&gt;
* &#039;&#039;&#039;If you&#039;re getting the garbled colors&#039;&#039;&#039;, it means the kernel failed to initialize very early on, before initializing the [[AVE-RVL]].&lt;br /&gt;
* &#039;&#039;&#039;If you&#039;re getting a fully black screen without even the loader text at the top&#039;&#039;&#039;, that means that it failed after initializing the AVE-RVL, gcnfb, but before displaying the loader text.&lt;br /&gt;
* &#039;&#039;&#039;If you&#039;re getting a black screen with the loader text at the top left&#039;&#039;&#039;, it means the kernel has initialized a decent bit, but something isn&#039;t working.  Try setting the kernel arguments (see the previous answer, right above this), replace the loglevel=x parameter with loglevel=7 to get full kernel logs on the screen, or check a USB gecko.&lt;br /&gt;
For all of these, having a [[USB Gecko]] would be very beneficial.&lt;br /&gt;
&lt;br /&gt;
== I see the login screen, but I can&#039;t type on my USB keyboard, what gives? ==&lt;br /&gt;
Check your USB keyboard connection, is it plugged in, and plugged in all the way? (more common than you might think)  &lt;br /&gt;
Try pressing num lock/caps lock/scroll lock, do the lights come on?  If not, check if your keyboard is just dead (plug it into another device).  If you&#039;ve verified all of this, and it still doesn&#039;t work, ask for assistance.&lt;br /&gt;
&lt;br /&gt;
== Why is my WiFi so slow?  I can&#039;t even get 1MB/s! ==&lt;br /&gt;
That&#039;s just how it is.  It&#039;s [https://web.archive.org/web/20180817063137/http://www.gc-linux.org/wiki/Wii:WLAN hardware limitations], that&#039;s how it is in all standard Wii software as well, the Wii&#039;s WiFi chipset is just that slow.  I highly recommend using USB Ethernet, or a supported USB WiFI adapter wherever possible if you care about speed.&lt;br /&gt;
&lt;br /&gt;
== Why isn&#039;t [some package name here] in the ArchPOWER repos? ==&lt;br /&gt;
I don&#039;t maintain the [[ArchPOWER]] repos, but I do maintain a small group of extra packages for ArchPOWER in a seperate repo.&lt;br /&gt;
Ask me, I&#039;ll check for you, and build it if possible.&lt;br /&gt;
&lt;br /&gt;
== Why is logging in so slow? ==&lt;br /&gt;
Arch (and by extension, ArchPOWER) uses a fairly inefficient (though more secure) hashing algorithm for the password by default, that is quite slow on the Wii&#039;s mediocre CPU.  If you&#039;d like a better balance between security and speed, you can use SHA256 instead.&lt;br /&gt;
Simply edit &amp;lt;code&amp;gt;/etc/login.defs&amp;lt;/code&amp;gt;, then replace &amp;lt;code&amp;gt;YESCRYPT&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;SHA256&amp;lt;/code&amp;gt;, then regenerate the password of each user.&lt;br /&gt;
&#039;&#039;&#039;New rootfs&#039;s have this by default.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Why I get out-of-memory errors despite turning on a swapfile/swap partition? ==&lt;br /&gt;
This is a bug in the default Wii-Linux configuration that was shipped for quite some time, but eventually fixed.&amp;lt;br&amp;gt;&lt;br /&gt;
You can either:&amp;lt;br&amp;gt;&lt;br /&gt;
A) Update your system (the latest wii-linux-meta fixes it)&amp;lt;br&amp;gt;&lt;br /&gt;
B) Delete, or fix, &amp;lt;code&amp;gt;/etc/udev/rules.d/99-zram.rules&amp;lt;/code&amp;gt; to not have 100M allocated&lt;br /&gt;
&lt;br /&gt;
== Can I play [insert game here] on Wii Linux? ==&lt;br /&gt;
Short Answer: &#039;&#039;&#039;No&#039;&#039;&#039;.  Stop trying.  You don&#039;t want to get it to work.&amp;lt;br&amp;gt;&lt;br /&gt;
Long answer: Well.... technically, yes.&lt;br /&gt;
It&#039;s very likely compiled for x86, so it&#039;ll need to be emulated.  That&#039;s already unusably slow on the Wii, but let&#039;s carry on.&lt;br /&gt;
There&#039;s no graphics acceleration of any kind, so it&#039;ll be rendering on the emulated x86 CPU, and then drawing to the screen w/ native PPC code, but still on the CPU&lt;br /&gt;
So, yes, it may execute the game&#039;s code, technically, but you sure as hell won&#039;t be &amp;quot;playing&amp;quot; it.&lt;br /&gt;
&lt;br /&gt;
== Why is my Wii Remote unpaired after going back to the Wii Menu? ==&lt;br /&gt;
The Linux kernel interacts in some weird way with the Bluetooth module causing Wii Remotes to get unpaired when rebooted into the Wii System Menu (and only the menu, other software like the Homebrew Channel works fine).  The exact cause of this problem isn&#039;t known yet.&amp;lt;br&amp;gt;You&#039;ll have to simply pair the Wii Remote(s) again with the console.&lt;br /&gt;
&lt;br /&gt;
== Can I use a Wii Remote as a mouse? ==&lt;br /&gt;
Yes but no.  The software to do this (xwiimote) has not seen any actual updates since 2013 and does not work on modern systems.  You can use cwiid, which is packaged, to interact with a Wii Remote, but it does not give you mouse emulation.&lt;br /&gt;
&lt;br /&gt;
== Why is pairing my Wii Remote to Linux so finnicky? ==&lt;br /&gt;
Linux currently has crippling issues with USB support, and the internal Broadcom 2045A Bluetooth card in the Wii is connected over USB, so it inherits these issues.  There is nothing that can currently be done to work around or fix this.&lt;br /&gt;
&lt;br /&gt;
== Why do package downloads sometimes fail / &amp;quot;Operation too slow&amp;quot;? ==&lt;br /&gt;
The Wii&#039;s WiFi connection is &#039;&#039;incredibly&#039;&#039; slow.  This leads to downloads sometimes just failing due to timeout.  Newer Wii-Linux builds have &amp;lt;code&amp;gt;DisableDownloadTimeout&amp;lt;/code&amp;gt; set in &amp;lt;code&amp;gt;/etc/pacman.conf&amp;lt;/code&amp;gt;, so this issue should be mitigated.  Existing Wii-Linux installs can set this either with ConfigMii, or by manually editing the config file.&lt;/div&gt;</summary>
		<author><name>Tech64DD</name></author>
	</entry>
	<entry>
		<id>https://wiki.wii-linux.org/index.php?title=Troubleshooting&amp;diff=246</id>
		<title>Troubleshooting</title>
		<link rel="alternate" type="text/html" href="https://wiki.wii-linux.org/index.php?title=Troubleshooting&amp;diff=246"/>
		<updated>2026-02-22T22:00:26Z</updated>

		<summary type="html">&lt;p&gt;Tech64DD: Tech64DD moved page Troubleshooting to Troubleshooting/FAQ&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Troubleshooting/FAQ]]&lt;/div&gt;</summary>
		<author><name>Tech64DD</name></author>
	</entry>
	<entry>
		<id>https://wiki.wii-linux.org/index.php?title=Troubleshooting/FAQ&amp;diff=245</id>
		<title>Troubleshooting/FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.wii-linux.org/index.php?title=Troubleshooting/FAQ&amp;diff=245"/>
		<updated>2026-02-22T22:00:26Z</updated>

		<summary type="html">&lt;p&gt;Tech64DD: Tech64DD moved page Troubleshooting to Troubleshooting/FAQ&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains some fixes for common issues with [[Wii-Linux]].&lt;br /&gt;
&lt;br /&gt;
== [[Gumboot]] isn&#039;t loading!  What&#039;s going on? ==&lt;br /&gt;
Depends on what&#039;s wrong with it.&lt;br /&gt;
* &#039;&#039;&#039;Black screen?  Immediate reboot?&#039;&#039;&#039;  Check if you have [[BootMii]] installed correctly.&lt;br /&gt;
* &#039;&#039;&#039;Blinking disk slot?&#039;&#039;&#039;  Check if your SD Card is inserted properly, this means that BootMii can&#039;t find &amp;lt;code&amp;gt;bootmii/ppcboot.elf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;bootmii/armboot.bin&amp;lt;/code&amp;gt;, or its config.&lt;br /&gt;
* &#039;&#039;&#039;HBC / Priiloader won&#039;t load BootMii&#039;&#039;&#039;?  Check if BootMii is installed correctly as an IOS - these can&#039;t load BootMii as boot2.&lt;br /&gt;
&lt;br /&gt;
== I get an error from Gumboot trying to load the kernel!  What&#039;s wrong? ==&lt;br /&gt;
Check that you copied all of the files properly.  It&#039;s possible that the kernel was corrupted while copying it.  &lt;br /&gt;
Try putting the SD Card in a computer, deleting wiilinux/vX_X.krn, and copying it out of the SD Files archive.&lt;br /&gt;
&lt;br /&gt;
== How do I modify the kernel arguments? ==&lt;br /&gt;
Open the kernel binary (&amp;lt;code&amp;gt;wiilinux/vX_X.krn&amp;lt;/code&amp;gt;) in a hex editor, search for the ASCII text &amp;lt;code&amp;gt;root=&amp;lt;/code&amp;gt;, then user overwrite mode to modify the arguments (tip: overwrite the large chunk of padding, that&#039;s what it&#039;s there for!)&lt;br /&gt;
&lt;br /&gt;
== The kernel seems to load (green bar on Gumboot), but then the screen stays on garbled colors, fully black, or black screen with the loader text!  What&#039;s wrong? ==&lt;br /&gt;
This could be tons of things.&lt;br /&gt;
* &#039;&#039;&#039;If you&#039;re getting the garbled colors&#039;&#039;&#039;, it means the kernel failed to initialize very early on, before initializing the [[AVE-RVL]].&lt;br /&gt;
* &#039;&#039;&#039;If you&#039;re getting a fully black screen without even the loader text at the top&#039;&#039;&#039;, that means that it failed after initializing the AVE-RVL, gcnfb, but before displaying the loader text.&lt;br /&gt;
* &#039;&#039;&#039;If you&#039;re getting a black screen with the loader text at the top left&#039;&#039;&#039;, it means the kernel has initialized a decent bit, but something isn&#039;t working.  Try setting the kernel arguments (see the previous answer, right above this), replace the loglevel=x parameter with loglevel=7 to get full kernel logs on the screen, or check a USB gecko.&lt;br /&gt;
For all of these, having a [[USB Gecko]] would be very beneficial.&lt;br /&gt;
&lt;br /&gt;
== I see the login screen, but I can&#039;t type on my USB keyboard, what gives? ==&lt;br /&gt;
Check your USB keyboard connection, is it plugged in, and plugged in all the way? (more common than you might think)  &lt;br /&gt;
Try pressing num lock/caps lock/scroll lock, do the lights come on?  If not, check if your keyboard is just dead (plug it into another device).  If you&#039;ve verified all of this, and it still doesn&#039;t work, ask for assistance.&lt;br /&gt;
&lt;br /&gt;
== Why is my WiFi so slow?  I can&#039;t even get 1MB/s! ==&lt;br /&gt;
That&#039;s just how it is.  It&#039;s [https://web.archive.org/web/20180817063137/http://www.gc-linux.org/wiki/Wii:WLAN hardware limitations], that&#039;s how it is in all standard Wii software as well, the Wii&#039;s WiFi chipset is just that slow.  I highly recommend using USB Ethernet, or a supported USB WiFI adapter wherever possible if you care about speed.&lt;br /&gt;
&lt;br /&gt;
== Why isn&#039;t [some package name here] in the ArchPOWER repos? ==&lt;br /&gt;
I don&#039;t maintain the [[ArchPOWER]] repos, but I do maintain a small group of extra packages for ArchPOWER in a seperate repo.&lt;br /&gt;
Ask me, I&#039;ll check for you, and build it if possible.&lt;br /&gt;
&lt;br /&gt;
== Why is logging in so slow? ==&lt;br /&gt;
Arch (and by extension, ArchPOWER) uses a fairly inefficient (though more secure) hashing algorithm for the password by default, that is quite slow on the Wii&#039;s mediocre CPU.  If you&#039;d like a better balance between security and speed, you can use SHA256 instead.&lt;br /&gt;
Simply edit &amp;lt;code&amp;gt;/etc/login.defs&amp;lt;/code&amp;gt;, then replace &amp;lt;code&amp;gt;YESCRYPT&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;SHA256&amp;lt;/code&amp;gt;, then regenerate the password of each user.&lt;br /&gt;
&#039;&#039;&#039;New rootfs&#039;s have this by default.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Why I get out-of-memory errors despite turning on a swapfile/swap partition? ==&lt;br /&gt;
This is a bug in the default Wii-Linux configuration that was shipped for quite some time, but eventually fixed.&amp;lt;br&amp;gt;&lt;br /&gt;
You can either:&amp;lt;br&amp;gt;&lt;br /&gt;
A) Update your system (the latest wii-linux-meta fixes it)&amp;lt;br&amp;gt;&lt;br /&gt;
B) Delete, or fix, &amp;lt;code&amp;gt;/etc/udev/rules.d/99-zram.rules&amp;lt;/code&amp;gt; to not have 100M allocated&lt;br /&gt;
&lt;br /&gt;
== Can I play [insert game here] on Wii Linux? ==&lt;br /&gt;
Short Answer: &#039;&#039;&#039;No&#039;&#039;&#039;.  Stop trying.  You don&#039;t want to get it to work.&amp;lt;br&amp;gt;&lt;br /&gt;
Long answer: Well.... technically, yes.&lt;br /&gt;
It&#039;s very likely compiled for x86, so it&#039;ll need to be emulated.  That&#039;s already unusably slow on the Wii, but let&#039;s carry on.&lt;br /&gt;
There&#039;s no graphics acceleration of any kind, so it&#039;ll be rendering on the emulated x86 CPU, and then drawing to the screen w/ native PPC code, but still on the CPU&lt;br /&gt;
So, yes, it may execute the game&#039;s code, technically, but you sure as hell won&#039;t be &amp;quot;playing&amp;quot; it.&lt;br /&gt;
&lt;br /&gt;
== Why is my Wii Remote unpaired after going back to the Wii Menu? ==&lt;br /&gt;
The Linux kernel interacts in some weird way with the Bluetooth module causing Wii Remotes to get unpaired when rebooted into the Wii System Menu (and only the menu, other software like the Homebrew Channel works fine).  The exact cause of this problem isn&#039;t known yet.&amp;lt;br&amp;gt;You&#039;ll have to simply pair the Wii Remote(s) again with the console.&lt;br /&gt;
&lt;br /&gt;
== Why do package downloads sometimes fail / &amp;quot;Operation too slow&amp;quot;? ==&lt;br /&gt;
The Wii&#039;s WiFi connection is &#039;&#039;incredibly&#039;&#039; slow.  This leads to downloads sometimes just failing due to timeout.  Newer Wii-Linux builds have &amp;lt;code&amp;gt;DisableDownloadTimeout&amp;lt;/code&amp;gt; set in &amp;lt;code&amp;gt;/etc/pacman.conf&amp;lt;/code&amp;gt;, so this issue should be mitigated.  Existing Wii-Linux installs can set this either with ConfigMii, or by manually editing the config file.&lt;/div&gt;</summary>
		<author><name>Tech64DD</name></author>
	</entry>
	<entry>
		<id>https://wiki.wii-linux.org/index.php?title=Broadband_Adapter&amp;diff=231</id>
		<title>Broadband Adapter</title>
		<link rel="alternate" type="text/html" href="https://wiki.wii-linux.org/index.php?title=Broadband_Adapter&amp;diff=231"/>
		<updated>2025-09-26T23:20:27Z</updated>

		<summary type="html">&lt;p&gt;Tech64DD: broadband adapter is known working&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The GameCube Broadband Adapter (sometimes abbreviated as BBA) is a device that plugs into the serial port (the [[EXI]] bus) on the bottom of a [[GameCube]], and exposes an RJ-45 (commonly referred to as Ethernet) plug.  It&#039;s intended use is for online or local multiplayer games.&lt;br /&gt;
&lt;br /&gt;
== Compatibility ==&lt;br /&gt;
The BBA has a driver in [[Wii-Linux]], and has been confirmed to be fully working.&lt;/div&gt;</summary>
		<author><name>Tech64DD</name></author>
	</entry>
	<entry>
		<id>https://wiki.wii-linux.org/index.php?title=Troubleshooting/FAQ&amp;diff=218</id>
		<title>Troubleshooting/FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.wii-linux.org/index.php?title=Troubleshooting/FAQ&amp;diff=218"/>
		<updated>2025-08-10T01:22:58Z</updated>

		<summary type="html">&lt;p&gt;Tech64DD: fix broken code block&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains some fixes for common issues with [[Wii-Linux]].&lt;br /&gt;
&lt;br /&gt;
== [[Gumboot]] isn&#039;t loading!  What&#039;s going on? ==&lt;br /&gt;
Depends on what&#039;s wrong with it.&lt;br /&gt;
* &#039;&#039;&#039;Black screen?  Immediate reboot?&#039;&#039;&#039;  Check if you have [[BootMii]] installed correctly.&lt;br /&gt;
* &#039;&#039;&#039;Blinking disk slot?&#039;&#039;&#039;  Check if your SD Card is inserted properly, this means that BootMii can&#039;t find &amp;lt;code&amp;gt;bootmii/ppcboot.elf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;bootmii/armboot.bin&amp;lt;/code&amp;gt;, or its config.&lt;br /&gt;
* &#039;&#039;&#039;HBC / Priiloader won&#039;t load BootMii&#039;&#039;&#039;?  Check if BootMii is installed correctly as an IOS - these can&#039;t load BootMii as boot2.&lt;br /&gt;
&lt;br /&gt;
== I get an error from Gumboot trying to load the kernel!  What&#039;s wrong? ==&lt;br /&gt;
Check that you copied all of the files properly.  It&#039;s possible that the kernel was corrupted while copying it.  &lt;br /&gt;
Try putting the SD Card in a computer, deleting wiilinux/vX_X.krn, and copying it out of the SD Files archive.&lt;br /&gt;
&lt;br /&gt;
== How do I modify the kernel arguments? ==&lt;br /&gt;
Open the kernel binary (&amp;lt;code&amp;gt;wiilinux/vX_X.krn&amp;lt;/code&amp;gt;) in a hex editor, search for the ASCII text &amp;lt;code&amp;gt;root=&amp;lt;/code&amp;gt;, then user overwrite mode to modify the arguments (tip: overwrite the large chunk of padding, that&#039;s what it&#039;s there for!)&lt;br /&gt;
&lt;br /&gt;
== The kernel seems to load (green bar on Gumboot), but then the screen stays on garbled colors, fully black, or black screen with the loader text!  What&#039;s wrong? ==&lt;br /&gt;
This could be tons of things.&lt;br /&gt;
* &#039;&#039;&#039;If you&#039;re getting the garbled colors&#039;&#039;&#039;, it means the kernel failed to initialize very early on, before initializing the [[AVE-RVL]].&lt;br /&gt;
* &#039;&#039;&#039;If you&#039;re getting a fully black screen without even the loader text at the top&#039;&#039;&#039;, that means that it failed after initializing the AVE-RVL, gcnfb, but before displaying the loader text.&lt;br /&gt;
* &#039;&#039;&#039;If you&#039;re getting a black screen with the loader text at the top left&#039;&#039;&#039;, it means the kernel has initialized a decent bit, but something isn&#039;t working.  Try setting the kernel arguments (see the previous answer, right above this), replace the loglevel=x parameter with loglevel=7 to get full kernel logs on the screen, or check a USB gecko.&lt;br /&gt;
For all of these, having a [[USB Gecko]] would be very beneficial.&lt;br /&gt;
&lt;br /&gt;
== I see the login screen, but I can&#039;t type on my USB keyboard, what gives? ==&lt;br /&gt;
Check your USB keyboard connection, is it plugged in, and plugged in all the way? (more common than you might think)  &lt;br /&gt;
Try pressing num lock/caps lock/scroll lock, do the lights come on?  If not, check if your keyboard is just dead (plug it into another device).  If you&#039;ve verified all of this, and it still doesn&#039;t work, ask for assistance.&lt;br /&gt;
&lt;br /&gt;
== Why is my WiFi so slow?  I can&#039;t even get 1MB/s! ==&lt;br /&gt;
That&#039;s just how it is.  It&#039;s [https://web.archive.org/web/20180817063137/http://www.gc-linux.org/wiki/Wii:WLAN hardware limitations], that&#039;s how it is in all standard Wii software as well, the Wii&#039;s WiFi chipset is just that slow.  I highly recommend using USB Ethernet, or a supported USB WiFI adapter wherever possible if you care about speed.&lt;br /&gt;
&lt;br /&gt;
== Why isn&#039;t [some package name here] in the ArchPOWER repos? ==&lt;br /&gt;
I don&#039;t maintain the [[ArchPOWER]] repos, but I do maintain a small group of extra packages for ArchPOWER in a seperate repo.&lt;br /&gt;
Ask me, I&#039;ll check for you, and build it if possible.&lt;br /&gt;
&lt;br /&gt;
== Why is logging in so slow? ==&lt;br /&gt;
Arch (and by extension, ArchPOWER) uses a fairly inefficient (though more secure) hashing algorithm for the password by default, that is quite slow on the Wii&#039;s mediocre CPU.  If you&#039;d like a better balance between security and speed, you can use SHA256 instead.&lt;br /&gt;
Simply edit &amp;lt;code&amp;gt;/etc/login.defs&amp;lt;/code&amp;gt;, then replace &amp;lt;code&amp;gt;YESCRYPT&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;SHA256&amp;lt;/code&amp;gt;, then regenerate the password of each user.&lt;br /&gt;
&#039;&#039;&#039;New rootfs&#039;s have this by default.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Why I get out-of-memory errors despite turning on a swapfile/swap partition? ==&lt;br /&gt;
This is a bug in the default Wii-Linux configuration that was shipped for quite some time, but eventually fixed.&amp;lt;br&amp;gt;&lt;br /&gt;
You can either:&amp;lt;br&amp;gt;&lt;br /&gt;
A) Update your system (the latest wii-linux-meta fixes it)&amp;lt;br&amp;gt;&lt;br /&gt;
B) Delete, or fix, &amp;lt;code&amp;gt;/etc/udev/rules.d/99-zram.rules&amp;lt;/code&amp;gt; to not have 100M allocated&lt;br /&gt;
&lt;br /&gt;
== Can I play [insert game here] on Wii Linux? ==&lt;br /&gt;
Short Answer: &#039;&#039;&#039;No&#039;&#039;&#039;.  Stop trying.  You don&#039;t want to get it to work.&amp;lt;br&amp;gt;&lt;br /&gt;
Long answer: Well.... technically, yes.&lt;br /&gt;
It&#039;s very likely compiled for x86, so it&#039;ll need to be emulated.  That&#039;s already unusably slow on the Wii, but let&#039;s carry on.&lt;br /&gt;
There&#039;s no graphics acceleration of any kind, so it&#039;ll be rendering on the emulated x86 CPU, and then drawing to the screen w/ native PPC code, but still on the CPU&lt;br /&gt;
So, yes, it may execute the game&#039;s code, technically, but you sure as hell won&#039;t be &amp;quot;playing&amp;quot; it.&lt;br /&gt;
&lt;br /&gt;
== Why is my Wii Remote unpaired after going back to the Wii Menu? ==&lt;br /&gt;
The Linux kernel interacts in some weird way with the Bluetooth module causing Wii Remotes to get unpaired when rebooted into the Wii System Menu (and only the menu, other software like the Homebrew Channel works fine).  The exact cause of this problem isn&#039;t known yet.&amp;lt;br&amp;gt;You&#039;ll have to simply pair the Wii Remote(s) again with the console.&lt;br /&gt;
&lt;br /&gt;
== Why do package downloads sometimes fail / &amp;quot;Operation too slow&amp;quot;? ==&lt;br /&gt;
The Wii&#039;s WiFi connection is &#039;&#039;incredibly&#039;&#039; slow.  This leads to downloads sometimes just failing due to timeout.  Newer Wii-Linux builds have &amp;lt;code&amp;gt;DisableDownloadTimeout&amp;lt;/code&amp;gt; set in &amp;lt;code&amp;gt;/etc/pacman.conf&amp;lt;/code&amp;gt;, so this issue should be mitigated.  Existing Wii-Linux installs can set this either with ConfigMii, or by manually editing the config file.&lt;/div&gt;</summary>
		<author><name>Tech64DD</name></author>
	</entry>
	<entry>
		<id>https://wiki.wii-linux.org/index.php?title=Troubleshooting/FAQ&amp;diff=201</id>
		<title>Troubleshooting/FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.wii-linux.org/index.php?title=Troubleshooting/FAQ&amp;diff=201"/>
		<updated>2025-05-30T21:07:21Z</updated>

		<summary type="html">&lt;p&gt;Tech64DD: added the wii remote unpairing bug&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains some fixes for common issues with [[Wii-Linux]].&lt;br /&gt;
&lt;br /&gt;
== [[Gumboot]] isn&#039;t loading!  What&#039;s going on? ==&lt;br /&gt;
Depends on what&#039;s wrong with it.&lt;br /&gt;
* &#039;&#039;&#039;Black screen?  Immediate reboot?&#039;&#039;&#039;  Check if you have [[BootMii]] installed correctly.&lt;br /&gt;
* &#039;&#039;&#039;Blinking disk slot?&#039;&#039;&#039;  Check if your SD Card is inserted properly, this means that BootMii can&#039;t find &amp;lt;code&amp;gt;bootmii/ppcboot.elf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;bootmii/armboot.bin&amp;lt;/code&amp;gt;, or its config.&lt;br /&gt;
* &#039;&#039;&#039;HBC / Priiloader won&#039;t load BootMii&#039;&#039;&#039;?  Check if BootMii is installed correctly as an IOS - these can&#039;t load BootMii as boot2.&lt;br /&gt;
&lt;br /&gt;
== I get an error from Gumboot trying to load the kernel!  What&#039;s wrong? ==&lt;br /&gt;
Check that you copied all of the files properly.  It&#039;s possible that the kernel was corrupted while copying it.  &lt;br /&gt;
Try putting the SD Card in a computer, deleting wiilinux/vX_X.krn, and copying it out of the SD Files archive.&lt;br /&gt;
&lt;br /&gt;
== How do I modify the kernel arguments? ==&lt;br /&gt;
Open the kernel binary (&amp;lt;code&amp;gt;wiilinux/vX_X.krn&amp;lt;/code&amp;gt;) in a hex editor, search for the ASCII text &amp;lt;code&amp;gt;root=&amp;lt;/code&amp;gt;, then user overwrite mode to modify the arguments (tip: overwrite the large chunk of padding, that&#039;s what it&#039;s there for!)&lt;br /&gt;
&lt;br /&gt;
== The kernel seems to load (green bar on Gumboot), but then the screen stays on garbled colors, fully black, or black screen with the loader text!  What&#039;s wrong? ==&lt;br /&gt;
This could be tons of things.&lt;br /&gt;
* &#039;&#039;&#039;If you&#039;re getting the garbled colors&#039;&#039;&#039;, it means the kernel failed to initialize very early on, before initializing the [[AVE-RVL]].&lt;br /&gt;
* &#039;&#039;&#039;If you&#039;re getting a fully black screen without even the loader text at the top&#039;&#039;&#039;, that means that it failed after initializing the AVE-RVL, gcnfb, but before displaying the loader text.&lt;br /&gt;
* &#039;&#039;&#039;If you&#039;re getting a black screen with the loader text at the top left&#039;&#039;&#039;, it means the kernel has initialized a decent bit, but something isn&#039;t working.  Try setting the kernel arguments (see the previous answer, right above this), replace the loglevel=x parameter with loglevel=7 to get full kernel logs on the screen, or check a USB gecko.&lt;br /&gt;
For all of these, having a [[USB Gecko]] would be very beneficial.&lt;br /&gt;
&lt;br /&gt;
== I see the login screen, but I can&#039;t type on my USB keyboard, what gives? ==&lt;br /&gt;
Check your USB keyboard connection, is it plugged in, and plugged in all the way? (more common than you might think)  &lt;br /&gt;
Try pressing num lock/caps lock/scroll lock, do the lights come on?  If not, check if your keyboard is just dead (plug it into another device).  If you&#039;ve verified all of this, and it still doesn&#039;t work, ask for assistance.&lt;br /&gt;
&lt;br /&gt;
== Why is my WiFi so slow?  I can&#039;t even get 1MB/s! ==&lt;br /&gt;
That&#039;s just how it is.  It&#039;s [https://web.archive.org/web/20180817063137/http://www.gc-linux.org/wiki/Wii:WLAN hardware limitations], that&#039;s how it is in all standard Wii software as well, the Wii&#039;s WiFi chipset is just that slow.  I highly recommend using USB Ethernet, or a supported USB WiFI adapter wherever possible if you care about speed.&lt;br /&gt;
&lt;br /&gt;
== Why isn&#039;t [some package name here] in the ArchPOWER repos? ==&lt;br /&gt;
I don&#039;t maintain the [[ArchPOWER]] repos, but I do maintain a small group of extra packages for ArchPOWER in a seperate repo.&lt;br /&gt;
Ask me, I&#039;ll check for you, and build it if possible.&lt;br /&gt;
&lt;br /&gt;
== Why is logging in so slow? ==&lt;br /&gt;
Arch (and by extension, ArchPOWER) uses a fairly inefficient (though more secure) hashing algorithm for the password by default, that is quite slow on the Wii&#039;s mediocre CPU.  If you&#039;d like a better balance between security and speed, you can use SHA256 instead.&lt;br /&gt;
Simply edit &amp;lt;code&amp;gt;/etc/login.defs&amp;lt;/code&amp;gt;, then replace &amp;lt;code&amp;gt;YESCRYPT&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;SHA256&amp;lt;/code&amp;gt;, then regenerate the password of each user.&lt;br /&gt;
&#039;&#039;&#039;New rootfs&#039;s have this by default.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Why I get out-of-memory errors despite turning on a swapfile/swap partition? ==&lt;br /&gt;
This is a bug in the default Wii-Linux configuration that was shipped for quite some time, but eventually fixed.&amp;lt;br&amp;gt;&lt;br /&gt;
You can either:&amp;lt;br&amp;gt;&lt;br /&gt;
A) Update your system (the latest wii-linux-meta fixes it)&amp;lt;br&amp;gt;&lt;br /&gt;
B) Delete, or fix, &amp;lt;code&amp;gt;/etc/udev/rules.d/99-zram.rules&amp;lt;/code&amp;gt; to not have 100M allocated&lt;br /&gt;
&lt;br /&gt;
== Can I play [insert game here] on Wii Linux? ==&lt;br /&gt;
Short Answer: &#039;&#039;&#039;No&#039;&#039;&#039;.  Stop trying.  You don&#039;t want to get it to work.&amp;lt;br&amp;gt;&lt;br /&gt;
Long answer: Well.... technically, yes.&lt;br /&gt;
It&#039;s very likely compiled for x86, so it&#039;ll need to be emulated.  That&#039;s already unusably slow on the Wii, but let&#039;s carry on.&lt;br /&gt;
There&#039;s no graphics acceleration of any kind, so it&#039;ll be rendering on the emulated x86 CPU, and then drawing to the screen w/ native PPC code, but still on the CPU&lt;br /&gt;
So, yes, it may execute the game&#039;s code, technically, but you sure as hell won&#039;t be &amp;quot;playing&amp;quot; it.&lt;br /&gt;
&lt;br /&gt;
== Why is my Wii Remote unpaired after going back to the Wii Menu? ==&lt;br /&gt;
The Linux kernel interacts in some weird way with the Bluetooth module causing Wii Remotes to get unpaired when rebooted into the regular Wii OS, and the exact cause of this problem isn&#039;t known yet.&amp;lt;br&amp;gt;&lt;br /&gt;
You&#039;ll have to simply pair the Wii Remote(s) again with the console.&lt;/div&gt;</summary>
		<author><name>Tech64DD</name></author>
	</entry>
	<entry>
		<id>https://wiki.wii-linux.org/index.php?title=Building_Kernel_Guide&amp;diff=185</id>
		<title>Building Kernel Guide</title>
		<link rel="alternate" type="text/html" href="https://wiki.wii-linux.org/index.php?title=Building_Kernel_Guide&amp;diff=185"/>
		<updated>2025-05-19T21:32:40Z</updated>

		<summary type="html">&lt;p&gt;Tech64DD: standalone argument&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This Guide will teach you how to cross-compile the [[Wii-Linux]] kernel and supporting elements.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
* An x86 or AArch64 device running GNU/Linux&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Setup and Compile==&lt;br /&gt;
# Install Crosstool-NG via package manager or compile it by cloning &amp;lt;code&amp;gt;git clone https://github.com/crosstool-ng/crosstool-ng&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Make a directory to have all the files/folders to be in&lt;br /&gt;
# In that directory clone the Wii-Linux-Toolchain &amp;lt;code&amp;gt;https://github.com/Wii-Linux/wii-linux-toolchain&amp;lt;/code&amp;gt;.&lt;br /&gt;
# cd into the wii-linux-toolchain folder and run &amp;lt;code&amp;gt;mv ct-ng.config .config&amp;lt;/code&amp;gt; and run &amp;lt;code&amp;gt;ct-ng build&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* The process will take a while depending on how bad your computer is.&lt;br /&gt;
# Once it&#039;s installed, it should make a directory in your home folder called &amp;lt;code&amp;gt;x-tools&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* You can optionally move this directory elsewhere first, if you don&#039;t find &amp;lt;code&amp;gt;x-tools&amp;lt;/code&amp;gt; appealing.&lt;br /&gt;
# You must now add it to your PATH.  This varies per shell, and based on where you put it, but as an example:&lt;br /&gt;
#* for bash: &amp;lt;code&amp;gt;echo &#039;PATH=&amp;quot;$PATH:~/&amp;lt;path to ct-ng output&amp;gt;/powerpc-unknown-linux-gnu/bin&amp;quot;&#039; &amp;gt;&amp;gt; ~/.bashrc &amp;amp;&amp;amp; source ~/.bashrc&amp;lt;/code&amp;gt;.&lt;br /&gt;
# After you have added it to your path, go back to the main directory and run &amp;lt;code&amp;gt;git clone https://github.com/Wii-Linux/build-stack &amp;amp;&amp;amp; cd build-stack&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Once you&#039;re in the build-stack folder, run &amp;lt;code&amp;gt;./setup.sh&amp;lt;/code&amp;gt; and follow it&#039;s instructions, to make sure that you have all the necessary requirements installed.  If it asks to clone and build various requirements, answer Yes unless you have a very specific reason not to.&lt;br /&gt;
# After setup.sh finishes successfully, go back to the main directory, and now finally run &amp;lt;code&amp;gt;https://github.com/Wii-Linux/wii-linux-ngx -b &amp;lt;Branch You want&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* The branch you clone is the source code to the kernel branch you are going to compile (this could be specialized kernels (like for [[OpenWRT]], or just various versions of the main one). The following kernel branches are the ones currently supported:&lt;br /&gt;
#** &amp;lt;code&amp;gt;wii-v4.5&amp;lt;/code&amp;gt;&lt;br /&gt;
#** &amp;lt;code&amp;gt;wii-v4.14-openwrt&amp;lt;/code&amp;gt;&lt;br /&gt;
#** &amp;lt;code&amp;gt;wii-v4.19&amp;lt;/code&amp;gt;&lt;br /&gt;
# After you cloned the kernel that you want to build go back into &amp;lt;code&amp;gt;build-stack&amp;lt;/code&amp;gt; and run &amp;lt;code&amp;gt;./build-kernel.sh [name of your kernel directory]&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Example: &amp;lt;code&amp;gt;./build-kernel.sh wii-linux-ngx&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* The &amp;lt;code&amp;gt;--standalone&amp;lt;/code&amp;gt; argument can be used to build a kernel that doesn&#039;t require a loader, &amp;lt;code&amp;gt;arch/powerpc/boot/dts/wii.dts&amp;lt;/code&amp;gt; needs to be edited accordingly with the boot device that will be used.&lt;br /&gt;
# After the kernel compiles, you have to build the loader (small squashfs that the kernel boots, provides the boot menu).  In the build-stack run &amp;lt;code&amp;gt;./build-loader.sh ../v&amp;lt;kernel version short&amp;gt;.ldr&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Example: &amp;lt;code&amp;gt;./build-loader.sh ../v4_19325.ldr&amp;lt;/code&amp;gt;.&lt;br /&gt;
# After the loader is done, you need to go install it.  This consists of 2 parts:&lt;br /&gt;
#* &#039;&#039;&#039;Installing the kernel+loader&#039;&#039;&#039;.  A script has been provided to make this easier, &amp;lt;code&amp;gt;build-stack/copy-ssh.sh&amp;lt;/code&amp;gt;.  This provides an easy way to copy the kernel+loader to a remote machine in any directory.  This could even be a Wii-Linux install.&lt;br /&gt;
#** Example 1 (copy to local machine&#039;s SD Card on /mnt): &amp;lt;code&amp;gt;./copy-ssh.sh root@localhost /mnt v4_19325 4.19.325-wii+ kernel v4_19325.ldr&amp;lt;/code&amp;gt;&lt;br /&gt;
#** Example 2 (copy to Wii with SD Card on /boot): &amp;lt;code&amp;gt;./copy-ssh.sh root@wii.local /boot v4_19325 4.19.325-wii+ kernel v4_19325.ldr&amp;lt;/code&amp;gt;&lt;br /&gt;
#* &#039;&#039;&#039;&#039;Installing the kernel modules&#039;&#039;.  The kernel modules are output as &amp;lt;code&amp;gt;modules.tar.gz&amp;lt;/code&amp;gt; in your kernel directory.  You will need to safely extract these to your Wii-Linux distro&#039;s rootfs.  &#039;&#039;WARNING&#039;&#039;: Extracting directly to the rootfs &#039;&#039;&#039;&#039;&#039;WILL HOSE YOUR PERMISSIONS - DO NOT DO THAT&#039;&#039;&#039;&#039;&#039;.  It will set the UID/HID of the root directory, and /usr, and /usr/lib, to the UID/GID of the user who built the kernel.  Instead, you can extract it to a temporary directory, then &amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;cp -r&amp;lt;/code&amp;gt; the modules (&amp;lt;code&amp;gt;temp_dir/usr/lib/modules/[kernel version]-wii+&amp;lt;/code&amp;gt; into your rootfs.&lt;/div&gt;</summary>
		<author><name>Tech64DD</name></author>
	</entry>
	<entry>
		<id>https://wiki.wii-linux.org/index.php?title=Troubleshooting/FAQ&amp;diff=172</id>
		<title>Troubleshooting/FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.wii-linux.org/index.php?title=Troubleshooting/FAQ&amp;diff=172"/>
		<updated>2025-05-08T10:04:49Z</updated>

		<summary type="html">&lt;p&gt;Tech64DD: formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains some fixes for common issues with [[Wii-Linux]].&lt;br /&gt;
&lt;br /&gt;
== [[Gumboot]] isn&#039;t loading!  What&#039;s going on? ==&lt;br /&gt;
Depends on what&#039;s wrong with it.&lt;br /&gt;
* &#039;&#039;&#039;Black screen?  Immediate reboot?&#039;&#039;&#039;  Check if you have [[BootMii]] installed correctly.&lt;br /&gt;
* &#039;&#039;&#039;Blinking disk slot?&#039;&#039;&#039;  Check if your SD Card is inserted properly, this means that BootMii can&#039;t find &amp;lt;code&amp;gt;bootmii/ppcboot.elf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;bootmii/armboot.bin&amp;lt;/code&amp;gt;, or its config.&lt;br /&gt;
* &#039;&#039;&#039;HBC / Priiloader won&#039;t load BootMii&#039;&#039;&#039;?  Check if BootMii is installed correctly as an IOS - these can&#039;t load BootMii as boot2.&lt;br /&gt;
&lt;br /&gt;
== I get an error from Gumboot trying to load the kernel!  What&#039;s wrong? ==&lt;br /&gt;
Check that you copied all of the files properly.  It&#039;s possible that the kernel was corrupted while copying it.  &lt;br /&gt;
Try putting the SD Card in a computer, deleting wiilinux/vX_X.krn, and copying it out of the SD Files archive.&lt;br /&gt;
&lt;br /&gt;
== How do I modify the kernel arguments? ==&lt;br /&gt;
Open the kernel binary (&amp;lt;code&amp;gt;wiilinux/vX_X.krn&amp;lt;/code&amp;gt;) in a hex editor, search for the ASCII text &amp;lt;code&amp;gt;root=&amp;lt;/code&amp;gt;, then user overwrite mode to modify the arguments (tip: overwrite the large chunk of padding, that&#039;s what it&#039;s there for!)&lt;br /&gt;
&lt;br /&gt;
== The kernel seems to load (green bar on Gumboot), but then the screen stays on garbled colors, fully black, or black screen with the loader text!  What&#039;s wrong? ==&lt;br /&gt;
This could be tons of things.&lt;br /&gt;
* &#039;&#039;&#039;If you&#039;re getting the garbled colors&#039;&#039;&#039;, it means the kernel failed to initialize very early on, before initializing the [[AVE-RVL]].&lt;br /&gt;
* &#039;&#039;&#039;If you&#039;re getting a fully black screen without even the loader text at the top&#039;&#039;&#039;, that means that it failed after initializing the AVE-RVL, gcnfb, but before displaying the loader text.&lt;br /&gt;
* &#039;&#039;&#039;If you&#039;re getting a black screen with the loader text at the top left&#039;&#039;&#039;, it means the kernel has initialized a decent bit, but something isn&#039;t working.  Try setting the kernel arguments (see the previous answer, right above this), replace the loglevel=x parameter with loglevel=7 to get full kernel logs on the screen, or check a USB gecko.&lt;br /&gt;
For all of these, having a [[USB Gecko]] would be very beneficial.&lt;br /&gt;
&lt;br /&gt;
== I see the login screen, but I can&#039;t type on my USB keyboard, what gives? ==&lt;br /&gt;
Check your USB keyboard connection, is it plugged in, and plugged in all the way? (more common than you might think)  &lt;br /&gt;
Try pressing num lock/caps lock/scroll lock, do the lights come on?  If not, check if your keyboard is just dead (plug it into another device).  If you&#039;ve verified all of this, and it still doesn&#039;t work, ask for assistance.&lt;br /&gt;
&lt;br /&gt;
== Why is my WiFi so slow?  I can&#039;t even get 1MB/s! ==&lt;br /&gt;
That&#039;s just how it is.  It&#039;s [https://web.archive.org/web/20180817063137/http://www.gc-linux.org/wiki/Wii:WLAN hardware limitations], that&#039;s how it is in all standard Wii software as well, the Wii&#039;s WiFi chipset is just that slow.  I highly recommend using USB Ethernet, or a supported USB WiFI adapter wherever possible if you care about speed.&lt;br /&gt;
&lt;br /&gt;
== Why isn&#039;t [some package name here] in the ArchPOWER repos? ==&lt;br /&gt;
I don&#039;t maintain the [[ArchPOWER]] repos, but I do maintain a small group of extra packages for ArchPOWER in a seperate repo.&lt;br /&gt;
Ask me, I&#039;ll check for you, and build it if possible.&lt;br /&gt;
&lt;br /&gt;
== Why is logging in so slow? ==&lt;br /&gt;
Arch (and by extension, ArchPOWER) uses a fairly inefficient (though more secure) hashing algorithm for the password by default, that is quite slow on the Wii&#039;s mediocre CPU.  If you&#039;d like a better balance between security and speed, you can use SHA256 instead.&lt;br /&gt;
Simply edit &amp;lt;code&amp;gt;/etc/login.defs&amp;lt;/code&amp;gt;, then replace &amp;lt;code&amp;gt;YESCRYPT&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;SHA256&amp;lt;/code&amp;gt;, then regenerate the password of each user.&lt;br /&gt;
&#039;&#039;&#039;New rootfs&#039;s have this by default.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Why I get out-of-memory errors despite turning on a swapfile/swap partition? ==&lt;br /&gt;
This is a bug in the default Wii-Linux configuration that was shipped for quite some time, but eventually fixed.&amp;lt;br&amp;gt;&lt;br /&gt;
You can either:&amp;lt;br&amp;gt;&lt;br /&gt;
A) Update your system (the latest wii-linux-meta fixes it)&amp;lt;br&amp;gt;&lt;br /&gt;
B) Delete, or fix, &amp;lt;code&amp;gt;/etc/udev/rules.d/99-zram.rules&amp;lt;/code&amp;gt; to not have 100M allocated&lt;br /&gt;
&lt;br /&gt;
== Can I play [insert game here] on Wii Linux? ==&lt;br /&gt;
Short Answer: &#039;&#039;&#039;No&#039;&#039;&#039;.  Stop trying.  You don&#039;t want to get it to work.&amp;lt;br&amp;gt;&lt;br /&gt;
Long answer: Well.... technically, yes.&lt;br /&gt;
It&#039;s very likely compiled for x86, so it&#039;ll need to be emulated.  That&#039;s already unusably slow on the Wii, but let&#039;s carry on.&lt;br /&gt;
There&#039;s no graphics acceleration of any kind, so it&#039;ll be rendering on the emulated x86 CPU, and then drawing to the screen w/ native PPC code, but still on the CPU&lt;br /&gt;
So, yes, it may execute the game&#039;s code, technically, but you sure as hell won&#039;t be &amp;quot;playing&amp;quot; it.&lt;/div&gt;</summary>
		<author><name>Tech64DD</name></author>
	</entry>
	<entry>
		<id>https://wiki.wii-linux.org/index.php?title=Troubleshooting/FAQ&amp;diff=171</id>
		<title>Troubleshooting/FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.wii-linux.org/index.php?title=Troubleshooting/FAQ&amp;diff=171"/>
		<updated>2025-05-08T09:56:55Z</updated>

		<summary type="html">&lt;p&gt;Tech64DD: formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains some fixes for common issues with [[Wii-Linux]].&lt;br /&gt;
&lt;br /&gt;
== [[Gumboot]] isn&#039;t loading!  What&#039;s going on? ==&lt;br /&gt;
Depends on what&#039;s wrong with it.&lt;br /&gt;
* &#039;&#039;&#039;Black screen?  Immediate reboot?&#039;&#039;&#039;  Check if you have [[BootMii]] installed correctly.&lt;br /&gt;
* &#039;&#039;&#039;Blinking disk slot?&#039;&#039;&#039;  Check if your SD Card is inserted properly, this means that BootMii can&#039;t find &amp;lt;code&amp;gt;bootmii/ppcboot.elf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;bootmii/armboot.bin&amp;lt;/code&amp;gt;, or its config.&lt;br /&gt;
* &#039;&#039;&#039;HBC / Priiloader won&#039;t load BootMii&#039;&#039;&#039;?  Check if BootMii is installed correctly as an IOS - these can&#039;t load BootMii as boot2.&lt;br /&gt;
&lt;br /&gt;
== I get an error from Gumboot trying to load the kernel!  What&#039;s wrong? ==&lt;br /&gt;
Check that you copied all of the files properly.  It&#039;s possible that the kernel was corrupted while copying it.  &lt;br /&gt;
Try putting the SD Card in a computer, deleting wiilinux/vX_X.krn, and copying it out of the SD Files archive.&lt;br /&gt;
&lt;br /&gt;
== How do I modify the kernel arguments? ==&lt;br /&gt;
Open the kernel binary (&amp;lt;code&amp;gt;wiilinux/vX_X.krn&amp;lt;/code&amp;gt;) in a hex editor, search for the ASCII text &amp;lt;code&amp;gt;root=&amp;lt;/code&amp;gt;, then user overwrite mode to modify the arguments (tip: overwrite the large chunk of padding, that&#039;s what it&#039;s there for!)&lt;br /&gt;
&lt;br /&gt;
== The kernel seems to load (green bar on Gumboot), but then the screen stays on garbled colors, fully black, or black screen with the loader text!  What&#039;s wrong? ==&lt;br /&gt;
This could be tons of things.&lt;br /&gt;
* &#039;&#039;&#039;If you&#039;re getting the garbled colors&#039;&#039;&#039;, it means the kernel failed to initialize very early on, before initializing the [[AVE-RVL]].&lt;br /&gt;
* &#039;&#039;&#039;If you&#039;re getting a fully black screen without even the loader text at the top&#039;&#039;&#039;, that means that it failed after initializing the AVE-RVL, gcnfb, but before displaying the loader text.&lt;br /&gt;
* &#039;&#039;&#039;If you&#039;re getting a black screen with the loader text at the top left&#039;&#039;&#039;, it means the kernel has initialized a decent bit, but something isn&#039;t working.  Try setting the kernel arguments (see the previous answer, right above this), replace the loglevel=x parameter with loglevel=7 to get full kernel logs on the screen, or check a USB gecko.&lt;br /&gt;
For all of these, having a [[USB Gecko]] would be very beneficial.&lt;br /&gt;
&lt;br /&gt;
== I see the login screen, but I can&#039;t type on my USB keyboard, what gives? ==&lt;br /&gt;
Check your USB keyboard connection, is it plugged in, and plugged in all the way? (more common than you might think)  &lt;br /&gt;
Try pressing num lock/caps lock/scroll lock, do the lights come on?  If not, check if your keyboard is just dead (plug it into another device).  If you&#039;ve verified all of this, and it still doesn&#039;t work, ask for assistance.&lt;br /&gt;
&lt;br /&gt;
== Why is my WiFi so slow?  I can&#039;t even get 1MB/s! ==&lt;br /&gt;
That&#039;s just how it is.  It&#039;s [https://web.archive.org/web/20180817063137/http://www.gc-linux.org/wiki/Wii:WLAN hardware limitations], that&#039;s how it is in all standard Wii software as well, the Wii&#039;s WiFi chipset is just that slow.  I highly recommend using USB Ethernet, or a supported USB WiFI adapter wherever possible if you care about speed.&lt;br /&gt;
&lt;br /&gt;
== Why isn&#039;t [some package name here] in the ArchPOWER repos? ==&lt;br /&gt;
I don&#039;t maintain the [[ArchPOWER]] repos, but I do maintain a small group of extra packages for ArchPOWER in a seperate repo.&lt;br /&gt;
Ask me, I&#039;ll check for you, and build it if possible.&lt;br /&gt;
&lt;br /&gt;
== Why is logging in so slow? ==&lt;br /&gt;
Arch (and by extension, ArchPOWER) uses a fairly inefficient (though more secure) hashing algorithm for the password by default, that is quite slow on the Wii&#039;s mediocre CPU.  If you&#039;d like a better balance between security and speed, you can use SHA256 instead.&lt;br /&gt;
Simply edit &amp;lt;code&amp;gt;/etc/login.defs&amp;lt;/code&amp;gt;, then replace &amp;lt;code&amp;gt;YESCRYPT&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;SHA256&amp;lt;/code&amp;gt;, then regenerate the password of each user.&lt;br /&gt;
&#039;&#039;&#039;New rootfs&#039;s have this by default.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Why I get out-of-memory errors despite turning on a swapfile/swap partition? ==&lt;br /&gt;
This is a bug in the default Wii-Linux configuration that was shipped for quite some time, but eventually fixed.&lt;br /&gt;
You can either:&lt;br /&gt;
A) Update your system (the latest wii-linux-meta fixes it)&lt;br /&gt;
B) Delete, or fix, &amp;lt;code&amp;gt;/etc/udev/rules.d/99-zram.rules&amp;lt;/code&amp;gt; to not have 100M allocated&lt;br /&gt;
&lt;br /&gt;
== Can I play [insert game here] on Wii Linux? ==&lt;br /&gt;
Short Answer: &#039;&#039;&#039;No&#039;&#039;&#039;.  Stop trying.  You don&#039;t want to get it to work.&amp;lt;br&amp;gt;&lt;br /&gt;
Long answer: Well.... technically, yes.&lt;br /&gt;
It&#039;s very likely compiled for x86, so it&#039;ll need to be emulated.  That&#039;s already unusably slow on the Wii, but let&#039;s carry on.&lt;br /&gt;
There&#039;s no graphics acceleration of any kind, so it&#039;ll be rendering on the emulated x86 CPU, and then drawing to the screen w/ native PPC code, but still on the CPU&lt;br /&gt;
So, yes, it may execute the game&#039;s code, technically, but you sure as hell won&#039;t be &amp;quot;playing&amp;quot; it.&lt;/div&gt;</summary>
		<author><name>Tech64DD</name></author>
	</entry>
	<entry>
		<id>https://wiki.wii-linux.org/index.php?title=File:Kernelport_flowchart.png&amp;diff=168</id>
		<title>File:Kernelport flowchart.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.wii-linux.org/index.php?title=File:Kernelport_flowchart.png&amp;diff=168"/>
		<updated>2025-05-07T19:41:34Z</updated>

		<summary type="html">&lt;p&gt;Tech64DD: Techflash&amp;#039;s old code porting guide turned into a flowchart&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Techflash&#039;s old code porting guide turned into a flowchart&lt;/div&gt;</summary>
		<author><name>Tech64DD</name></author>
	</entry>
	<entry>
		<id>https://wiki.wii-linux.org/index.php?title=Useful_Development_Info&amp;diff=167</id>
		<title>Useful Development Info</title>
		<link rel="alternate" type="text/html" href="https://wiki.wii-linux.org/index.php?title=Useful_Development_Info&amp;diff=167"/>
		<updated>2025-05-07T19:29:10Z</updated>

		<summary type="html">&lt;p&gt;Tech64DD: added flowchart to make it easier to understand&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains some information about the [[GameCube]], [[Wii]] or [[Wii U]] hardware or software, Linux kernel and general [[Wii-Linux]] topics that can be useful for development.&lt;br /&gt;
&lt;br /&gt;
== History of the GameCube and Wii GPUs ==&lt;br /&gt;
&#039;&#039;&#039;Warning&#039;&#039;&#039;: The source of the following info is a Discord message that Techflash wrote based on his memory of various other sources, so it might not be 100% accurate.&lt;br /&gt;
&lt;br /&gt;
the development of the Flipper and Hollywood is actually kind of a funny story&amp;lt;br&amp;gt;&lt;br /&gt;
Nintendo contracted SGI to make the graphics for the N64, as is very well known&amp;lt;br&amp;gt;&lt;br /&gt;
there was a specific division in SGI to handle it, it was such a big deal, iirc the &amp;quot;Nintendo Operations Division&amp;quot;?&amp;lt;br&amp;gt;&lt;br /&gt;
a bunch of the employees from that division spun off into their own company, ArtX Inc&amp;lt;br&amp;gt;&lt;br /&gt;
Nintendo contracted ArtX Inc to design the GPU for the GameCube, however, only a year before the launch of the GameCube, ArtX got acquired by ATI&amp;lt;br&amp;gt;&lt;br /&gt;
that&#039;s how the GameCube got the ATI branding, because ATI was now the parent company of ArtX -  technically, the GPU wasn&#039;t designed by ATI, and has no relation whatsoever to any ATI Radeon GPU&lt;br /&gt;
&lt;br /&gt;
== Wii (and Wii-Linux) boot process ==&lt;br /&gt;
=== Common ===&lt;br /&gt;
 | Your Wii starts&lt;br /&gt;
 |&lt;br /&gt;
 | boot0 (stored in mask ROM inside the Starlet)&lt;br /&gt;
 |&lt;br /&gt;
 | All looks good with boot1?  If so, continue, if not, die.&lt;br /&gt;
 |&lt;br /&gt;
 | boot1 (stored on NAND)&lt;br /&gt;
 |&lt;br /&gt;
 | All looks good with boot2?  If so, continue, if not, die.&lt;br /&gt;
 |&lt;br /&gt;
 | boot2 (stored on NAND)&lt;br /&gt;
 |&lt;br /&gt;
 | BRANCH - If BootMii installed as boot2, skip the to the step marked with &#039;&#039;&#039;[*]&#039;&#039;&#039;.  Otherwise, continue directly below this&lt;br /&gt;
 |&lt;br /&gt;
 | PowerPC startup and SysMenu loads (I think?  I can&#039;t find any info on necessarily when it happens, but I know it doesn&#039;t happen until at &#039;&#039;&#039;least&#039;&#039;&#039; here)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Linux, Gumboot, BootMii specific ===&lt;br /&gt;
 | Depends on the user&#039;s setup, but somehow load BootMii, either via IOS or boot2&lt;br /&gt;
 |&lt;br /&gt;
 | &#039;&#039;&#039;[*]&#039;&#039;&#039; BootMii begins trying to load armboot.bin from SD&lt;br /&gt;
 |&lt;br /&gt;
 | armboot.bin (MINI) loaded and begins executing&lt;br /&gt;
 |&lt;br /&gt;
 | &#039;&#039;&#039;BRANCH&#039;&#039;&#039; - If stock MINI, load &amp;lt;code&amp;gt;bootmii/ppcboot.elf&amp;lt;/code&amp;gt;.  If neagix modified MINI, load &amp;lt;code&amp;gt;gumboot/gumboot.elf&amp;lt;/code&amp;gt;, then if failed, &amp;lt;code&amp;gt;bootmii/gui.elf&amp;lt;/code&amp;gt;, then if failed, &amp;lt;code&amp;gt;bootmii/ppcboot.elf&amp;lt;/code&amp;gt;.&lt;br /&gt;
 |&lt;br /&gt;
 | Code is now loaded on the Broadway and begins executing&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Linux specific ===&lt;br /&gt;
 | User selects Linux kernel, either via BootMii&#039;s file picker, or Gumboot&#039;s boot menu&lt;br /&gt;
 |&lt;br /&gt;
 | Linux kernel loaded from SD, into RAM, and starts executing&lt;br /&gt;
 |&lt;br /&gt;
 | Regular Linux kernel initialization&lt;br /&gt;
 |&lt;br /&gt;
 | Linux loads the compiled-in initramfs CPIO, and executed init from it&lt;br /&gt;
 |&lt;br /&gt;
 | internal-loader determines a valid version number to try to use (e.g. &amp;lt;code&amp;gt;4.5.0&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;v4_5_0.ldr&amp;lt;/code&amp;gt;) finds any partition on SD that holds that file&lt;br /&gt;
 |&lt;br /&gt;
 | That file is found, mounted, and swtich_root&#039;ed into.  Otherwise, die here&lt;br /&gt;
 |&lt;br /&gt;
 | the loader launches the boot menu, letting the user pick a distro to boot&lt;br /&gt;
 |&lt;br /&gt;
 | distro is picked, mounted, and switch_root&#039;ed into&lt;br /&gt;
 |&lt;br /&gt;
 | regular Linux boot process for your selected distro continues here&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Techflash&#039;s method of porting over old kernel code ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
my personal process for porting over really old code like that is:&amp;lt;br&amp;gt;&lt;br /&gt;
start with the last commit in which your &amp;quot;good&amp;quot; code still exists, if upstream, or is known good, if not&amp;lt;br&amp;gt;&lt;br /&gt;
sanity check - does it actually work there?  Yes - continue.  No - figure out what&#039;s wrong (bad toolchain?), fix it, continue.&amp;lt;br&amp;gt;&lt;br /&gt;
jump forward a few releases&amp;lt;br&amp;gt;&lt;br /&gt;
add your code in&amp;lt;br&amp;gt;&lt;br /&gt;
Build and test.&amp;lt;br&amp;gt;&lt;br /&gt;
If it works out of the box, save this as the last known commit, jump to step 3.&amp;lt;br&amp;gt;&lt;br /&gt;
If it works after minor fixes, save that code as the new &amp;quot;good&amp;quot; code, save this as the last known good commit, and jump to step 3.&amp;lt;br&amp;gt;&lt;br /&gt;
If it&#039;s horribly broken, go back to the last known good commit, and jump forward by less releases this time&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
eventually, you&#039;ll narrow down between 2 releases, where the &amp;quot;major&amp;quot; issues occurred, you can now scan through the git log between them, and find the commit removing / renaming whatever functions, variables, etc, your code needs. You can now look back through the previous few commits, you&#039;ll probably see some changes happening to other drivers in preparation for the removal / rename / whatever.  Apply those to your driver, rebuild, and pray&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That&#039;s my personal process anyways, just figured I would drop it here in case it may be useful&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
[[File:Kernelport flowchart.png]]&lt;br /&gt;
&lt;br /&gt;
== Linux graphics stack simplified ==&lt;br /&gt;
* Kernel&lt;br /&gt;
** DRM (Direct Rendering Manager, a basic layer for hw accel)&lt;br /&gt;
** (legacy, what the Wii uses) fbdev, a simple framebuffer with no inherent acceleration support&lt;br /&gt;
** KMS (Kernel Mode Setting, kernel sets up a framebuffer on top of DRM.  Handles the framebuffer TTY when using DRM)&lt;br /&gt;
* Userspace&lt;br /&gt;
** Xorg Driver (e.g. xf86-video-blahblah), provides 2D acceleration under Xorg&lt;br /&gt;
** Mesa Driver (e.g. /usr/lib/dri/blah_drv.so), provides 3D acceleration&lt;br /&gt;
** Mesa provides an OpenGL (and Vulkan iirc) interface to applications&lt;br /&gt;
&lt;br /&gt;
== Tips for reducing memory and CPU usage ==&lt;br /&gt;
* Reduce the systemd-journald max memory usage by editing &amp;lt;code&amp;gt;/etc/systemd/journald.conf&amp;lt;/code&amp;gt;, setting &amp;lt;code&amp;gt;Storage=volatile&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;RuntimeMaxUse=500K&amp;lt;/code&amp;gt;.  Without this, it uses around &#039;&#039;&#039;5MB&#039;&#039;&#039;&lt;br /&gt;
* Disable &amp;lt;code&amp;gt;systemd-userdbd&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;systemctl disable --now systemd-userdbd&amp;lt;/code&amp;gt;, you probably don&#039;t need this.&lt;br /&gt;
* Switch to an alternative network manager, or none at all if you want an offline experience.  While I ship NetworkManager by default, due to it&#039;s ease of setup, it is rather bulky, using about &#039;&#039;&#039;9MB&#039;&#039;&#039;.  Alternative networking managers may be more lightweight.&lt;br /&gt;
* Replace &amp;lt;code&amp;gt;/bin/sh&amp;lt;/code&amp;gt;&#039;s symlink to &amp;lt;code&amp;gt;bash&amp;lt;/code&amp;gt; with one to &amp;lt;code&amp;gt;dash&amp;lt;/code&amp;gt;.  Since &amp;lt;code&amp;gt;/bin/sh&amp;lt;/code&amp;gt; is meant to be the POSIX conformant shell, applications theoretically shouldn&#039;t rely on bashisms to be present.  Replacing it with &amp;lt;code&amp;gt;dash&amp;lt;/code&amp;gt; should free up a variable amount of RAM, depending on how many shell instances are running. To do this, &amp;lt;code&amp;gt;pacman -S dash&amp;lt;/code&amp;gt; to install it, then, as root, &amp;lt;code&amp;gt;ln -sf dash /bin/sh&amp;lt;/code&amp;gt;&lt;br /&gt;
* Tips specific to running a graphical environment&lt;br /&gt;
** Disable &amp;lt;code&amp;gt;at-spi-dbus-bus&amp;lt;/code&amp;gt;, it&#039;s a systemd user service.  Unless you&#039;re using accessibility features, this is just sitting here sucking up 10MB.  Run &amp;lt;code&amp;gt;systemctl --user mask at-spi-dbus-bus&amp;lt;/code&amp;gt;.&lt;br /&gt;
** Also, set the &amp;lt;code&amp;gt;GTK_ALLY&amp;lt;/code&amp;gt; environment variable to &amp;lt;code&amp;gt;none&amp;lt;/code&amp;gt;.  This depends on how your DE/WM handles environment variables.  If running &amp;lt;code&amp;gt;startx&amp;lt;/code&amp;gt; from a terminal, where &amp;lt;code&amp;gt;~/.xinitrc&amp;lt;/code&amp;gt; is parsed, simply add &amp;lt;code&amp;gt;export GTK_ALLY=none&amp;lt;/code&amp;gt; at the top.&lt;br /&gt;
** Reboot to apply the changes&lt;br /&gt;
* If using &amp;lt;code&amp;gt;pipewire&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;pipewire-pulse&amp;lt;/code&amp;gt;, DON&#039;T! They&#039;re significantly slower than standard &amp;lt;code&amp;gt;pulseaudio&amp;lt;/code&amp;gt;, which works just as well on the Wii.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note that these do cause the loss of some important functionality&#039;&#039;&#039;&lt;br /&gt;
* Tips that will break things&lt;br /&gt;
** &#039;&#039;&#039;If you do this, pipewire will stop working.&#039;&#039;&#039;  Disable &amp;lt;code&amp;gt;wireplumber&amp;lt;/code&amp;gt;, run the following, &amp;lt;code&amp;gt;systemctl --user disable --now wireplumber&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;systemctl --user mask wireplumber&amp;lt;/code&amp;gt;.  Without this, it uses &#039;&#039;&#039;10MB&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Some useful datasheets, and most notable, their operating temperatures, for parts of the Wii ==&lt;br /&gt;
&amp;quot;observed at&amp;quot; readings are with the case of, heatsink of Broadway + Hollywood, and no fan - left running for 1 hour.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SHARP Voltage Regulator - [https://www.digikey.in/htmldatasheets/production/44030/0/0/1/pq070xh02zxh.html] (85C max - observed at 47C)&lt;br /&gt;
&lt;br /&gt;
64MB (512Mbit) GDDR3 - [https://www.alldatasheet.com/datasheet-pdf/view/207161/QIMONDA/HYB18H512321BF.html] (85C max - observed at 57C)&lt;br /&gt;
&lt;br /&gt;
Various off-the-shelf power circuitry (generally very high maximum temperature - observed between 45C to 52C)&lt;/div&gt;</summary>
		<author><name>Tech64DD</name></author>
	</entry>
	<entry>
		<id>https://wiki.wii-linux.org/index.php?title=Useful_Development_Info&amp;diff=165</id>
		<title>Useful Development Info</title>
		<link rel="alternate" type="text/html" href="https://wiki.wii-linux.org/index.php?title=Useful_Development_Info&amp;diff=165"/>
		<updated>2025-05-07T19:00:24Z</updated>

		<summary type="html">&lt;p&gt;Tech64DD: better readability of the kernel code porting &amp;quot;guide&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains some information about the [[GameCube]], [[Wii]] or [[Wii U]] hardware or software, Linux kernel and general [[Wii-Linux]] topics that can be useful for development.&lt;br /&gt;
&lt;br /&gt;
== History of the GameCube and Wii GPUs ==&lt;br /&gt;
&#039;&#039;&#039;Warning&#039;&#039;&#039;: The source of the following info is a Discord message that Techflash wrote based on his memory of various other sources, so it might not be 100% accurate.&lt;br /&gt;
&lt;br /&gt;
the development of the Flipper and Hollywood is actually kind of a funny story&amp;lt;br&amp;gt;&lt;br /&gt;
Nintendo contracted SGI to make the graphics for the N64, as is very well known&amp;lt;br&amp;gt;&lt;br /&gt;
there was a specific division in SGI to handle it, it was such a big deal, iirc the &amp;quot;Nintendo Operations Division&amp;quot;?&amp;lt;br&amp;gt;&lt;br /&gt;
a bunch of the employees from that division spun off into their own company, ArtX Inc&amp;lt;br&amp;gt;&lt;br /&gt;
Nintendo contracted ArtX Inc to design the GPU for the GameCube, however, only a year before the launch of the GameCube, ArtX got acquired by ATI&amp;lt;br&amp;gt;&lt;br /&gt;
that&#039;s how the GameCube got the ATI branding, because ATI was now the parent company of ArtX -  technically, the GPU wasn&#039;t designed by ATI, and has no relation whatsoever to any ATI Radeon GPU&lt;br /&gt;
&lt;br /&gt;
== Wii (and Wii-Linux) boot process ==&lt;br /&gt;
=== Common ===&lt;br /&gt;
 | Your Wii starts&lt;br /&gt;
 |&lt;br /&gt;
 | boot0 (stored in mask ROM inside the Starlet)&lt;br /&gt;
 |&lt;br /&gt;
 | All looks good with boot1?  If so, continue, if not, die.&lt;br /&gt;
 |&lt;br /&gt;
 | boot1 (stored on NAND)&lt;br /&gt;
 |&lt;br /&gt;
 | All looks good with boot2?  If so, continue, if not, die.&lt;br /&gt;
 |&lt;br /&gt;
 | boot2 (stored on NAND)&lt;br /&gt;
 |&lt;br /&gt;
 | BRANCH - If BootMii installed as boot2, skip the to the step marked with &#039;&#039;&#039;[*]&#039;&#039;&#039;.  Otherwise, continue directly below this&lt;br /&gt;
 |&lt;br /&gt;
 | PowerPC startup and SysMenu loads (I think?  I can&#039;t find any info on necessarily when it happens, but I know it doesn&#039;t happen until at &#039;&#039;&#039;least&#039;&#039;&#039; here)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Linux, Gumboot, BootMii specific ===&lt;br /&gt;
 | Depends on the user&#039;s setup, but somehow load BootMii, either via IOS or boot2&lt;br /&gt;
 |&lt;br /&gt;
 | &#039;&#039;&#039;[*]&#039;&#039;&#039; BootMii begins trying to load armboot.bin from SD&lt;br /&gt;
 |&lt;br /&gt;
 | armboot.bin (MINI) loaded and begins executing&lt;br /&gt;
 |&lt;br /&gt;
 | &#039;&#039;&#039;BRANCH&#039;&#039;&#039; - If stock MINI, load &amp;lt;code&amp;gt;bootmii/ppcboot.elf&amp;lt;/code&amp;gt;.  If neagix modified MINI, load &amp;lt;code&amp;gt;gumboot/gumboot.elf&amp;lt;/code&amp;gt;, then if failed, &amp;lt;code&amp;gt;bootmii/gui.elf&amp;lt;/code&amp;gt;, then if failed, &amp;lt;code&amp;gt;bootmii/ppcboot.elf&amp;lt;/code&amp;gt;.&lt;br /&gt;
 |&lt;br /&gt;
 | Code is now loaded on the Broadway and begins executing&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Linux specific ===&lt;br /&gt;
 | User selects Linux kernel, either via BootMii&#039;s file picker, or Gumboot&#039;s boot menu&lt;br /&gt;
 |&lt;br /&gt;
 | Linux kernel loaded from SD, into RAM, and starts executing&lt;br /&gt;
 |&lt;br /&gt;
 | Regular Linux kernel initialization&lt;br /&gt;
 |&lt;br /&gt;
 | Linux loads the compiled-in initramfs CPIO, and executed init from it&lt;br /&gt;
 |&lt;br /&gt;
 | internal-loader determines a valid version number to try to use (e.g. &amp;lt;code&amp;gt;4.5.0&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;v4_5_0.ldr&amp;lt;/code&amp;gt;) finds any partition on SD that holds that file&lt;br /&gt;
 |&lt;br /&gt;
 | That file is found, mounted, and swtich_root&#039;ed into.  Otherwise, die here&lt;br /&gt;
 |&lt;br /&gt;
 | the loader launches the boot menu, letting the user pick a distro to boot&lt;br /&gt;
 |&lt;br /&gt;
 | distro is picked, mounted, and switch_root&#039;ed into&lt;br /&gt;
 |&lt;br /&gt;
 | regular Linux boot process for your selected distro continues here&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Techflash&#039;s method of porting over old kernel code ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
my personal process for porting over really old code like that is:&amp;lt;br&amp;gt;&lt;br /&gt;
start with the last commit in which your &amp;quot;good&amp;quot; code still exists, if upstream, or is known good, if not&amp;lt;br&amp;gt;&lt;br /&gt;
sanity check - does it actually work there?  Yes - continue.  No - figure out what&#039;s wrong (bad toolchain?), fix it, continue.&amp;lt;br&amp;gt;&lt;br /&gt;
jump forward a few releases&amp;lt;br&amp;gt;&lt;br /&gt;
add your code in&amp;lt;br&amp;gt;&lt;br /&gt;
Build and test.&amp;lt;br&amp;gt;&lt;br /&gt;
If it works out of the box, save this as the last known commit, jump to step 3.&amp;lt;br&amp;gt;&lt;br /&gt;
If it works after minor fixes, save that code as the new &amp;quot;good&amp;quot; code, save this as the last known good commit, and jump to step 3.&amp;lt;br&amp;gt;&lt;br /&gt;
If it&#039;s horribly broken, go back to the last known good commit, and jump forward by less releases this time&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
eventually, you&#039;ll narrow down between 2 releases, where the &amp;quot;major&amp;quot; issues occurred, you can now scan through the git log between them, and find the commit removing / renaming whatever functions, variables, etc, your code needs. You can now look back through the previous few commits, you&#039;ll probably see some changes happening to other drivers in preparation for the removal / rename / whatever.  Apply those to your driver, rebuild, and pray&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That&#039;s my personal process anyways, just figured I would drop it here in case it may be useful&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Linux graphics stack simplified ==&lt;br /&gt;
* Kernel&lt;br /&gt;
** DRM (Direct Rendering Manager, a basic layer for hw accel)&lt;br /&gt;
** (legacy, what the Wii uses) fbdev, a simple framebuffer with no inherent acceleration support&lt;br /&gt;
** KMS (Kernel Mode Setting, kernel sets up a framebuffer on top of DRM.  Handles the framebuffer TTY when using DRM)&lt;br /&gt;
* Userspace&lt;br /&gt;
** Xorg Driver (e.g. xf86-video-blahblah), provides 2D acceleration under Xorg&lt;br /&gt;
** Mesa Driver (e.g. /usr/lib/dri/blah_drv.so), provides 3D acceleration&lt;br /&gt;
** Mesa provides an OpenGL (and Vulkan iirc) interface to applications&lt;br /&gt;
&lt;br /&gt;
== Tips for reducing memory and CPU usage ==&lt;br /&gt;
* Reduce the systemd-journald max memory usage by editing &amp;lt;code&amp;gt;/etc/systemd/journald.conf&amp;lt;/code&amp;gt;, setting &amp;lt;code&amp;gt;Storage=volatile&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;RuntimeMaxUse=500K&amp;lt;/code&amp;gt;.  Without this, it uses around &#039;&#039;&#039;5MB&#039;&#039;&#039;&lt;br /&gt;
* Disable &amp;lt;code&amp;gt;systemd-userdbd&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;systemctl disable --now systemd-userdbd&amp;lt;/code&amp;gt;, you probably don&#039;t need this.&lt;br /&gt;
* Switch to an alternative network manager, or none at all if you want an offline experience.  While I ship NetworkManager by default, due to it&#039;s ease of setup, it is rather bulky, using about &#039;&#039;&#039;9MB&#039;&#039;&#039;.  Alternative networking managers may be more lightweight.&lt;br /&gt;
* Replace &amp;lt;code&amp;gt;/bin/sh&amp;lt;/code&amp;gt;&#039;s symlink to &amp;lt;code&amp;gt;bash&amp;lt;/code&amp;gt; with one to &amp;lt;code&amp;gt;dash&amp;lt;/code&amp;gt;.  Since &amp;lt;code&amp;gt;/bin/sh&amp;lt;/code&amp;gt; is meant to be the POSIX conformant shell, applications theoretically shouldn&#039;t rely on bashisms to be present.  Replacing it with &amp;lt;code&amp;gt;dash&amp;lt;/code&amp;gt; should free up a variable amount of RAM, depending on how many shell instances are running. To do this, &amp;lt;code&amp;gt;pacman -S dash&amp;lt;/code&amp;gt; to install it, then, as root, &amp;lt;code&amp;gt;ln -sf dash /bin/sh&amp;lt;/code&amp;gt;&lt;br /&gt;
* Tips specific to running a graphical environment&lt;br /&gt;
** Disable &amp;lt;code&amp;gt;at-spi-dbus-bus&amp;lt;/code&amp;gt;, it&#039;s a systemd user service.  Unless you&#039;re using accessibility features, this is just sitting here sucking up 10MB.  Run &amp;lt;code&amp;gt;systemctl --user mask at-spi-dbus-bus&amp;lt;/code&amp;gt;.&lt;br /&gt;
** Also, set the &amp;lt;code&amp;gt;GTK_ALLY&amp;lt;/code&amp;gt; environment variable to &amp;lt;code&amp;gt;none&amp;lt;/code&amp;gt;.  This depends on how your DE/WM handles environment variables.  If running &amp;lt;code&amp;gt;startx&amp;lt;/code&amp;gt; from a terminal, where &amp;lt;code&amp;gt;~/.xinitrc&amp;lt;/code&amp;gt; is parsed, simply add &amp;lt;code&amp;gt;export GTK_ALLY=none&amp;lt;/code&amp;gt; at the top.&lt;br /&gt;
** Reboot to apply the changes&lt;br /&gt;
* If using &amp;lt;code&amp;gt;pipewire&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;pipewire-pulse&amp;lt;/code&amp;gt;, DON&#039;T! They&#039;re significantly slower than standard &amp;lt;code&amp;gt;pulseaudio&amp;lt;/code&amp;gt;, which works just as well on the Wii.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note that these do cause the loss of some important functionality&#039;&#039;&#039;&lt;br /&gt;
* Tips that will break things&lt;br /&gt;
** &#039;&#039;&#039;If you do this, pipewire will stop working.&#039;&#039;&#039;  Disable &amp;lt;code&amp;gt;wireplumber&amp;lt;/code&amp;gt;, run the following, &amp;lt;code&amp;gt;systemctl --user disable --now wireplumber&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;systemctl --user mask wireplumber&amp;lt;/code&amp;gt;.  Without this, it uses &#039;&#039;&#039;10MB&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Some useful datasheets, and most notable, their operating temperatures, for parts of the Wii ==&lt;br /&gt;
&amp;quot;observed at&amp;quot; readings are with the case of, heatsink of Broadway + Hollywood, and no fan - left running for 1 hour.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SHARP Voltage Regulator - [https://www.digikey.in/htmldatasheets/production/44030/0/0/1/pq070xh02zxh.html] (85C max - observed at 47C)&lt;br /&gt;
&lt;br /&gt;
64MB (512Mbit) GDDR3 - [https://www.alldatasheet.com/datasheet-pdf/view/207161/QIMONDA/HYB18H512321BF.html] (85C max - observed at 57C)&lt;br /&gt;
&lt;br /&gt;
Various off-the-shelf power circuitry (generally very high maximum temperature - observed between 45C to 52C)&lt;/div&gt;</summary>
		<author><name>Tech64DD</name></author>
	</entry>
	<entry>
		<id>https://wiki.wii-linux.org/index.php?title=Useful_Development_Info&amp;diff=164</id>
		<title>Useful Development Info</title>
		<link rel="alternate" type="text/html" href="https://wiki.wii-linux.org/index.php?title=Useful_Development_Info&amp;diff=164"/>
		<updated>2025-05-07T17:09:42Z</updated>

		<summary type="html">&lt;p&gt;Tech64DD: more formatting fixes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains some information about the [[GameCube]], [[Wii]] or [[Wii U]] hardware or software, Linux kernel and general [[Wii-Linux]] topics that can be useful for development.&lt;br /&gt;
&lt;br /&gt;
== History of the GameCube and Wii GPUs ==&lt;br /&gt;
&#039;&#039;&#039;Warning&#039;&#039;&#039;: The source of the following info is a Discord message that Techflash wrote based on his memory of various other sources, so it might not be 100% accurate.&lt;br /&gt;
&lt;br /&gt;
the development of the Flipper and Hollywood is actually kind of a funny story&amp;lt;br&amp;gt;&lt;br /&gt;
Nintendo contracted SGI to make the graphics for the N64, as is very well known&amp;lt;br&amp;gt;&lt;br /&gt;
there was a specific division in SGI to handle it, it was such a big deal, iirc the &amp;quot;Nintendo Operations Division&amp;quot;?&amp;lt;br&amp;gt;&lt;br /&gt;
a bunch of the employees from that division spun off into their own company, ArtX Inc&amp;lt;br&amp;gt;&lt;br /&gt;
Nintendo contracted ArtX Inc to design the GPU for the GameCube, however, only a year before the launch of the GameCube, ArtX got acquired by ATI&amp;lt;br&amp;gt;&lt;br /&gt;
that&#039;s how the GameCube got the ATI branding, because ATI was now the parent company of ArtX -  technically, the GPU wasn&#039;t designed by ATI, and has no relation whatsoever to any ATI Radeon GPU&lt;br /&gt;
&lt;br /&gt;
== Wii (and Wii-Linux) boot process ==&lt;br /&gt;
=== Common ===&lt;br /&gt;
 | Your Wii starts&lt;br /&gt;
 |&lt;br /&gt;
 | boot0 (stored in mask ROM inside the Starlet)&lt;br /&gt;
 |&lt;br /&gt;
 | All looks good with boot1?  If so, continue, if not, die.&lt;br /&gt;
 |&lt;br /&gt;
 | boot1 (stored on NAND)&lt;br /&gt;
 |&lt;br /&gt;
 | All looks good with boot2?  If so, continue, if not, die.&lt;br /&gt;
 |&lt;br /&gt;
 | boot2 (stored on NAND)&lt;br /&gt;
 |&lt;br /&gt;
 | BRANCH - If BootMii installed as boot2, skip the to the step marked with &#039;&#039;&#039;[*]&#039;&#039;&#039;.  Otherwise, continue directly below this&lt;br /&gt;
 |&lt;br /&gt;
 | PowerPC startup and SysMenu loads (I think?  I can&#039;t find any info on necessarily when it happens, but I know it doesn&#039;t happen until at &#039;&#039;&#039;least&#039;&#039;&#039; here)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Linux, Gumboot, BootMii specific ===&lt;br /&gt;
 | Depends on the user&#039;s setup, but somehow load BootMii, either via IOS or boot2&lt;br /&gt;
 |&lt;br /&gt;
 | &#039;&#039;&#039;[*]&#039;&#039;&#039; BootMii begins trying to load armboot.bin from SD&lt;br /&gt;
 |&lt;br /&gt;
 | armboot.bin (MINI) loaded and begins executing&lt;br /&gt;
 |&lt;br /&gt;
 | &#039;&#039;&#039;BRANCH&#039;&#039;&#039; - If stock MINI, load &amp;lt;code&amp;gt;bootmii/ppcboot.elf&amp;lt;/code&amp;gt;.  If neagix modified MINI, load &amp;lt;code&amp;gt;gumboot/gumboot.elf&amp;lt;/code&amp;gt;, then if failed, &amp;lt;code&amp;gt;bootmii/gui.elf&amp;lt;/code&amp;gt;, then if failed, &amp;lt;code&amp;gt;bootmii/ppcboot.elf&amp;lt;/code&amp;gt;.&lt;br /&gt;
 |&lt;br /&gt;
 | Code is now loaded on the Broadway and begins executing&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Linux specific ===&lt;br /&gt;
 | User selects Linux kernel, either via BootMii&#039;s file picker, or Gumboot&#039;s boot menu&lt;br /&gt;
 |&lt;br /&gt;
 | Linux kernel loaded from SD, into RAM, and starts executing&lt;br /&gt;
 |&lt;br /&gt;
 | Regular Linux kernel initialization&lt;br /&gt;
 |&lt;br /&gt;
 | Linux loads the compiled-in initramfs CPIO, and executed init from it&lt;br /&gt;
 |&lt;br /&gt;
 | internal-loader determines a valid version number to try to use (e.g. &amp;lt;code&amp;gt;4.5.0&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;v4_5_0.ldr&amp;lt;/code&amp;gt;) finds any partition on SD that holds that file&lt;br /&gt;
 |&lt;br /&gt;
 | That file is found, mounted, and swtich_root&#039;ed into.  Otherwise, die here&lt;br /&gt;
 |&lt;br /&gt;
 | the loader launches the boot menu, letting the user pick a distro to boot&lt;br /&gt;
 |&lt;br /&gt;
 | distro is picked, mounted, and switch_root&#039;ed into&lt;br /&gt;
 |&lt;br /&gt;
 | regular Linux boot process for your selected distro continues here&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Techflash&#039;s method of porting over old kernel code ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
my personal process for porting over really old code like that is:&lt;br /&gt;
start with the last commit in which your &amp;quot;good&amp;quot; code still exists, if upstream, or is known good, if not&lt;br /&gt;
sanity check - does it actually work there?  Yes - continue.  No - figure out what&#039;s wrong (bad toolchain?), fix it, continue.&lt;br /&gt;
jump forward a few releases&lt;br /&gt;
add your code in&lt;br /&gt;
Build and test.&lt;br /&gt;
If it works out of the box, save this as the last known commit, jump to step 3.&lt;br /&gt;
If it works after minor fixes, save that code as the new &amp;quot;good&amp;quot; code, save this as the last known good commit, and jump to step 3.&lt;br /&gt;
If it&#039;s horribly broken, go back to the last known good commit, and jump forward by less releases this time&lt;br /&gt;
&lt;br /&gt;
eventually, you&#039;ll narrow down between 2 releases, where the &amp;quot;major&amp;quot; issues occurred, you can now scan through the git log between them, and find the commit removing / renaming whatever functions, variables, etc, your code needs.  You can now look back through the previous few commits, you&#039;ll probably see some changes happening to other drivers in preparation for the removal / rename / whatever.  Apply those to your driver, rebuild, and pray&lt;br /&gt;
&lt;br /&gt;
That&#039;s my personal process anyways, just figured I would drop it here in case it may be useful&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Linux graphics stack simplified ==&lt;br /&gt;
* Kernel&lt;br /&gt;
** DRM (Direct Rendering Manager, a basic layer for hw accel)&lt;br /&gt;
** (legacy, what the Wii uses) fbdev, a simple framebuffer with no inherent acceleration support&lt;br /&gt;
** KMS (Kernel Mode Setting, kernel sets up a framebuffer on top of DRM.  Handles the framebuffer TTY when using DRM)&lt;br /&gt;
* Userspace&lt;br /&gt;
** Xorg Driver (e.g. xf86-video-blahblah), provides 2D acceleration under Xorg&lt;br /&gt;
** Mesa Driver (e.g. /usr/lib/dri/blah_drv.so), provides 3D acceleration&lt;br /&gt;
** Mesa provides an OpenGL (and Vulkan iirc) interface to applications&lt;br /&gt;
&lt;br /&gt;
== Tips for reducing memory and CPU usage ==&lt;br /&gt;
* Reduce the systemd-journald max memory usage by editing &amp;lt;code&amp;gt;/etc/systemd/journald.conf&amp;lt;/code&amp;gt;, setting &amp;lt;code&amp;gt;Storage=volatile&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;RuntimeMaxUse=500K&amp;lt;/code&amp;gt;.  Without this, it uses around &#039;&#039;&#039;5MB&#039;&#039;&#039;&lt;br /&gt;
* Disable &amp;lt;code&amp;gt;systemd-userdbd&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;systemctl disable --now systemd-userdbd&amp;lt;/code&amp;gt;, you probably don&#039;t need this.&lt;br /&gt;
* Switch to an alternative network manager, or none at all if you want an offline experience.  While I ship NetworkManager by default, due to it&#039;s ease of setup, it is rather bulky, using about &#039;&#039;&#039;9MB&#039;&#039;&#039;.  Alternative networking managers may be more lightweight.&lt;br /&gt;
* Replace &amp;lt;code&amp;gt;/bin/sh&amp;lt;/code&amp;gt;&#039;s symlink to &amp;lt;code&amp;gt;bash&amp;lt;/code&amp;gt; with one to &amp;lt;code&amp;gt;dash&amp;lt;/code&amp;gt;.  Since &amp;lt;code&amp;gt;/bin/sh&amp;lt;/code&amp;gt; is meant to be the POSIX conformant shell, applications theoretically shouldn&#039;t rely on bashisms to be present.  Replacing it with &amp;lt;code&amp;gt;dash&amp;lt;/code&amp;gt; should free up a variable amount of RAM, depending on how many shell instances are running. To do this, &amp;lt;code&amp;gt;pacman -S dash&amp;lt;/code&amp;gt; to install it, then, as root, &amp;lt;code&amp;gt;ln -sf dash /bin/sh&amp;lt;/code&amp;gt;&lt;br /&gt;
* Tips specific to running a graphical environment&lt;br /&gt;
** Disable &amp;lt;code&amp;gt;at-spi-dbus-bus&amp;lt;/code&amp;gt;, it&#039;s a systemd user service.  Unless you&#039;re using accessibility features, this is just sitting here sucking up 10MB.  Run &amp;lt;code&amp;gt;systemctl --user mask at-spi-dbus-bus&amp;lt;/code&amp;gt;.&lt;br /&gt;
** Also, set the &amp;lt;code&amp;gt;GTK_ALLY&amp;lt;/code&amp;gt; environment variable to &amp;lt;code&amp;gt;none&amp;lt;/code&amp;gt;.  This depends on how your DE/WM handles environment variables.  If running &amp;lt;code&amp;gt;startx&amp;lt;/code&amp;gt; from a terminal, where &amp;lt;code&amp;gt;~/.xinitrc&amp;lt;/code&amp;gt; is parsed, simply add &amp;lt;code&amp;gt;export GTK_ALLY=none&amp;lt;/code&amp;gt; at the top.&lt;br /&gt;
** Reboot to apply the changes&lt;br /&gt;
* If using &amp;lt;code&amp;gt;pipewire&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;pipewire-pulse&amp;lt;/code&amp;gt;, DON&#039;T! They&#039;re significantly slower than standard &amp;lt;code&amp;gt;pulseaudio&amp;lt;/code&amp;gt;, which works just as well on the Wii.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note that these do cause the loss of some important functionality&#039;&#039;&#039;&lt;br /&gt;
* Tips that will break things&lt;br /&gt;
** &#039;&#039;&#039;If you do this, pipewire will stop working.&#039;&#039;&#039;  Disable &amp;lt;code&amp;gt;wireplumber&amp;lt;/code&amp;gt;, run the following, &amp;lt;code&amp;gt;systemctl --user disable --now wireplumber&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;systemctl --user mask wireplumber&amp;lt;/code&amp;gt;.  Without this, it uses &#039;&#039;&#039;10MB&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Some useful datasheets, and most notable, their operating temperatures, for parts of the Wii ==&lt;br /&gt;
&amp;quot;observed at&amp;quot; readings are with the case of, heatsink of Broadway + Hollywood, and no fan - left running for 1 hour.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SHARP Voltage Regulator - [https://www.digikey.in/htmldatasheets/production/44030/0/0/1/pq070xh02zxh.html] (85C max - observed at 47C)&lt;br /&gt;
&lt;br /&gt;
64MB (512Mbit) GDDR3 - [https://www.alldatasheet.com/datasheet-pdf/view/207161/QIMONDA/HYB18H512321BF.html] (85C max - observed at 57C)&lt;br /&gt;
&lt;br /&gt;
Various off-the-shelf power circuitry (generally very high maximum temperature - observed between 45C to 52C)&lt;/div&gt;</summary>
		<author><name>Tech64DD</name></author>
	</entry>
	<entry>
		<id>https://wiki.wii-linux.org/index.php?title=Useful_Development_Info&amp;diff=160</id>
		<title>Useful Development Info</title>
		<link rel="alternate" type="text/html" href="https://wiki.wii-linux.org/index.php?title=Useful_Development_Info&amp;diff=160"/>
		<updated>2025-05-07T15:45:17Z</updated>

		<summary type="html">&lt;p&gt;Tech64DD: /* History of the GameCube and Wii GPUs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains some information about the [[GameCube]], [[Wii]] or [[Wii U]] hardware or software, Linux kernel and general [[Wii-Linux]] topics that can be useful for development.&lt;br /&gt;
&lt;br /&gt;
== History of the GameCube and Wii GPUs ==&lt;br /&gt;
&#039;&#039;&#039;Warning&#039;&#039;&#039;: The source of the following info is a Discord message that Techflash wrote based on his memory of various other sources, so it might not be 100% accurate.&lt;br /&gt;
&lt;br /&gt;
the development of the Flipper and Hollywood is actually kind of a funny story&lt;br /&gt;
Nintendo contracted SGI to make the graphics for the N64, as is very well known&lt;br /&gt;
there was a specific division in SGI to handle it, it was such a big deal, iirc the &amp;quot;Nintendo Operations Division&amp;quot;?&lt;br /&gt;
a bunch of the employees from that division spun off into their own company, ArtX Inc&lt;br /&gt;
Nintendo contracted ArtX Inc to design the GPU for the GameCube, however, only a year before the launch of the GameCube, ArtX got acquired by ATI&lt;br /&gt;
that&#039;s how the GameCube got the ATI branding, because ATI was now the parent company of ArtX -  technically, the GPU wasn&#039;t designed by ATI, and has no relation whatsoever to any ATI Radeon GPU&lt;br /&gt;
&lt;br /&gt;
== Wii (and Wii-Linux) boot process ==&lt;br /&gt;
=== Common ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
| Your Wii starts&lt;br /&gt;
|&lt;br /&gt;
| boot0 (stored in mask ROM inside the Starlet)&lt;br /&gt;
|&lt;br /&gt;
| All looks good with boot1?  If so, continue, if not, die.&lt;br /&gt;
|&lt;br /&gt;
| boot1 (stored on NAND)&lt;br /&gt;
|&lt;br /&gt;
| All looks good with boot2?  If so, continue, if not, die.&lt;br /&gt;
|&lt;br /&gt;
| boot2 (stored on NAND)&lt;br /&gt;
|&lt;br /&gt;
| BRANCH - If BootMii installed as boot2, skip the to the step marked with [*].  Otherwise, continue directly below this&lt;br /&gt;
|&lt;br /&gt;
| PowerPC startup and SysMenu loads (I think?  I can&#039;t find any info on necessarily when it happens, but I know it doesn&#039;t happen until at *least* here)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Linux, Gumboot, BootMii specific ===&lt;br /&gt;
&amp;lt;pre&amp;gt;| Depends on the user&#039;s setup, but somehow load BootMii, either via IOS or boot2&lt;br /&gt;
|&lt;br /&gt;
| [*] BootMii begins trying to load armboot.bin from SD&lt;br /&gt;
|&lt;br /&gt;
| armboot.bin (MINI) loaded and begins executing&lt;br /&gt;
|&lt;br /&gt;
| **BRANCH** - If stock MINI, load `bootmii/ppcboot.elf`.  If neagix modified MINI, load `gumboot/gumboot.elf`, then if failed, `bootmii/gui.elf`, then if failed, `bootmii/ppcboot.elf`.&lt;br /&gt;
|&lt;br /&gt;
| Code is now loaded on the Broadway and begins executing&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Linux specific ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
| User selects Linux kernel, either via BootMii&#039;s file picker, or Gumboot&#039;s boot menu&lt;br /&gt;
|&lt;br /&gt;
| Linux kernel loaded from SD, into RAM, and starts executing&lt;br /&gt;
|&lt;br /&gt;
| Regular Linux kernel initialization&lt;br /&gt;
|&lt;br /&gt;
| Linux loads the compiled-in initramfs CPIO, and executed init from it&lt;br /&gt;
|&lt;br /&gt;
| internal-loader determines a valid version number to try to use (e.g. `4.5.0` -&amp;gt; `v4_5_0.ldr`) finds any partition on SD that holds that file&lt;br /&gt;
|&lt;br /&gt;
| That file is found, mounted, and swtich_root&#039;ed into.  Otherwise, die here&lt;br /&gt;
|&lt;br /&gt;
| the loader launches the boot menu, letting the user pick a distro to boot&lt;br /&gt;
|&lt;br /&gt;
| distro is picked, mounted, and switch_root&#039;ed into&lt;br /&gt;
|&lt;br /&gt;
| regular Linux boot process for your selected distro continues here&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Techflash&#039;s method of porting over old kernel code ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
my personal process for porting over really old code like that is:&lt;br /&gt;
start with the last commit in which your &amp;quot;good&amp;quot; code still exists, if upstream, or is known good, if not&lt;br /&gt;
sanity check - does it actually work there?  Yes - continue.  No - figure out what&#039;s wrong (bad toolchain?), fix it, continue.&lt;br /&gt;
jump forward a few releases&lt;br /&gt;
add your code in&lt;br /&gt;
Build and test.&lt;br /&gt;
If it works out of the box, save this as the last known commit, jump to step 3.&lt;br /&gt;
If it works after minor fixes, save that code as the new &amp;quot;good&amp;quot; code, save this as the last known good commit, and jump to step 3.&lt;br /&gt;
If it&#039;s horribly broken, go back to the last known good commit, and jump forward by less releases this time&lt;br /&gt;
&lt;br /&gt;
eventually, you&#039;ll narrow down between 2 releases, where the &amp;quot;major&amp;quot; issues occurred, you can now scan through the git log between them, and find the commit removing / renaming whatever functions, variables, etc, your code needs.  You can now look back through the previous few commits, you&#039;ll probably see some changes happening to other drivers in preparation for the removal / rename / whatever.  Apply those to your driver, rebuild, and pray&lt;br /&gt;
&lt;br /&gt;
That&#039;s my personal process anyways, just figured I would drop it here in case it may be useful&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Linux graphics stack simplified ==&lt;br /&gt;
* Kernel&lt;br /&gt;
** DRM (Direct Rendering Manager, a basic layer for hw accel)&lt;br /&gt;
** (legacy, what the Wii uses) fbdev, a simple framebuffer with no inherent acceleration support&lt;br /&gt;
** KMS (Kernel Mode Setting, kernel sets up a framebuffer on top of DRM.  Handles the framebuffer TTY when using DRM)&lt;br /&gt;
* Userspace&lt;br /&gt;
** Xorg Driver (e.g. xf86-video-blahblah), provides 2D acceleration under Xorg&lt;br /&gt;
** Mesa Driver (e.g. /usr/lib/dri/blah_drv.so), provides 3D acceleration&lt;br /&gt;
** Mesa provides an OpenGL (and Vulkan iirc) interface to applications&lt;br /&gt;
&lt;br /&gt;
== Tips for reducing memory and CPU usage ==&lt;br /&gt;
* Reduce the systemd-journald max memory usage by editing &amp;lt;code&amp;gt;/etc/systemd/journald.conf&amp;lt;/code&amp;gt;, setting &amp;lt;code&amp;gt;Storage=volatile&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;RuntimeMaxUse=500K&amp;lt;/code&amp;gt;.  Without this, it uses around &#039;&#039;&#039;5MB&#039;&#039;&#039;&lt;br /&gt;
* Disable &amp;lt;code&amp;gt;systemd-userdbd&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;systemctl disable --now systemd-userdbd&amp;lt;/code&amp;gt;, you probably don&#039;t need this.&lt;br /&gt;
* Switch to an alternative network manager, or none at all if you want an offline experience.  While I ship NetworkManager by default, due to it&#039;s ease of setup, it is rather bulky, using about &#039;&#039;&#039;9MB&#039;&#039;&#039;.  Alternative networking managers may be more lightweight.&lt;br /&gt;
* Replace &amp;lt;code&amp;gt;/bin/sh&amp;lt;/code&amp;gt;&#039;s symlink to &amp;lt;code&amp;gt;bash&amp;lt;/code&amp;gt; with one to &amp;lt;code&amp;gt;dash&amp;lt;/code&amp;gt;.  Since `/bin/sh` is meant to be the POSIX conformant shell, applications theoretically shouldn&#039;t rely on bashisms to be present.  Replacing it with &amp;lt;code&amp;gt;dash&amp;lt;/code&amp;gt; should free up a variable amount of RAM, depending on how many shell instances are running. To do this, &amp;lt;code&amp;gt;pacman -S dash&amp;lt;/code&amp;gt; to install it, then, as root, &amp;lt;code&amp;gt;ln -sf dash /bin/sh&amp;lt;/code&amp;gt;&lt;br /&gt;
* Tips specific to running a graphical environment&lt;br /&gt;
** Disable &amp;lt;code&amp;gt;at-spi-dbus-bus&amp;lt;/code&amp;gt;, it&#039;s a systemd user service.  Unless you&#039;re using accessibility features, this is just sitting here sucking up 10MB.  Run &amp;lt;code&amp;gt;systemctl --user mask at-spi-dbus-bus&amp;lt;/code&amp;gt;.&lt;br /&gt;
** Also, set the &amp;lt;code&amp;gt;GTK_ALLY&amp;lt;/code&amp;gt; environment variable to `none`.  This depends on how your DE/WM handles environment variables.  If running &amp;lt;code&amp;gt;startx&amp;lt;/code&amp;gt; from a terminal, where &amp;lt;code&amp;gt;~/.xinitrc&amp;lt;/code&amp;gt; is parsed, simply add &amp;lt;code&amp;gt;export GTK_ALLY=none&amp;lt;/code&amp;gt; at the top.&lt;br /&gt;
** Reboot to apply the changes&lt;br /&gt;
* If using &amp;lt;code&amp;gt;pipewire&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;pipewire-pulse&amp;lt;/code&amp;gt;, DON&#039;T! They&#039;re significantly slower than standard &amp;lt;code&amp;gt;pulseaudio&amp;lt;/code&amp;gt;, which works just as well on the Wii.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note that these do cause the loss of some important functionality&#039;&#039;&#039;&lt;br /&gt;
* Tips that will break things&lt;br /&gt;
** &#039;&#039;&#039;If you do this, pipewire will stop working.&#039;&#039;&#039;  Disable &amp;lt;code&amp;gt;wireplumber&amp;lt;/code&amp;gt;, run the following, &amp;lt;code&amp;gt;systemctl --user disable --now wireplumber&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;systemctl --user mask wireplumber&amp;lt;/code&amp;gt;.  Without this, it uses &#039;&#039;&#039;10MB&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Some useful datasheets, and most notable, their operating temperatures, for parts of the Wii ==&lt;br /&gt;
&amp;quot;observed at&amp;quot; readings are with the case of, heatsink of Broadway + Hollywood, and no fan - left running for 1 hour.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SHARP Voltage Regulator - [https://www.digikey.in/htmldatasheets/production/44030/0/0/1/pq070xh02zxh.html] (85C max - observed at 47C)&lt;br /&gt;
&lt;br /&gt;
64MB (512Mbit) GDDR3 - [https://www.alldatasheet.com/datasheet-pdf/view/207161/QIMONDA/HYB18H512321BF.html] (85C max - observed at 57C)&lt;br /&gt;
&lt;br /&gt;
Various off-the-shelf power circuitry (generally very high maximum temperature - observed between 45C to 52C)&lt;/div&gt;</summary>
		<author><name>Tech64DD</name></author>
	</entry>
	<entry>
		<id>https://wiki.wii-linux.org/index.php?title=Useful_Development_Info&amp;diff=159</id>
		<title>Useful Development Info</title>
		<link rel="alternate" type="text/html" href="https://wiki.wii-linux.org/index.php?title=Useful_Development_Info&amp;diff=159"/>
		<updated>2025-05-07T15:44:54Z</updated>

		<summary type="html">&lt;p&gt;Tech64DD: /* History of the GameCube and Wii GPUs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains some information about the [[GameCube]], [[Wii]] or [[Wii U]] hardware or software, Linux kernel and general [[Wii-Linux]] topics that can be useful for development.&lt;br /&gt;
&lt;br /&gt;
== History of the GameCube and Wii GPUs ==&lt;br /&gt;
&#039;&#039;&#039;Warning&#039;&#039;&#039;: The source of the following info is a Discord message that Techflash wrote based on his memory of various other sources, so it might not be 100% accurate.&lt;br /&gt;
the development of the Flipper and Hollywood is actually kind of a funny story&lt;br /&gt;
Nintendo contracted SGI to make the graphics for the N64, as is very well known&lt;br /&gt;
there was a specific division in SGI to handle it, it was such a big deal, iirc the &amp;quot;Nintendo Operations Division&amp;quot;?&lt;br /&gt;
a bunch of the employees from that division spun off into their own company, ArtX Inc&lt;br /&gt;
Nintendo contracted ArtX Inc to design the GPU for the GameCube, however, only a year before the launch of the GameCube, ArtX got acquired by ATI&lt;br /&gt;
that&#039;s how the GameCube got the ATI branding, because ATI was now the parent company of ArtX -  technically, the GPU wasn&#039;t designed by ATI, and has no relation whatsoever to any ATI Radeon GPU&lt;br /&gt;
&lt;br /&gt;
== Wii (and Wii-Linux) boot process ==&lt;br /&gt;
=== Common ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
| Your Wii starts&lt;br /&gt;
|&lt;br /&gt;
| boot0 (stored in mask ROM inside the Starlet)&lt;br /&gt;
|&lt;br /&gt;
| All looks good with boot1?  If so, continue, if not, die.&lt;br /&gt;
|&lt;br /&gt;
| boot1 (stored on NAND)&lt;br /&gt;
|&lt;br /&gt;
| All looks good with boot2?  If so, continue, if not, die.&lt;br /&gt;
|&lt;br /&gt;
| boot2 (stored on NAND)&lt;br /&gt;
|&lt;br /&gt;
| BRANCH - If BootMii installed as boot2, skip the to the step marked with [*].  Otherwise, continue directly below this&lt;br /&gt;
|&lt;br /&gt;
| PowerPC startup and SysMenu loads (I think?  I can&#039;t find any info on necessarily when it happens, but I know it doesn&#039;t happen until at *least* here)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Linux, Gumboot, BootMii specific ===&lt;br /&gt;
&amp;lt;pre&amp;gt;| Depends on the user&#039;s setup, but somehow load BootMii, either via IOS or boot2&lt;br /&gt;
|&lt;br /&gt;
| [*] BootMii begins trying to load armboot.bin from SD&lt;br /&gt;
|&lt;br /&gt;
| armboot.bin (MINI) loaded and begins executing&lt;br /&gt;
|&lt;br /&gt;
| **BRANCH** - If stock MINI, load `bootmii/ppcboot.elf`.  If neagix modified MINI, load `gumboot/gumboot.elf`, then if failed, `bootmii/gui.elf`, then if failed, `bootmii/ppcboot.elf`.&lt;br /&gt;
|&lt;br /&gt;
| Code is now loaded on the Broadway and begins executing&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Linux specific ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
| User selects Linux kernel, either via BootMii&#039;s file picker, or Gumboot&#039;s boot menu&lt;br /&gt;
|&lt;br /&gt;
| Linux kernel loaded from SD, into RAM, and starts executing&lt;br /&gt;
|&lt;br /&gt;
| Regular Linux kernel initialization&lt;br /&gt;
|&lt;br /&gt;
| Linux loads the compiled-in initramfs CPIO, and executed init from it&lt;br /&gt;
|&lt;br /&gt;
| internal-loader determines a valid version number to try to use (e.g. `4.5.0` -&amp;gt; `v4_5_0.ldr`) finds any partition on SD that holds that file&lt;br /&gt;
|&lt;br /&gt;
| That file is found, mounted, and swtich_root&#039;ed into.  Otherwise, die here&lt;br /&gt;
|&lt;br /&gt;
| the loader launches the boot menu, letting the user pick a distro to boot&lt;br /&gt;
|&lt;br /&gt;
| distro is picked, mounted, and switch_root&#039;ed into&lt;br /&gt;
|&lt;br /&gt;
| regular Linux boot process for your selected distro continues here&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Techflash&#039;s method of porting over old kernel code ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
my personal process for porting over really old code like that is:&lt;br /&gt;
start with the last commit in which your &amp;quot;good&amp;quot; code still exists, if upstream, or is known good, if not&lt;br /&gt;
sanity check - does it actually work there?  Yes - continue.  No - figure out what&#039;s wrong (bad toolchain?), fix it, continue.&lt;br /&gt;
jump forward a few releases&lt;br /&gt;
add your code in&lt;br /&gt;
Build and test.&lt;br /&gt;
If it works out of the box, save this as the last known commit, jump to step 3.&lt;br /&gt;
If it works after minor fixes, save that code as the new &amp;quot;good&amp;quot; code, save this as the last known good commit, and jump to step 3.&lt;br /&gt;
If it&#039;s horribly broken, go back to the last known good commit, and jump forward by less releases this time&lt;br /&gt;
&lt;br /&gt;
eventually, you&#039;ll narrow down between 2 releases, where the &amp;quot;major&amp;quot; issues occurred, you can now scan through the git log between them, and find the commit removing / renaming whatever functions, variables, etc, your code needs.  You can now look back through the previous few commits, you&#039;ll probably see some changes happening to other drivers in preparation for the removal / rename / whatever.  Apply those to your driver, rebuild, and pray&lt;br /&gt;
&lt;br /&gt;
That&#039;s my personal process anyways, just figured I would drop it here in case it may be useful&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Linux graphics stack simplified ==&lt;br /&gt;
* Kernel&lt;br /&gt;
** DRM (Direct Rendering Manager, a basic layer for hw accel)&lt;br /&gt;
** (legacy, what the Wii uses) fbdev, a simple framebuffer with no inherent acceleration support&lt;br /&gt;
** KMS (Kernel Mode Setting, kernel sets up a framebuffer on top of DRM.  Handles the framebuffer TTY when using DRM)&lt;br /&gt;
* Userspace&lt;br /&gt;
** Xorg Driver (e.g. xf86-video-blahblah), provides 2D acceleration under Xorg&lt;br /&gt;
** Mesa Driver (e.g. /usr/lib/dri/blah_drv.so), provides 3D acceleration&lt;br /&gt;
** Mesa provides an OpenGL (and Vulkan iirc) interface to applications&lt;br /&gt;
&lt;br /&gt;
== Tips for reducing memory and CPU usage ==&lt;br /&gt;
* Reduce the systemd-journald max memory usage by editing &amp;lt;code&amp;gt;/etc/systemd/journald.conf&amp;lt;/code&amp;gt;, setting &amp;lt;code&amp;gt;Storage=volatile&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;RuntimeMaxUse=500K&amp;lt;/code&amp;gt;.  Without this, it uses around &#039;&#039;&#039;5MB&#039;&#039;&#039;&lt;br /&gt;
* Disable &amp;lt;code&amp;gt;systemd-userdbd&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;systemctl disable --now systemd-userdbd&amp;lt;/code&amp;gt;, you probably don&#039;t need this.&lt;br /&gt;
* Switch to an alternative network manager, or none at all if you want an offline experience.  While I ship NetworkManager by default, due to it&#039;s ease of setup, it is rather bulky, using about &#039;&#039;&#039;9MB&#039;&#039;&#039;.  Alternative networking managers may be more lightweight.&lt;br /&gt;
* Replace &amp;lt;code&amp;gt;/bin/sh&amp;lt;/code&amp;gt;&#039;s symlink to &amp;lt;code&amp;gt;bash&amp;lt;/code&amp;gt; with one to &amp;lt;code&amp;gt;dash&amp;lt;/code&amp;gt;.  Since `/bin/sh` is meant to be the POSIX conformant shell, applications theoretically shouldn&#039;t rely on bashisms to be present.  Replacing it with &amp;lt;code&amp;gt;dash&amp;lt;/code&amp;gt; should free up a variable amount of RAM, depending on how many shell instances are running. To do this, &amp;lt;code&amp;gt;pacman -S dash&amp;lt;/code&amp;gt; to install it, then, as root, &amp;lt;code&amp;gt;ln -sf dash /bin/sh&amp;lt;/code&amp;gt;&lt;br /&gt;
* Tips specific to running a graphical environment&lt;br /&gt;
** Disable &amp;lt;code&amp;gt;at-spi-dbus-bus&amp;lt;/code&amp;gt;, it&#039;s a systemd user service.  Unless you&#039;re using accessibility features, this is just sitting here sucking up 10MB.  Run &amp;lt;code&amp;gt;systemctl --user mask at-spi-dbus-bus&amp;lt;/code&amp;gt;.&lt;br /&gt;
** Also, set the &amp;lt;code&amp;gt;GTK_ALLY&amp;lt;/code&amp;gt; environment variable to `none`.  This depends on how your DE/WM handles environment variables.  If running &amp;lt;code&amp;gt;startx&amp;lt;/code&amp;gt; from a terminal, where &amp;lt;code&amp;gt;~/.xinitrc&amp;lt;/code&amp;gt; is parsed, simply add &amp;lt;code&amp;gt;export GTK_ALLY=none&amp;lt;/code&amp;gt; at the top.&lt;br /&gt;
** Reboot to apply the changes&lt;br /&gt;
* If using &amp;lt;code&amp;gt;pipewire&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;pipewire-pulse&amp;lt;/code&amp;gt;, DON&#039;T! They&#039;re significantly slower than standard &amp;lt;code&amp;gt;pulseaudio&amp;lt;/code&amp;gt;, which works just as well on the Wii.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note that these do cause the loss of some important functionality&#039;&#039;&#039;&lt;br /&gt;
* Tips that will break things&lt;br /&gt;
** &#039;&#039;&#039;If you do this, pipewire will stop working.&#039;&#039;&#039;  Disable &amp;lt;code&amp;gt;wireplumber&amp;lt;/code&amp;gt;, run the following, &amp;lt;code&amp;gt;systemctl --user disable --now wireplumber&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;systemctl --user mask wireplumber&amp;lt;/code&amp;gt;.  Without this, it uses &#039;&#039;&#039;10MB&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Some useful datasheets, and most notable, their operating temperatures, for parts of the Wii ==&lt;br /&gt;
&amp;quot;observed at&amp;quot; readings are with the case of, heatsink of Broadway + Hollywood, and no fan - left running for 1 hour.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SHARP Voltage Regulator - [https://www.digikey.in/htmldatasheets/production/44030/0/0/1/pq070xh02zxh.html] (85C max - observed at 47C)&lt;br /&gt;
&lt;br /&gt;
64MB (512Mbit) GDDR3 - [https://www.alldatasheet.com/datasheet-pdf/view/207161/QIMONDA/HYB18H512321BF.html] (85C max - observed at 57C)&lt;br /&gt;
&lt;br /&gt;
Various off-the-shelf power circuitry (generally very high maximum temperature - observed between 45C to 52C)&lt;/div&gt;</summary>
		<author><name>Tech64DD</name></author>
	</entry>
	<entry>
		<id>https://wiki.wii-linux.org/index.php?title=Useful_Development_Info&amp;diff=158</id>
		<title>Useful Development Info</title>
		<link rel="alternate" type="text/html" href="https://wiki.wii-linux.org/index.php?title=Useful_Development_Info&amp;diff=158"/>
		<updated>2025-05-07T15:44:36Z</updated>

		<summary type="html">&lt;p&gt;Tech64DD: more formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains some information about the [[GameCube]], [[Wii]] or [[Wii U]] hardware or software, Linux kernel and general [[Wii-Linux]] topics that can be useful for development.&lt;br /&gt;
&lt;br /&gt;
== History of the GameCube and Wii GPUs ==&lt;br /&gt;
```Warning```: The source of the following info is a Discord message that Techflash wrote based on his memory of various other sources, so it might not be 100% accurate.&lt;br /&gt;
the development of the Flipper and Hollywood is actually kind of a funny story&lt;br /&gt;
Nintendo contracted SGI to make the graphics for the N64, as is very well known&lt;br /&gt;
there was a specific division in SGI to handle it, it was such a big deal, iirc the &amp;quot;Nintendo Operations Division&amp;quot;?&lt;br /&gt;
a bunch of the employees from that division spun off into their own company, ArtX Inc&lt;br /&gt;
Nintendo contracted ArtX Inc to design the GPU for the GameCube, however, only a year before the launch of the GameCube, ArtX got acquired by ATI&lt;br /&gt;
that&#039;s how the GameCube got the ATI branding, because ATI was now the parent company of ArtX -  technically, the GPU wasn&#039;t designed by ATI, and has no relation whatsoever to any ATI Radeon GPU&lt;br /&gt;
&lt;br /&gt;
== Wii (and Wii-Linux) boot process ==&lt;br /&gt;
=== Common ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
| Your Wii starts&lt;br /&gt;
|&lt;br /&gt;
| boot0 (stored in mask ROM inside the Starlet)&lt;br /&gt;
|&lt;br /&gt;
| All looks good with boot1?  If so, continue, if not, die.&lt;br /&gt;
|&lt;br /&gt;
| boot1 (stored on NAND)&lt;br /&gt;
|&lt;br /&gt;
| All looks good with boot2?  If so, continue, if not, die.&lt;br /&gt;
|&lt;br /&gt;
| boot2 (stored on NAND)&lt;br /&gt;
|&lt;br /&gt;
| BRANCH - If BootMii installed as boot2, skip the to the step marked with [*].  Otherwise, continue directly below this&lt;br /&gt;
|&lt;br /&gt;
| PowerPC startup and SysMenu loads (I think?  I can&#039;t find any info on necessarily when it happens, but I know it doesn&#039;t happen until at *least* here)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Linux, Gumboot, BootMii specific ===&lt;br /&gt;
&amp;lt;pre&amp;gt;| Depends on the user&#039;s setup, but somehow load BootMii, either via IOS or boot2&lt;br /&gt;
|&lt;br /&gt;
| [*] BootMii begins trying to load armboot.bin from SD&lt;br /&gt;
|&lt;br /&gt;
| armboot.bin (MINI) loaded and begins executing&lt;br /&gt;
|&lt;br /&gt;
| **BRANCH** - If stock MINI, load `bootmii/ppcboot.elf`.  If neagix modified MINI, load `gumboot/gumboot.elf`, then if failed, `bootmii/gui.elf`, then if failed, `bootmii/ppcboot.elf`.&lt;br /&gt;
|&lt;br /&gt;
| Code is now loaded on the Broadway and begins executing&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Linux specific ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
| User selects Linux kernel, either via BootMii&#039;s file picker, or Gumboot&#039;s boot menu&lt;br /&gt;
|&lt;br /&gt;
| Linux kernel loaded from SD, into RAM, and starts executing&lt;br /&gt;
|&lt;br /&gt;
| Regular Linux kernel initialization&lt;br /&gt;
|&lt;br /&gt;
| Linux loads the compiled-in initramfs CPIO, and executed init from it&lt;br /&gt;
|&lt;br /&gt;
| internal-loader determines a valid version number to try to use (e.g. `4.5.0` -&amp;gt; `v4_5_0.ldr`) finds any partition on SD that holds that file&lt;br /&gt;
|&lt;br /&gt;
| That file is found, mounted, and swtich_root&#039;ed into.  Otherwise, die here&lt;br /&gt;
|&lt;br /&gt;
| the loader launches the boot menu, letting the user pick a distro to boot&lt;br /&gt;
|&lt;br /&gt;
| distro is picked, mounted, and switch_root&#039;ed into&lt;br /&gt;
|&lt;br /&gt;
| regular Linux boot process for your selected distro continues here&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Techflash&#039;s method of porting over old kernel code ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
my personal process for porting over really old code like that is:&lt;br /&gt;
start with the last commit in which your &amp;quot;good&amp;quot; code still exists, if upstream, or is known good, if not&lt;br /&gt;
sanity check - does it actually work there?  Yes - continue.  No - figure out what&#039;s wrong (bad toolchain?), fix it, continue.&lt;br /&gt;
jump forward a few releases&lt;br /&gt;
add your code in&lt;br /&gt;
Build and test.&lt;br /&gt;
If it works out of the box, save this as the last known commit, jump to step 3.&lt;br /&gt;
If it works after minor fixes, save that code as the new &amp;quot;good&amp;quot; code, save this as the last known good commit, and jump to step 3.&lt;br /&gt;
If it&#039;s horribly broken, go back to the last known good commit, and jump forward by less releases this time&lt;br /&gt;
&lt;br /&gt;
eventually, you&#039;ll narrow down between 2 releases, where the &amp;quot;major&amp;quot; issues occurred, you can now scan through the git log between them, and find the commit removing / renaming whatever functions, variables, etc, your code needs.  You can now look back through the previous few commits, you&#039;ll probably see some changes happening to other drivers in preparation for the removal / rename / whatever.  Apply those to your driver, rebuild, and pray&lt;br /&gt;
&lt;br /&gt;
That&#039;s my personal process anyways, just figured I would drop it here in case it may be useful&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Linux graphics stack simplified ==&lt;br /&gt;
* Kernel&lt;br /&gt;
** DRM (Direct Rendering Manager, a basic layer for hw accel)&lt;br /&gt;
** (legacy, what the Wii uses) fbdev, a simple framebuffer with no inherent acceleration support&lt;br /&gt;
** KMS (Kernel Mode Setting, kernel sets up a framebuffer on top of DRM.  Handles the framebuffer TTY when using DRM)&lt;br /&gt;
* Userspace&lt;br /&gt;
** Xorg Driver (e.g. xf86-video-blahblah), provides 2D acceleration under Xorg&lt;br /&gt;
** Mesa Driver (e.g. /usr/lib/dri/blah_drv.so), provides 3D acceleration&lt;br /&gt;
** Mesa provides an OpenGL (and Vulkan iirc) interface to applications&lt;br /&gt;
&lt;br /&gt;
== Tips for reducing memory and CPU usage ==&lt;br /&gt;
* Reduce the systemd-journald max memory usage by editing &amp;lt;code&amp;gt;/etc/systemd/journald.conf&amp;lt;/code&amp;gt;, setting &amp;lt;code&amp;gt;Storage=volatile&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;RuntimeMaxUse=500K&amp;lt;/code&amp;gt;.  Without this, it uses around &#039;&#039;&#039;5MB&#039;&#039;&#039;&lt;br /&gt;
* Disable &amp;lt;code&amp;gt;systemd-userdbd&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;systemctl disable --now systemd-userdbd&amp;lt;/code&amp;gt;, you probably don&#039;t need this.&lt;br /&gt;
* Switch to an alternative network manager, or none at all if you want an offline experience.  While I ship NetworkManager by default, due to it&#039;s ease of setup, it is rather bulky, using about &#039;&#039;&#039;9MB&#039;&#039;&#039;.  Alternative networking managers may be more lightweight.&lt;br /&gt;
* Replace &amp;lt;code&amp;gt;/bin/sh&amp;lt;/code&amp;gt;&#039;s symlink to &amp;lt;code&amp;gt;bash&amp;lt;/code&amp;gt; with one to &amp;lt;code&amp;gt;dash&amp;lt;/code&amp;gt;.  Since `/bin/sh` is meant to be the POSIX conformant shell, applications theoretically shouldn&#039;t rely on bashisms to be present.  Replacing it with &amp;lt;code&amp;gt;dash&amp;lt;/code&amp;gt; should free up a variable amount of RAM, depending on how many shell instances are running. To do this, &amp;lt;code&amp;gt;pacman -S dash&amp;lt;/code&amp;gt; to install it, then, as root, &amp;lt;code&amp;gt;ln -sf dash /bin/sh&amp;lt;/code&amp;gt;&lt;br /&gt;
* Tips specific to running a graphical environment&lt;br /&gt;
** Disable &amp;lt;code&amp;gt;at-spi-dbus-bus&amp;lt;/code&amp;gt;, it&#039;s a systemd user service.  Unless you&#039;re using accessibility features, this is just sitting here sucking up 10MB.  Run &amp;lt;code&amp;gt;systemctl --user mask at-spi-dbus-bus&amp;lt;/code&amp;gt;.&lt;br /&gt;
** Also, set the &amp;lt;code&amp;gt;GTK_ALLY&amp;lt;/code&amp;gt; environment variable to `none`.  This depends on how your DE/WM handles environment variables.  If running &amp;lt;code&amp;gt;startx&amp;lt;/code&amp;gt; from a terminal, where &amp;lt;code&amp;gt;~/.xinitrc&amp;lt;/code&amp;gt; is parsed, simply add &amp;lt;code&amp;gt;export GTK_ALLY=none&amp;lt;/code&amp;gt; at the top.&lt;br /&gt;
** Reboot to apply the changes&lt;br /&gt;
* If using &amp;lt;code&amp;gt;pipewire&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;pipewire-pulse&amp;lt;/code&amp;gt;, DON&#039;T! They&#039;re significantly slower than standard &amp;lt;code&amp;gt;pulseaudio&amp;lt;/code&amp;gt;, which works just as well on the Wii.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note that these do cause the loss of some important functionality&#039;&#039;&#039;&lt;br /&gt;
* Tips that will break things&lt;br /&gt;
** &#039;&#039;&#039;If you do this, pipewire will stop working.&#039;&#039;&#039;  Disable &amp;lt;code&amp;gt;wireplumber&amp;lt;/code&amp;gt;, run the following, &amp;lt;code&amp;gt;systemctl --user disable --now wireplumber&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;systemctl --user mask wireplumber&amp;lt;/code&amp;gt;.  Without this, it uses &#039;&#039;&#039;10MB&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Some useful datasheets, and most notable, their operating temperatures, for parts of the Wii ==&lt;br /&gt;
&amp;quot;observed at&amp;quot; readings are with the case of, heatsink of Broadway + Hollywood, and no fan - left running for 1 hour.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SHARP Voltage Regulator - [https://www.digikey.in/htmldatasheets/production/44030/0/0/1/pq070xh02zxh.html] (85C max - observed at 47C)&lt;br /&gt;
&lt;br /&gt;
64MB (512Mbit) GDDR3 - [https://www.alldatasheet.com/datasheet-pdf/view/207161/QIMONDA/HYB18H512321BF.html] (85C max - observed at 57C)&lt;br /&gt;
&lt;br /&gt;
Various off-the-shelf power circuitry (generally very high maximum temperature - observed between 45C to 52C)&lt;/div&gt;</summary>
		<author><name>Tech64DD</name></author>
	</entry>
	<entry>
		<id>https://wiki.wii-linux.org/index.php?title=Useful_Development_Info&amp;diff=157</id>
		<title>Useful Development Info</title>
		<link rel="alternate" type="text/html" href="https://wiki.wii-linux.org/index.php?title=Useful_Development_Info&amp;diff=157"/>
		<updated>2025-05-07T15:43:47Z</updated>

		<summary type="html">&lt;p&gt;Tech64DD: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains some information about the [[GameCube]], [[Wii]] or [[Wii U]] hardware or software, Linux kernel and general [[Wii-Linux]] topics that can be useful for development.&lt;br /&gt;
&lt;br /&gt;
== History of the GameCube and Wii GPUs ==&lt;br /&gt;
```Warning```: The source of the following info is a Discord message that Techflash wrote based on his memory of various other sources, so it might not be 100% accurate.&lt;br /&gt;
the development of the Flipper and Hollywood is actually kind of a funny story&lt;br /&gt;
Nintendo contracted SGI to make the graphics for the N64, as is very well known&lt;br /&gt;
there was a specific division in SGI to handle it, it was such a big deal, iirc the &amp;quot;Nintendo Operations Division&amp;quot;?&lt;br /&gt;
a bunch of the employees from that division spun off into their own company, ArtX Inc&lt;br /&gt;
Nintendo contracted ArtX Inc to design the GPU for the GameCube, however, only a year before the launch of the GameCube, ArtX got acquired by ATI&lt;br /&gt;
that&#039;s how the GameCube got the ATI branding, because ATI was now the parent company of ArtX -  technically, the GPU wasn&#039;t designed by ATI, and has no relation whatsoever to any ATI Radeon GPU&lt;br /&gt;
&lt;br /&gt;
== Wii (and Wii-Linux) boot process ==&lt;br /&gt;
=== Common ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
| Your Wii starts&lt;br /&gt;
|&lt;br /&gt;
| boot0 (stored in mask ROM inside the Starlet)&lt;br /&gt;
|&lt;br /&gt;
| All looks good with boot1?  If so, continue, if not, die.&lt;br /&gt;
|&lt;br /&gt;
| boot1 (stored on NAND)&lt;br /&gt;
|&lt;br /&gt;
| All looks good with boot2?  If so, continue, if not, die.&lt;br /&gt;
|&lt;br /&gt;
| boot2 (stored on NAND)&lt;br /&gt;
|&lt;br /&gt;
| BRANCH - If BootMii installed as boot2, skip the to the step marked with [*].  Otherwise, continue directly below this&lt;br /&gt;
|&lt;br /&gt;
| PowerPC startup and SysMenu loads (I think?  I can&#039;t find any info on necessarily when it happens, but I know it doesn&#039;t happen until at *least* here)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Linux, Gumboot, BootMii specific ===&lt;br /&gt;
&amp;lt;pre&amp;gt;| Depends on the user&#039;s setup, but somehow load BootMii, either via IOS or boot2&lt;br /&gt;
|&lt;br /&gt;
| [*] BootMii begins trying to load armboot.bin from SD&lt;br /&gt;
|&lt;br /&gt;
| armboot.bin (MINI) loaded and begins executing&lt;br /&gt;
|&lt;br /&gt;
| **BRANCH** - If stock MINI, load `bootmii/ppcboot.elf`.  If neagix modified MINI, load `gumboot/gumboot.elf`, then if failed, `bootmii/gui.elf`, then if failed, `bootmii/ppcboot.elf`.&lt;br /&gt;
|&lt;br /&gt;
| Code is now loaded on the Broadway and begins executing&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Linux specific ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
| User selects Linux kernel, either via BootMii&#039;s file picker, or Gumboot&#039;s boot menu&lt;br /&gt;
|&lt;br /&gt;
| Linux kernel loaded from SD, into RAM, and starts executing&lt;br /&gt;
|&lt;br /&gt;
| Regular Linux kernel initialization&lt;br /&gt;
|&lt;br /&gt;
| Linux loads the compiled-in initramfs CPIO, and executed init from it&lt;br /&gt;
|&lt;br /&gt;
| internal-loader determines a valid version number to try to use (e.g. `4.5.0` -&amp;gt; `v4_5_0.ldr`) finds any partition on SD that holds that file&lt;br /&gt;
|&lt;br /&gt;
| That file is found, mounted, and swtich_root&#039;ed into.  Otherwise, die here&lt;br /&gt;
|&lt;br /&gt;
| the loader launches the boot menu, letting the user pick a distro to boot&lt;br /&gt;
|&lt;br /&gt;
| distro is picked, mounted, and switch_root&#039;ed into&lt;br /&gt;
|&lt;br /&gt;
| regular Linux boot process for your selected distro continues here&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Techflash&#039;s method of porting over old kernel code ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
my personal process for porting over really old code like that is:&lt;br /&gt;
start with the last commit in which your &amp;quot;good&amp;quot; code still exists, if upstream, or is known good, if not&lt;br /&gt;
sanity check - does it actually work there?  Yes - continue.  No - figure out what&#039;s wrong (bad toolchain?), fix it, continue.&lt;br /&gt;
jump forward a few releases&lt;br /&gt;
add your code in&lt;br /&gt;
Build and test.&lt;br /&gt;
If it works out of the box, save this as the last known commit, jump to step 3.&lt;br /&gt;
If it works after minor fixes, save that code as the new &amp;quot;good&amp;quot; code, save this as the last known good commit, and jump to step 3.&lt;br /&gt;
If it&#039;s horribly broken, go back to the last known good commit, and jump forward by less releases this time&lt;br /&gt;
&lt;br /&gt;
eventually, you&#039;ll narrow down between 2 releases, where the &amp;quot;major&amp;quot; issues occurred, you can now scan through the git log between them, and find the commit removing / renaming whatever functions, variables, etc, your code needs.  You can now look back through the previous few commits, you&#039;ll probably see some changes happening to other drivers in preparation for the removal / rename / whatever.  Apply those to your driver, rebuild, and pray&lt;br /&gt;
&lt;br /&gt;
That&#039;s my personal process anyways, just figured I would drop it here in case it may be useful&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Linux graphics stack simplified ==&lt;br /&gt;
* Kernel&lt;br /&gt;
** DRM (Direct Rendering Manager, a basic layer for hw accel)&lt;br /&gt;
** (legacy, what the Wii uses) fbdev, a simple framebuffer with no inherent acceleration support&lt;br /&gt;
** KMS (Kernel Mode Setting, kernel sets up a framebuffer on top of DRM.  Handles the framebuffer TTY when using DRM)&lt;br /&gt;
* Userspace&lt;br /&gt;
** Xorg Driver (e.g. xf86-video-blahblah), provides 2D acceleration under Xorg&lt;br /&gt;
** Mesa Driver (e.g. /usr/lib/dri/blah_drv.so), provides 3D acceleration&lt;br /&gt;
** Mesa provides an OpenGL (and Vulkan iirc) interface to applications&lt;br /&gt;
&lt;br /&gt;
== Tips for reducing memory and CPU usage ==&lt;br /&gt;
* Reduce the systemd-journald max memory usage by editing &amp;lt;code&amp;gt;/etc/systemd/journald.conf&amp;lt;/code&amp;gt;, setting &amp;lt;code&amp;gt;Storage=volatile&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;RuntimeMaxUse=500K&amp;lt;/code&amp;gt;.  Without this, it uses around &#039;&#039;&#039;5MB&#039;&#039;&#039;&lt;br /&gt;
* Disable &amp;lt;code&amp;gt;systemd-userdbd&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;systemctl disable --now systemd-userdbd&amp;lt;/code&amp;gt;, you probably don&#039;t need this.&lt;br /&gt;
* Switch to an alternative network manager, or none at all if you want an offline experience.  While I ship NetworkManager by default, due to it&#039;s ease of setup, it is rather bulky, using about &#039;&#039;&#039;9MB&#039;&#039;&#039;.  Alternative networking managers may be more lightweight.&lt;br /&gt;
* Replace &amp;lt;code&amp;gt;/bin/sh&amp;lt;/code&amp;gt;&#039;s symlink to &amp;lt;code&amp;gt;bash&amp;lt;/code&amp;gt; with one to &amp;lt;code&amp;gt;dash&amp;lt;/code&amp;gt;.  Since `/bin/sh` is meant to be the POSIX conformant shell, applications theoretically shouldn&#039;t rely on bashisms to be present.  Replacing it with &amp;lt;code&amp;gt;dash&amp;lt;/code&amp;gt; should free up a variable amount of RAM, depending on how many shell instances are running. To do this, `pacman -S dash` to install it, then, as root, `ln -sf dash /bin/sh`&lt;br /&gt;
* Tips specific to running a graphical environment&lt;br /&gt;
** Disable &amp;lt;code&amp;gt;at-spi-dbus-bus&amp;lt;/code&amp;gt;, it&#039;s a systemd user service.  Unless you&#039;re using accessibility features, this is just sitting here sucking up 10MB.  Run &amp;lt;code&amp;gt;systemctl --user mask at-spi-dbus-bus&amp;lt;/code&amp;gt;.&lt;br /&gt;
** Also, set the &amp;lt;code&amp;gt;GTK_ALLY&amp;lt;/code&amp;gt; environment variable to `none`.  This depends on how your DE/WM handles environment variables.  If running `startx` from a terminal, where &amp;lt;code&amp;gt;~/.xinitrc&amp;lt;/code&amp;gt; is parsed, simply add &amp;lt;code&amp;gt;export GTK_ALLY=none&amp;lt;/code&amp;gt; at the top.&lt;br /&gt;
** Reboot to apply the changes&lt;br /&gt;
* If using &amp;lt;code&amp;gt;pipewire&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;pipewire-pulse&amp;lt;/code&amp;gt;, DON&#039;T! They&#039;re significantly slower than standard &amp;lt;code&amp;gt;pulseaudio&amp;lt;/code&amp;gt;, which works just as well on the Wii.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note that these do cause the loss of some important functionality&#039;&#039;&#039;&lt;br /&gt;
* Tips that will break things&lt;br /&gt;
** &#039;&#039;&#039;If you do this, pipewire will stop working.&#039;&#039;&#039;  Disable &amp;lt;code&amp;gt;wireplumber&amp;lt;/code&amp;gt;, run the following, &amp;lt;code&amp;gt;systemctl --user disable --now wireplumber&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;systemctl --user mask wireplumber&amp;lt;/code&amp;gt;.  Without this, it uses &#039;&#039;&#039;10MB&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Some useful datasheets, and most notable, their operating temperatures, for parts of the Wii ==&lt;br /&gt;
&amp;quot;observed at&amp;quot; readings are with the case of, heatsink of Broadway + Hollywood, and no fan - left running for 1 hour.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SHARP Voltage Regulator - [https://www.digikey.in/htmldatasheets/production/44030/0/0/1/pq070xh02zxh.html] (85C max - observed at 47C)&lt;br /&gt;
&lt;br /&gt;
64MB (512Mbit) GDDR3 - [https://www.alldatasheet.com/datasheet-pdf/view/207161/QIMONDA/HYB18H512321BF.html] (85C max - observed at 57C)&lt;br /&gt;
&lt;br /&gt;
Various off-the-shelf power circuitry (generally very high maximum temperature - observed between 45C to 52C)&lt;/div&gt;</summary>
		<author><name>Tech64DD</name></author>
	</entry>
	<entry>
		<id>https://wiki.wii-linux.org/index.php?title=Useful_Development_Info&amp;diff=155</id>
		<title>Useful Development Info</title>
		<link rel="alternate" type="text/html" href="https://wiki.wii-linux.org/index.php?title=Useful_Development_Info&amp;diff=155"/>
		<updated>2025-05-07T15:40:23Z</updated>

		<summary type="html">&lt;p&gt;Tech64DD: fix formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains some information about the [[GameCube]], [[Wii]] or [[Wii U]] hardware or software, Linux kernel and general [[Wii-Linux]] topics that can be useful for development.&lt;br /&gt;
&lt;br /&gt;
== History of the GameCube and Wii GPUs ==&lt;br /&gt;
```Warning```: The source of the following info is a Discord message that Techflash wrote based on his memory of various other sources, so it might not be 100% accurate.&lt;br /&gt;
the development of the Flipper and Hollywood is actually kind of a funny story&lt;br /&gt;
Nintendo contracted SGI to make the graphics for the N64, as is very well known&lt;br /&gt;
there was a specific division in SGI to handle it, it was such a big deal, iirc the &amp;quot;Nintendo Operations Division&amp;quot;?&lt;br /&gt;
a bunch of the employees from that division spun off into their own company, ArtX Inc&lt;br /&gt;
Nintendo contracted ArtX Inc to design the GPU for the GameCube, however, only a year before the launch of the GameCube, ArtX got acquired by ATI&lt;br /&gt;
that&#039;s how the GameCube got the ATI branding, because ATI was now the parent company of ArtX -  technically, the GPU wasn&#039;t designed by ATI, and has no relation whatsoever to any ATI Radeon GPU&lt;br /&gt;
&lt;br /&gt;
== Wii (and Wii-Linux) boot process ==&lt;br /&gt;
=== Common ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
| Your Wii starts&lt;br /&gt;
|&lt;br /&gt;
| boot0 (stored in mask ROM inside the Starlet)&lt;br /&gt;
|&lt;br /&gt;
| All looks good with boot1?  If so, continue, if not, die.&lt;br /&gt;
|&lt;br /&gt;
| boot1 (stored on NAND)&lt;br /&gt;
|&lt;br /&gt;
| All looks good with boot2?  If so, continue, if not, die.&lt;br /&gt;
|&lt;br /&gt;
| boot2 (stored on NAND)&lt;br /&gt;
|&lt;br /&gt;
| BRANCH - If BootMii installed as boot2, skip the to the step marked with [*].  Otherwise, continue directly below this&lt;br /&gt;
|&lt;br /&gt;
| PowerPC startup and SysMenu loads (I think?  I can&#039;t find any info on necessarily when it happens, but I know it doesn&#039;t happen until at *least* here)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Linux, Gumboot, BootMii specific ===&lt;br /&gt;
&amp;lt;pre&amp;gt;| Depends on the user&#039;s setup, but somehow load BootMii, either via IOS or boot2&lt;br /&gt;
|&lt;br /&gt;
| [*] BootMii begins trying to load armboot.bin from SD&lt;br /&gt;
|&lt;br /&gt;
| armboot.bin (MINI) loaded and begins executing&lt;br /&gt;
|&lt;br /&gt;
| **BRANCH** - If stock MINI, load `bootmii/ppcboot.elf`.  If neagix modified MINI, load `gumboot/gumboot.elf`, then if failed, `bootmii/gui.elf`, then if failed, `bootmii/ppcboot.elf`.&lt;br /&gt;
|&lt;br /&gt;
| Code is now loaded on the Broadway and begins executing&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Linux specific ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
| User selects Linux kernel, either via BootMii&#039;s file picker, or Gumboot&#039;s boot menu&lt;br /&gt;
|&lt;br /&gt;
| Linux kernel loaded from SD, into RAM, and starts executing&lt;br /&gt;
|&lt;br /&gt;
| Regular Linux kernel initialization&lt;br /&gt;
|&lt;br /&gt;
| Linux loads the compiled-in initramfs CPIO, and executed init from it&lt;br /&gt;
|&lt;br /&gt;
| internal-loader determines a valid version number to try to use (e.g. `4.5.0` -&amp;gt; `v4_5_0.ldr`) finds any partition on SD that holds that file&lt;br /&gt;
|&lt;br /&gt;
| That file is found, mounted, and swtich_root&#039;ed into.  Otherwise, die here&lt;br /&gt;
|&lt;br /&gt;
| the loader launches the boot menu, letting the user pick a distro to boot&lt;br /&gt;
|&lt;br /&gt;
| distro is picked, mounted, and switch_root&#039;ed into&lt;br /&gt;
|&lt;br /&gt;
| regular Linux boot process for your selected distro continues here&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Techflash&#039;s method of porting over old kernel code ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
my personal process for porting over really old code like that is:&lt;br /&gt;
start with the last commit in which your &amp;quot;good&amp;quot; code still exists, if upstream, or is known good, if not&lt;br /&gt;
sanity check - does it actually work there?  Yes - continue.  No - figure out what&#039;s wrong (bad toolchain?), fix it, continue.&lt;br /&gt;
jump forward a few releases&lt;br /&gt;
add your code in&lt;br /&gt;
Build and test.&lt;br /&gt;
If it works out of the box, save this as the last known commit, jump to step 3.&lt;br /&gt;
If it works after minor fixes, save that code as the new &amp;quot;good&amp;quot; code, save this as the last known good commit, and jump to step 3.&lt;br /&gt;
If it&#039;s horribly broken, go back to the last known good commit, and jump forward by less releases this time&lt;br /&gt;
&lt;br /&gt;
eventually, you&#039;ll narrow down between 2 releases, where the &amp;quot;major&amp;quot; issues occurred, you can now scan through the git log between them, and find the commit removing / renaming whatever functions, variables, etc, your code needs.  You can now look back through the previous few commits, you&#039;ll probably see some changes happening to other drivers in preparation for the removal / rename / whatever.  Apply those to your driver, rebuild, and pray&lt;br /&gt;
&lt;br /&gt;
That&#039;s my personal process anyways, just figured I would drop it here in case it may be useful&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Linux graphics stack simplified ==&lt;br /&gt;
* Kernel&lt;br /&gt;
** DRM (Direct Rendering Manager, a basic layer for hw accel)&lt;br /&gt;
** (legacy, what the Wii uses) fbdev, a simple framebuffer with no inherent acceleration support&lt;br /&gt;
** KMS (Kernel Mode Setting, kernel sets up a framebuffer on top of DRM.  Handles the framebuffer TTY when using DRM)&lt;br /&gt;
* Userspace&lt;br /&gt;
** Xorg Driver (e.g. xf86-video-blahblah), provides 2D acceleration under Xorg&lt;br /&gt;
** Mesa Driver (e.g. /usr/lib/dri/blah_drv.so), provides 3D acceleration&lt;br /&gt;
** Mesa provides an OpenGL (and Vulkan iirc) interface to applications&lt;br /&gt;
&lt;br /&gt;
== Tips for reducing memory and CPU usage ==&lt;br /&gt;
* Reduce the systemd-journald max memory usage by editing `/etc/systemd/journald.conf`, setting `Storage=volatile` and `RuntimeMaxUse=500K`.  Without this, it uses around 5MB&lt;br /&gt;
* Disable `systemd-userdbd` with `systemctl disable --now systemd-userdbd`, you probably don&#039;t need this.&lt;br /&gt;
* Switch to an alternative network manager, or none at all if you want an offline experience.  While I ship NetworkManager by default, due to it&#039;s ease of setup, it is rather bulky, using about **9MB**.  Alternative networking managers may be more lightweight.&lt;br /&gt;
* Replace `/bin/sh`&#039;s symlink to `bash` with one to `dash`.  Since `/bin/sh` is meant to be the POSIX conformant shell, applications theoretically shouldn&#039;t rely on bashisms to be present.  Replacing it with `dash` should free up a variable amount of RAM, depending on how many shell instances are running. To do this, `pacman -S dash` to install it, then, as root, `ln -sf dash /bin/sh`&lt;br /&gt;
* Tips specific to running a graphical environment&lt;br /&gt;
** Disable `at-spi-dbus-bus`, it&#039;s a systemd user service.  Unless you&#039;re using accessibility features, this is just sitting here sucking up 10MB.  Run `systemctl --user mask at-spi-dbus-bus`.&lt;br /&gt;
** Also, set the `GTK_ALLY` environment variable to `none`.  This depends on how your DE/WM handles environment variables.  If running `startx` from a terminal, where `~/.xinitrc` is parsed, simply add `export GTK_ALLY=none` at the top.&lt;br /&gt;
** Reboot to apply the changes&lt;br /&gt;
* If using `pipewire` + `pipewire-pulse`, DON&#039;T! They&#039;re significantly slower than standard `pulseaudio`, which works just as well on the Wii.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note that these do cause the loss of some important functionality&#039;&#039;&#039;&lt;br /&gt;
* Tips that will break things&lt;br /&gt;
** &#039;&#039;&#039;If you do this, pipewire will stop working.&#039;&#039;&#039;  Disable &amp;lt;code&amp;gt;wireplumber&amp;lt;/code&amp;gt;, run the following, &amp;lt;code&amp;gt;systemctl --user disable --now wireplumber&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;systemctl --user mask wireplumber&amp;lt;/code&amp;gt;.  Without this, it uses &#039;&#039;&#039;10MB&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Some useful datasheets, and most notable, their operating temperatures, for parts of the Wii ==&lt;br /&gt;
&amp;quot;observed at&amp;quot; readings are with the case of, heatsink of Broadway + Hollywood, and no fan - left running for 1 hour.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SHARP Voltage Regulator - [https://www.digikey.in/htmldatasheets/production/44030/0/0/1/pq070xh02zxh.html] (85C max - observed at 47C)&lt;br /&gt;
&lt;br /&gt;
64MB (512Mbit) GDDR3 - [https://www.alldatasheet.com/datasheet-pdf/view/207161/QIMONDA/HYB18H512321BF.html] (85C max - observed at 57C)&lt;br /&gt;
&lt;br /&gt;
Various off-the-shelf power circuitry (generally very high maximum temperature - observed between 45C to 52C)&lt;/div&gt;</summary>
		<author><name>Tech64DD</name></author>
	</entry>
	<entry>
		<id>https://wiki.wii-linux.org/index.php?title=Useful_Development_Info&amp;diff=153</id>
		<title>Useful Development Info</title>
		<link rel="alternate" type="text/html" href="https://wiki.wii-linux.org/index.php?title=Useful_Development_Info&amp;diff=153"/>
		<updated>2025-05-07T15:30:30Z</updated>

		<summary type="html">&lt;p&gt;Tech64DD: Created page with &amp;quot;This page contains some information about the GameCube, Wii or Wii U hardware or software, Linux kernel and general Wii-Linux topics that can be useful for development.  == History of the GameCube and Wii GPUs == ```Warning```: The source of the following info is a Discord message that Techflash wrote based on his memory of various other sources, so it might not be 100% accurate. the development of the Flipper and Hollywood is actually kind of a funny sto...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains some information about the [[GameCube]], [[Wii]] or [[Wii U]] hardware or software, Linux kernel and general [[Wii-Linux]] topics that can be useful for development.&lt;br /&gt;
&lt;br /&gt;
== History of the GameCube and Wii GPUs ==&lt;br /&gt;
```Warning```: The source of the following info is a Discord message that Techflash wrote based on his memory of various other sources, so it might not be 100% accurate.&lt;br /&gt;
the development of the Flipper and Hollywood is actually kind of a funny story&lt;br /&gt;
Nintendo contracted SGI to make the graphics for the N64, as is very well known&lt;br /&gt;
there was a specific division in SGI to handle it, it was such a big deal, iirc the &amp;quot;Nintendo Operations Division&amp;quot;?&lt;br /&gt;
a bunch of the employees from that division spun off into their own company, ArtX Inc&lt;br /&gt;
Nintendo contracted ArtX Inc to design the GPU for the GameCube, however, only a year before the launch of the GameCube, ArtX got acquired by ATI&lt;br /&gt;
that&#039;s how the GameCube got the ATI branding, because ATI was now the parent company of ArtX -  technically, the GPU wasn&#039;t designed by ATI, and has no relation whatsoever to any ATI Radeon GPU&lt;br /&gt;
&lt;br /&gt;
== Wii (and Wii-Linux) boot process ==&lt;br /&gt;
=== Common ===&lt;br /&gt;
&amp;lt;nowiki&amp;gt;| Your Wii starts&lt;br /&gt;
|&lt;br /&gt;
| boot0 (stored in mask ROM inside the Starlet)&lt;br /&gt;
|&lt;br /&gt;
| All looks good with boot1?  If so, continue, if not, die.&lt;br /&gt;
|&lt;br /&gt;
| boot1 (stored on NAND)&lt;br /&gt;
|&lt;br /&gt;
| All looks good with boot2?  If so, continue, if not, die.&lt;br /&gt;
|&lt;br /&gt;
| boot2 (stored on NAND)&lt;br /&gt;
|&lt;br /&gt;
| **BRANCH** - If BootMii installed as boot2, skip the to the step marked with **[\*]**.  Otherwise, continue directly below this&lt;br /&gt;
|&lt;br /&gt;
| PowerPC startup and SysMenu loads (I think?  I can&#039;t find any info on necessarily when it happens, but I know it doesn&#039;t happen until at *least* here)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Linux, Gumboot, BootMii specific ===&lt;br /&gt;
&amp;lt;nowiki&amp;gt;| Depends on the user&#039;s setup, but somehow load BootMii, either via IOS or boot2&lt;br /&gt;
|&lt;br /&gt;
| **[\*]** BootMii begins trying to load armboot.bin from SD&lt;br /&gt;
|&lt;br /&gt;
| armboot.bin (MINI) loaded and begins executing&lt;br /&gt;
|&lt;br /&gt;
| **BRANCH** - If stock MINI, load `bootmii/ppcboot.elf`.  If neagix modified MINI, load `gumboot/gumboot.elf`, then if failed, `bootmii/gui.elf`, then if failed, `bootmii/ppcboot.elf`.&lt;br /&gt;
|&lt;br /&gt;
| Code is now loaded on the Broadway and begins executing&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Linux specific ===&lt;br /&gt;
&amp;lt;nowiki&amp;gt;| User selects Linux kernel, either via BootMii&#039;s file picker, or Gumboot&#039;s boot menu&lt;br /&gt;
|&lt;br /&gt;
| Linux kernel loaded from SD, into RAM, and starts executing&lt;br /&gt;
|&lt;br /&gt;
| Regular Linux kernel initialization&lt;br /&gt;
|&lt;br /&gt;
| Linux loads the compiled-in initramfs CPIO, and executed init from it&lt;br /&gt;
|&lt;br /&gt;
| internal-loader determines a valid version number to try to use (e.g. `4.5.0` -&amp;gt; `v4_5_0.ldr`) finds any partition on SD that holds that file&lt;br /&gt;
|&lt;br /&gt;
| That file is found, mounted, and swtich_root&#039;ed into.  Otherwise, die here&lt;br /&gt;
|&lt;br /&gt;
| the loader launches the boot menu, letting the user pick a distro to boot&lt;br /&gt;
|&lt;br /&gt;
| distro is picked, mounted, and switch_root&#039;ed into&lt;br /&gt;
|&lt;br /&gt;
| regular Linux boot process for your selected distro continues here&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Techflash&#039;s method of porting over old kernel code ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
my personal process for porting over really old code like that is:&lt;br /&gt;
start with the last commit in which your &amp;quot;good&amp;quot; code still exists, if upstream, or is known good, if not&lt;br /&gt;
sanity check - does it actually work there?  Yes - continue.  No - figure out what&#039;s wrong (bad toolchain?), fix it, continue.&lt;br /&gt;
jump forward a few releases&lt;br /&gt;
add your code in&lt;br /&gt;
Build and test.&lt;br /&gt;
If it works out of the box, save this as the last known commit, jump to step 3.&lt;br /&gt;
If it works after minor fixes, save that code as the new &amp;quot;good&amp;quot; code, save this as the last known good commit, and jump to step 3.&lt;br /&gt;
If it&#039;s horribly broken, go back to the last known good commit, and jump forward by less releases this time&lt;br /&gt;
&lt;br /&gt;
eventually, you&#039;ll narrow down between 2 releases, where the &amp;quot;major&amp;quot; issues occurred, you can now scan through the git log between them, and find the commit removing / renaming whatever functions, variables, etc, your code needs.  You can now look back through the previous few commits, you&#039;ll probably see some changes happening to other drivers in preparation for the removal / rename / whatever.  Apply those to your driver, rebuild, and pray&lt;br /&gt;
&lt;br /&gt;
That&#039;s my personal process anyways, just figured I would drop it here in case it may be useful&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Linux graphics stack simplified ==&lt;br /&gt;
* Kernel&lt;br /&gt;
** DRM (Direct Rendering Manager, a basic layer for hw accel)&lt;br /&gt;
** (legacy, what the Wii uses) fbdev, a simple framebuffer with no inherent acceleration support&lt;br /&gt;
** KMS (Kernel Mode Setting, kernel sets up a framebuffer on top of DRM.  Handles the framebuffer TTY when using DRM)&lt;br /&gt;
* Userspace&lt;br /&gt;
** Xorg Driver (e.g. xf86-video-blahblah), provides 2D acceleration under Xorg&lt;br /&gt;
** Mesa Driver (e.g. /usr/lib/dri/blah_drv.so), provides 3D acceleration&lt;br /&gt;
** Mesa provides an OpenGL (and Vulkan iirc) interface to applications&lt;br /&gt;
&lt;br /&gt;
== Tips for reducing memory and CPU usage ==&lt;br /&gt;
* Reduce the systemd-journald max memory usage by editing `/etc/systemd/journald.conf`, setting `Storage=volatile` and `RuntimeMaxUse=500K`.  Without this, it uses around **5MB**&lt;br /&gt;
* Disable `systemd-userdbd` with `systemctl disable --now systemd-userdbd`, you probably don&#039;t need this.&lt;br /&gt;
* Switch to an alternative network manager, or none at all if you want an offline experience.  While I ship NetworkManager by default, due to it&#039;s ease of setup, it is rather bulky, using about **9MB**.  Alternative networking managers may be more lightweight.&lt;br /&gt;
* Replace `/bin/sh`&#039;s symlink to `bash` with one to `dash`.  Since `/bin/sh` is meant to be the POSIX conformant shell, applications theoretically shouldn&#039;t rely on bashisms to be present.  Replacing it with `dash` should free up a variable amount of RAM, depending on how many shell instances are running. To do this, `pacman -S dash` to install it, then, as root, `ln -sf dash /bin/sh`&lt;br /&gt;
* Tips specific to running a graphical environment&lt;br /&gt;
** Disable `at-spi-dbus-bus`, it&#039;s a systemd user service.  Unless you&#039;re using accessibility features, this is just sitting here sucking up **10MB**.  Run `systemctl --user mask at-spi-dbus-bus`.&lt;br /&gt;
** Also, set the `GTK_ALLY` environment variable to `none`.  This depends on how your DE/WM handles environment variables.  If running `startx` from a terminal, where `~/.xinitrc` is parsed, simply add `export GTK_ALLY=none` at the top.&lt;br /&gt;
** Reboot to apply the changes&lt;br /&gt;
* If using `pipewire` + `pipewire-pulse`, **DON&#039;T!!**  They&#039;re significantly slower than standard `pulseaudio`, which works just as well on the Wii.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
```Note that these do cause the loss of some important functionality```&lt;br /&gt;
* Tips that will break things&lt;br /&gt;
** ```If you do this, pipewire will stop working```.  Disable `wireplumber`, run the following, `systemctl --user disable --now wireplumber`, and `systemctl --user mask wireplumber`.  Without this, it uses **10MB**.&lt;br /&gt;
&lt;br /&gt;
== Some useful datasheets, and most notable, their operating temperatures, for parts of the Wii ==&lt;br /&gt;
&amp;quot;observed at&amp;quot; readings are with the case of, heatsink of Broadway + Hollywood, and no fan - left running for 1 hour.&lt;br /&gt;
&lt;br /&gt;
SHARP Voltage Regulator - [https://www.digikey.in/htmldatasheets/production/44030/0/0/1/pq070xh02zxh.html] (85C max - observed at 47C)&lt;br /&gt;
64MB (512Mbit) GDDR3 - [https://www.alldatasheet.com/datasheet-pdf/view/207161/QIMONDA/HYB18H512321BF.html] (85C max - observed at 57C)&lt;br /&gt;
Various off-the-shelf power circuitry (generally very high maximum temperature - observed between 45C to 52C)&lt;/div&gt;</summary>
		<author><name>Tech64DD</name></author>
	</entry>
	<entry>
		<id>https://wiki.wii-linux.org/index.php?title=Main_Page&amp;diff=152</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.wii-linux.org/index.php?title=Main_Page&amp;diff=152"/>
		<updated>2025-05-07T15:07:01Z</updated>

		<summary type="html">&lt;p&gt;Tech64DD: added troubleshooting to main page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Welcome to the Wii-Linux Wiki! ==&lt;br /&gt;
&lt;br /&gt;
You&#039;ve reached the wiki page of [[Wii-Linux]].  Here you may find some information related to Wii-Linux, it&#039;s development, and a bit about the [[Wii]] hardware itself.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; You may also want to check out a similar wiki site, &#039;&#039;&#039; [https://wiibrew.org WiiBrew].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Navigation ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Hardware !! Software&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* Consoles&lt;br /&gt;
** [[Wii U]]&lt;br /&gt;
** [[Wii]]&lt;br /&gt;
** [[GameCube]]&lt;br /&gt;
* Accessories&lt;br /&gt;
** Memory Card ([[EXI]] bus)&lt;br /&gt;
*** [[SD Gecko]]&lt;br /&gt;
*** [[USB Gecko]]&lt;br /&gt;
*** [[Memory Card]]&lt;br /&gt;
*** [[Microphone]]&lt;br /&gt;
*** [[Broadband Adapter]]&lt;br /&gt;
*** [[Modem]]&lt;br /&gt;
** [[GameCube Controller]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
* [[Wii-Linux]]&lt;br /&gt;
* [[Wii-Linux Distros|Distros]]&lt;br /&gt;
** [[ArchPOWER]]&lt;br /&gt;
** [[Void-PPC]]&lt;br /&gt;
** [[Debian-Ports PPC]]&lt;br /&gt;
* [[Recommended Apps]]&lt;br /&gt;
* [[Troubleshooting]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Tech64DD</name></author>
	</entry>
	<entry>
		<id>https://wiki.wii-linux.org/index.php?title=Troubleshooting/FAQ&amp;diff=151</id>
		<title>Troubleshooting/FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.wii-linux.org/index.php?title=Troubleshooting/FAQ&amp;diff=151"/>
		<updated>2025-05-07T15:05:05Z</updated>

		<summary type="html">&lt;p&gt;Tech64DD: Created page with &amp;quot;This page contains some fixes for common issues with Wii-Linux.  == Gumboot isn&amp;#039;t loading!  What&amp;#039;s going on? == Depends on what&amp;#039;s wrong with it. Black screen?  Immediate reboot?  Check if you have bootmii installed correctly. Blinking disk slot?  Check if your SD Card is inserted properly, this means that bootmii can&amp;#039;t find ppcboot.elf, armboot.elf, or it&amp;#039;s config. HBC / Priiloader won&amp;#039;t load bootmii?  Check if bootmii is installed correctly as an IOS - these can&amp;#039;t l...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains some fixes for common issues with [[Wii-Linux]].&lt;br /&gt;
&lt;br /&gt;
== Gumboot isn&#039;t loading!  What&#039;s going on? ==&lt;br /&gt;
Depends on what&#039;s wrong with it.&lt;br /&gt;
Black screen?  Immediate reboot?  Check if you have bootmii installed correctly.&lt;br /&gt;
Blinking disk slot?  Check if your SD Card is inserted properly, this means that bootmii can&#039;t find ppcboot.elf, armboot.elf, or it&#039;s config.&lt;br /&gt;
HBC / Priiloader won&#039;t load bootmii?  Check if bootmii is installed correctly as an IOS - these can&#039;t load bootmii as boot2.&lt;br /&gt;
&lt;br /&gt;
== I get an error from Gumboot trying to load the kernel!  What&#039;s wrong? ==&lt;br /&gt;
Check that you copied all of the files properly.  It&#039;s possible that the kernel was corrupted while copying it.&lt;br /&gt;
Try putting the SD Card in a computer, deleting wiilinux/vX_X.krn, and copying it out of the SD Files archive.&lt;br /&gt;
&lt;br /&gt;
== How do I modify the kernel arguments? ==&lt;br /&gt;
Open the kernel binary (wiilinux/vX_X.krn) in a hex editor, search for the ASCII text root=, then user overwrite mode to modify the arguments (tip: overwrite the large chunk of padding, that&#039;s what it&#039;s there for!)&lt;br /&gt;
&lt;br /&gt;
== The kernel seems to load (green bar on gumboot), but then the screen stays on garbled colors, fully black, or black screen with the loader text!  What&#039;s wrong? ==&lt;br /&gt;
This could be tons of things.&lt;br /&gt;
If you&#039;re getting the garbled colors, it means the kernel failed to initialize very early on, before initializing the AVE-RVL.&lt;br /&gt;
If you&#039;re getting a fully black screen without even the loader text at the top, that means that it failed after initializing the AVE-RVL, gcnfb, but before displaying the loader text.&lt;br /&gt;
If you&#039;re getting a black screen with the loader text at the top left, it means the kernel has initialized a decent bit, but something isn&#039;t working.  Try setting the kernel arguments (see the previous answer, right aove this), replace the loglevel=x parameter with loglevel=7 to get full kernel logs on the screen, or check a USB gecko.&lt;br /&gt;
For all of these, having a USB gecko would be very beneficial.&lt;br /&gt;
&lt;br /&gt;
== I see the login screen, but I can&#039;t type on my USB keyboard, what gives? ==&lt;br /&gt;
Check your USB keyboard connection, is it plugged in, and plugged in all the way? (more common than you might think)&lt;br /&gt;
Try pressing num lock/caps lock/scroll lock, do the lights come on?  If not, check if your keyboard is just dead (plug it into another device).  If you&#039;ve verified all of this, and it still doesn&#039;t work, ask for assistance.&lt;br /&gt;
&lt;br /&gt;
== Why is my WiFi so slow?  I can&#039;t even get 1MB/s! ==&lt;br /&gt;
That&#039;s just how it is.  It&#039;s hardware limitations, that&#039;s how it is in all standard Wii software as well, the Wii&#039;s WiFi chipset is just that slow.  I highly recommend using USB Ethernet, or a supported USB WiFI adapter wherever possible if you care about speed.&lt;br /&gt;
&lt;br /&gt;
== Why isn&#039;t [some package name here] in the ArchPOWER repos? ==&lt;br /&gt;
I don&#039;t maintain the ArchPOWER repos, but I do maintain a small group of extra packages for ArchPOWER in a seperate repo.&lt;br /&gt;
Ask me, I&#039;ll check for you, and build it if possible.&lt;br /&gt;
&lt;br /&gt;
== Why is logging in so slow? ==&lt;br /&gt;
Arch (and by extension, ArchPOWER) uses a fairly inefficient (though more secure) hashing algorithm for the password by default, that is quite slow on the Wii&#039;s mediocre CPU.  If you&#039;d like a better balance between security and speed, you can use SHA256 instead.&lt;br /&gt;
Simply edit /etc/login.defs, then replace YESCRYPT with SHA256, then regenerate the password of each user.&lt;br /&gt;
&lt;br /&gt;
== Why I get out-of-memory errors despite turning on a swapfile/swap partition? ==&lt;br /&gt;
This is a bug in the default Wii Linux configuration that was shipped for quite some time, but eventually fixed.&lt;br /&gt;
You can either:&lt;br /&gt;
A) Update your system (the latest wii-linux-meta fixes it)&lt;br /&gt;
B) Delete, or fix, /etc/udev/rules.d/99-zram.rules to not have 100M allocated&lt;br /&gt;
&lt;br /&gt;
== Can I play [insert game here] on Wii Linux? ==&lt;br /&gt;
Short Answer: No.  Stop trying.  You don&#039;t want to get it to work.&lt;br /&gt;
Long answer: Well.... technically, yes.&lt;br /&gt;
It&#039;s very likely compiled for x86, so it&#039;ll need to be emulated.  That&#039;s already unusably slow on the Wii, but let&#039;s carry on.&lt;br /&gt;
There&#039;s no graphics acceleration of any kind, so it&#039;ll be rendering on the emulated x86 CPU, and then drawing to the screen w/ native PPC code, but still on the CPU&lt;br /&gt;
So, yes, it may execute the game&#039;s code, technically, but you sure as hell won&#039;t be &amp;quot;playing&amp;quot; it.&lt;/div&gt;</summary>
		<author><name>Tech64DD</name></author>
	</entry>
	<entry>
		<id>https://wiki.wii-linux.org/index.php?title=Modem&amp;diff=150</id>
		<title>Modem</title>
		<link rel="alternate" type="text/html" href="https://wiki.wii-linux.org/index.php?title=Modem&amp;diff=150"/>
		<updated>2025-05-06T22:19:06Z</updated>

		<summary type="html">&lt;p&gt;Tech64DD: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The GameCube Modem is a device that plugs into the serial port (the [[EXI]] bus) on the bottom of a [[GameCube]], and exposes an RJ11 connector for dial-up internet access. It&#039;s intended use is for online multiplayer games.&lt;br /&gt;
&lt;br /&gt;
== Compatibility ==&lt;br /&gt;
There is no driver for the Modem in either [[Wii-Linux]], nor [[NetBSD]].&lt;/div&gt;</summary>
		<author><name>Tech64DD</name></author>
	</entry>
	<entry>
		<id>https://wiki.wii-linux.org/index.php?title=Broadband_Adapter&amp;diff=149</id>
		<title>Broadband Adapter</title>
		<link rel="alternate" type="text/html" href="https://wiki.wii-linux.org/index.php?title=Broadband_Adapter&amp;diff=149"/>
		<updated>2025-05-06T22:18:00Z</updated>

		<summary type="html">&lt;p&gt;Tech64DD: added mention of the EXI bus&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The GameCube Broadband Adapter (sometimes abbreviated as BBA) is a device that plugs into the serial port (the [[EXI]] bus) on the bottom of a [[GameCube]], and exposes an RJ-45 (commonly referred to as Ethernet) plug.  It&#039;s intended use is for online or local multiplayer games.&lt;br /&gt;
&lt;br /&gt;
== Compatibility ==&lt;br /&gt;
The BBA has a driver in [[Wii-Linux]], but since the GameCube port hasn&#039;t been confirmed working, the functionality of the driver is unknown.&lt;/div&gt;</summary>
		<author><name>Tech64DD</name></author>
	</entry>
	<entry>
		<id>https://wiki.wii-linux.org/index.php?title=Modem&amp;diff=145</id>
		<title>Modem</title>
		<link rel="alternate" type="text/html" href="https://wiki.wii-linux.org/index.php?title=Modem&amp;diff=145"/>
		<updated>2025-05-06T22:13:19Z</updated>

		<summary type="html">&lt;p&gt;Tech64DD: created the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The GameCube Modem is a device that plugs into the serial port on the bottom of a [[GameCube]], and exposes an RJ11 connector for dial-up internet access. It&#039;s intended use is for online multiplayer games.&lt;br /&gt;
&lt;br /&gt;
== Compatibility ==&lt;br /&gt;
There&#039;s no driver available for it, but it does get detected by the system (even if it can&#039;t be used).&lt;/div&gt;</summary>
		<author><name>Tech64DD</name></author>
	</entry>
	<entry>
		<id>https://wiki.wii-linux.org/index.php?title=Broadband_Adapter&amp;diff=144</id>
		<title>Broadband Adapter</title>
		<link rel="alternate" type="text/html" href="https://wiki.wii-linux.org/index.php?title=Broadband_Adapter&amp;diff=144"/>
		<updated>2025-05-06T22:03:19Z</updated>

		<summary type="html">&lt;p&gt;Tech64DD: created the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The GameCube Broadband Adapter (sometimes abbreviated as BBA) is a device that plugs into the serial port on the bottom of a [[GameCube]], and exposes an RJ-45 (commonly referred to as Ethernet) plug.  It&#039;s intended use is for online or local multiplayer games.&lt;br /&gt;
&lt;br /&gt;
== Compatibility ==&lt;br /&gt;
There is a kernel driver for it, but since the GameCube port of Wii-Linux hasn&#039;t been confirmed working on a [[GameCube]] yet it&#039;s functionality status is unknown.&lt;/div&gt;</summary>
		<author><name>Tech64DD</name></author>
	</entry>
	<entry>
		<id>https://wiki.wii-linux.org/index.php?title=User:Tech64DD&amp;diff=92</id>
		<title>User:Tech64DD</title>
		<link rel="alternate" type="text/html" href="https://wiki.wii-linux.org/index.php?title=User:Tech64DD&amp;diff=92"/>
		<updated>2025-01-08T13:48:11Z</updated>

		<summary type="html">&lt;p&gt;Tech64DD: Created page with &amp;quot;Don&amp;#039;t worry boys, the Engineer is Engi-here!&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Don&#039;t worry boys, the Engineer is Engi-here!&lt;/div&gt;</summary>
		<author><name>Tech64DD</name></author>
	</entry>
</feed>