Note: this is work-in-progress. This note will be gone when the post is finished.
Being the distro with the most versatile CPU architecture support, it was no wonder that Debian and its derivative systems were the first to be installed and run on homebrew-enabled Wii once the linux kernel was successfully ported. Debian is equipped with a powerful and easy-to-use Debian Installer, which enables people unfamiliar with linux to install and enjoy Debian without needing any fancy tool or ‘professional help’. Unfortunately, installing Debian-based systems on Wii has always been a headache, because Debian Installer can not output correct colour due to an issue with Wii’s framebuffer data format, and the user is unable to interact with it. It may be a little bit late, but that issue can now be dealt with and it is now possible to install Debian on Wii in the real ‘Debian way’.
This post will guide you through the process of installing Debian on homebrew-enabled Wii using a customized Debian Installer. However, if you prefer to go the lazy/easy way, there is a pre-installed disk image file available for download towards the end of the post, along with explanations on usage.
- Homebrew-enabled Wii
Checkout WiiBrew if you have no idea what this means.
- Debian Installer for Wii
The compressed archives contain both IOS and MINI versions of the installer, which can be loaded by Homebrew Channel (HBC) and Bootmii, respectively.
Note: only Lenny supports the currently available version of ‘cube’ Xorg driver.
- SD(HC) card
This will hold the Debian Installer for Wii files and go into the front SD slot of Wii. The card should be formatted as a single FAT(16/32) partition or has its first partition formatted as FAT(16/32).
Extract the ‘apps’ folder, which holds files of IOS version of the installer, or the ‘bootmii’ folder, which holds files of MINI version of the installer, to the root folder of the (first partition of the) card. For the MINI version to work, Bootmii files (armboot.bin, ppcboot.elf and bootmii.ini) should also be placed inside ‘bootmii’ folder.
- Debian CD/DVD ISO image
One businesscard (smallest), netinst (medium size) or DVD (HUGE!) ISO image is needed. A copy of netinst ISO is included in the Installer packages for your convenience. For other types of images, please use this debian-cd mirror, which has the most complete collection. Just select a version and browse into ‘powerpc/iso-cd’ or ‘powerpc/iso-dvd’. Larger images usually save some installation time, because fewer packages need to be downloaded. Remember to use Lenny ISO for Lenny Installer, and Squeeze ISO for Squeeze Installer.
- USB storage device
This will hold the Debian ISO image during installation onto the card in front SD. Extract the ISO image from downloaded installer archive and save it, preferably in the root folder, to any partition of this device.
(Alternatively, you can place the Debian ISO image on the front SD card and install Debian onto this USB device. In fact, this device can be omitted. Advanced users can partition the front SD card into at least 2 partitions, which is not a trivial task in Windows, but trivial enough in Linux, with the first formated as FAT to hold both the Installer files and ISO image, and install Debian onto the second partition.)
- USB Keyboard
USB mouse is only required after the installation is complete and if you intend to install and use a GUI desktop.
- Network connection through USB LAN/wifi adapter (IOS/MINI) or Wii native wifi (MINI)
Actually, this is not absolutely necessary, except when businesscard ISO is being used, but without it, you will end up with a very limited (base) system, unless you use the Debian DVD ISO image for installation. As much support for various USB LAN adapters and USB wifi adapters as possible have been built into the Installer. Note that the Installer’s wifi support is limited to WEP-based security mode.
You most likely will also need a USB hub. Just remember that USB 1.0/1.1 hubs might slow down transfer speeds of connected USB storage devices, especially in MINI.
Boot Debian Installer for Wii
The IOS version of the Installer can be directly loaded through HBC by selecting ‘Debian Installer’. In this version, Wii’s native wifi and DVD drive are unavailable.
The MINI versions are in the ‘bootmii’ folder with names like ‘d-i.480i(NTSC).elf’. You can load the file corresponding to your TV signal format through Bootmii GUI, or rename the file to ‘ppcboot.elf’ and let Bootmii auto-launch it at Wii power-on, or boot directly into it by launching Bootmii installed as IOS from HBC. You might want to remove all files incompatible with your TV signal format to avoid confusion and make selection in bootmii GUI easier.
I’m not going to have much time for a while to work on this after this Sunday, but I’m hoping to have at least a decent server running on the Wii before 2013. I’ll try to post a short summary of my findings before December if I’m successful in compiling a working kernel.
I don’t know what I’ve done without your blog here over the last few weeks, your help and previous posts here and on other topics have been of much help. Thanks your all your help, hopefully others find your blog as useful as I did.
I’ll take a look at it, I’m assuming it’s the GeeXboX for Wii sources that has the toolchain. It seems my errors are probably just a multiple of minor issues that are indirectly caused by the issues I’m now getting with the way I’m cross compiling my kernels. It will be interesting to see how many of my errors mentioned above are solved by a correctly compiled kernel.
There doesn’t seem to be much development going on with Linux systems on the Wii anymore, but it is good to see that is still being maintained. One thing that I haven’t been able to find much information on is, why no gc-linux patches were created for after the 2.6.32 kernel. It seems some of the work made it to the mainline kernels but most didn’t. Is it even possible to boot a recent mainline kernel (now at 3.5) without patches on the Wii?
Development and mainlining of wii-specific patches stopped apparently more that a year ago. Fortunately, 2.6.32 happened to be an LTS series, so it is fairly trivial to use wii patches on newer 2.6.32 kernels. As to newer versions, you won’t be able to apply the patches easily.
I installed amd64 Debian Squeeze with the net installation ISO on a USB drive using my laptop with a JFS filesystem that mounted without errors. It seems packages in the ISO are not related to the issue since doing the same thing on the Wii doesn’t work.
Last night, I tried to build a newer kernel using 18.104.22.168 (the same one you used here) and was unable to get it to work. Just like 22.214.171.124, I get OHCI (usb 1.1) errors, so I unselected anything OHCI related using “menuconfig” and cross compiled using the default wii config (using the mikep5 patch both with and without your kernel patch) and they both complete without any other errors that prevent (cross) compiling. Other than compile warnings of offset lines and unused variables, I get no other errors, but when I try to load the compiled zimage in BootMii, my Wii freezes at the BootMii menu with the drive light stuck on after selecting the kernel. It gives no output, the kernel just hangs. I tried earlier today with 126.96.36.199 and later 2.6.32, but it does the same thing, so I’m going to start from scratch following the cross compile article on Wikipedia. So far, I’ve always used the default setting with the exceptions of enabling EXT4/JFS/XFS and disabling OHCI.
Do you remember how you got around the OHCI errors? Did you have anything like this happen to you before with it freezing with a new kernel? Also, your kernels here still work on my Wii, but all of my kernels now freeze when loaded. I’m assuming since the mikep5 patch applies cleanly without any warnings at all with 2.6.32 and I’m using the default Wii configuration file, that it should work at least enough to switch screens away from the BootMii menu; not just freeze with the disc drive light on.
I dont remember any ohci errors. You should check kernel config (default does not necessarily mean it is used in released kernel) and make sure IOS and MINI configurations are not mixed up. Also check kernel commandline parameters. If you have trouble compiling working kernels, you can try geexbox for wii toolchain, which works on x86.
After successfully running your Debian installer using JFS and later XFS, I took a look in “/var/log/” to see if I could find anything that would help me in finding the reason why a custom built kernel with JFS and XFS enabled wouldn’t mount the JFS/XFS root partitions. I found a few interesting things in the “status” file in the “installer” folder in “/var/log”. It seems “jfsutils-udeb” and “xfsprogs-udeb” are stripped-down versions of “jfsutils” and “and “xfsprogs” and are used as replacements to reduce the size of the installer. There are even warnings stating: “Don’t attempt to install this package, it has no support for a couple of features you surely want. Anyway, it should fail to install.” for both XFS and JFS. I’m not sure if this is the complete cause of the problem, but it’s definitely not helping.
Can this be modified to include and use the jfsutils and xfsprogs by default instead of their lightweight counterparts? If not, who should I contact about this? If this all that’s causing the mount errors, than I would even be open to paying for these features to be included. The kernel I’m building is basically optimized for trading I/O speeds and responsiveness for a decrease in RAM and CPU usage.
Are you saying that you have already insalled onto JFS/XFS successfully? Then what is the problem?
I could be wrong, but the messages you see are probably there to warn ppl against using these udeb packages as replacements for full deb packages. In installation using full CD/DVD or with network updates available, full deb packages are used.
Sorry, it seems what I last wrote was really wordy and inaccurate. I was saying that I successfully installed a Debian filesystem in a JFS partition (later XFS separately) using the Wii Debian Installer. I could access the filesystem partitions after each of the 2 installations using Linux on my laptop, but not the Wii using IOS/MINI; meaning that the partitions were created correctly. I was using a custom kernel with XFS and JFS filesystems enabled. Even with the custom kernel, I still get a mounting error that basically shows that the kernel knows what the partition is, but still can’t mount it.
I should have asked first, does the Wii Debian Installer (elf binary) cause the issue or is it the ISO Debian Installer Image? In the post above, I was assuming that the error was from the elf binary, not the ISO image.
If it is the ISO image causing the issue, than just ignore the second half of my last post as I was just asking if jfsutils and xfsprogs could be included and used by default in the elf binary. I originally assumed files in “/var/log/installer” were created by the elf binary and that the elf binary contained these packages itself.
To clarify, the wii installer is just normal debian installer with the kernel replaced, and repackaged to be bootable by wii IOS/MINI. All non-kernel stuff are the same and should work the same as official debian installers.
Since you can mount the partitions in other installations, the fs support in kernel is probably not properly built.
On the other hand, you can try using official netinst iso to format and install onto XFS/JFS and see whether it would produce similar problems
I tried the Debian cd1 installer image with a wired internet connection instead of the net installer and unlike the net or business card installers, it gets stuck after a couple of steps when loading the files from the ISO saying “(process:###) kbd-mode: setting console mode to Unicode (UTF-8)”. The #### is a 4 digit number that seems to increment indefinitely, disables the GUI on tty1, and repeats the error message on every tty (keyboard still works). I tried both the the Squeeze and Wheezy versions and both output the same error at the same part of the installer. Am I using the right CD; other distributions such as Mint and Ubuntu only have one cd, not 4 or more? For example, with Wheezy, I used: “debian-wheezy-DI-b1-powerpc-CD-1.iso”. What do you think could be causing this?
My guess is you should include all CDs in your source drive, or simply use the DVD version. The installer needs to find multiple debs in the CD/DVD to proceed. Generally speaking, it is also better to use CD/DVD that matches installer version.
Another thing, in my last comment, I was talking about using netinst for installation onto XFS/JFS on non-wii platform to see whether similar problems are encountered.
Hi, i’ve just installed the linux and i’m in the part of installing the gui, I type apt-get install gdm lxde xorg-xserver-video-fbdev and it tells me there are no packages, after googling a lit bit i found out theres a small error, its xserver-xorg-video-fbdev not xorg-xserver-video-fbdev, (well at least it gives me some results) and i’m now downloading something 😛 (its about 700mb right????). Anyway thanks for the tutorial 😀
I was not able to find anything helpful in boot.elf/ppcboot.elf. From what I can tell from the configuration file in /proc/config.gz, the kernel (boot loader) does not have support for JFS compiled in due to “CONFIG_JFS_FS=n”. I would’ve needed to build the kernel anyway if I wanted to test zRam since the module isn’t built in it anyway. When I get a chance, I’ll compile the kernel on the Wii since there doesn’t seem to be any disadvantages other than the extended length of time to compile. From what other developers have been telling me in recent days, JFS and zRam would result in minimal improvement. If there is a huge improvement by some chance (probably won’t be), I’ll let you know. Also, I never noticed this at first, but the shared column in the “free” command is obsolete and is no longer accurate (according to the its manual). Instead, a command like “top” should be used. The shared column no longer reports the correct amount of shared memory, it always reports 0.
I’m currently testing the abilities of the Wii’s wireless card with ASCII WEP. It seems that the Wii can’t recognize ad-hoc/virtual networks. If someone has managed to do this, let me know. This would be quite useful as not everyone has a wireless network.
By the way Farter (as of July 2012), are you actively working on the RGB Framebuffer? Is it possible to change/lower the color depth and resolution? Do you have a more recent patch than the one on your June22 post on your blog from last year?
It will be interesting to see what happens with the Wii U when it comes out this December. It’s rumoured to have a Powerpc processor with several improvements over the current Wii. The work done with most of the various Wii Linux distributions may be relatively easy to port.
No, I’ve done nothing Wii-related this past year. There is not much point in lowering fb color depth or res, because you will have to convert to native depth/res using CPU for the image to be displayed, which is just more hassle for no real benefits.
I originally assumed zRam would have more of an impact since GUI Wii Linux relies on caching and this would reduce it since most data is compressible. I guess it’s a balancing act and it would be hard to tell if there’s a noticeable performance boost without testing it on a wii; I assume this is why it hasn’t been mentioned yet.
As for shared, I tried using the “free” command and it showed 0. On a Lubuntu desktop, there is shared memory, even in just TTY. Is this just because of the lack of ram/running programs causing the lack of shared memory?
Also, I tried JFS with the installer and was warned after partitioning that it was “not supported by the default boot loader”. When I booted it after installing (first booting with MINI, then IOS), each failed with a kernel panic saying that a Ext2/3/4 and Fat16/32 partition containing the Linux OS could not be found. I tested this only with the Debian Squeeze version that you posted. I originally assumed that you removed this in the boot kernel when building it in order to save space since it works with x86 desktops but now I’m not sure what’s causing it. I’m hoping that using JFS will free up enough CPU that using zRam wouldn’t put it at a huge CPU disadvantage compared to the other filesystems.
I haven’t been touching this for very long, so I can’t comment on the ‘free’ results.
As to JFSI, I can’t remember whether JFS support is built into boot.elf/ppcboot.bin. Even if it is, you will still have to modify kernel commandline parameter to tell the kernel that the rootfs is in JFS. To do this, you will have to hexedit boot.elf/ppcboot.bin.
Thanks for posting this, it was quite helpful in repairing another (Debian “Etch”) PowerPC. Originally I was going to use Toolchains or Qemu, but was unable to get either working reliably on Ubuntu 12.04; so for now, building/compiling my PowerPC packages using the GNU make system on the Wii is more convenient. My knowledge of Unix/Linux operating systems is limited as I have less than a year of experience with them.
I’ve been trying to implement zRam (Compcache) on Debian based Wii Linux distributions (in a similar way to recent Ubuntu versions), but have been unsuccessful as I do not have enough experience doing these types of things. I think I would need to build zRam into the Wii Linux kernel as a module and use modprobe after, somehow with init scripts, but I don’t know much about how the kernel boots in Wii Linux distributions. Correct me if I’m wrong, but I think that Wii Linux distributions such as the one here do NOT use upstart ( zRam uses upstart by default). I know from benchmarking computers with similar specs as the Wii have show about a 10 percent improvement with zRam. By default, it basically compresses data in RAM using Lzo. Eventually, I would like to modify zRam to use a better compression method such as Gzip instead of Lzo, but this is way beyond my level. Do you know if there are reasons why Wii Linux distribution do not use zRam yet. Do you think it could be easy to implement and if there is enough performance gain to be noticeable?
Also, why are EXT2/EXT3/EXT4 used by default and not JFS for the Linux root filesystem? From what I can tell from Google, JFS may not have a ported defragmenter in Linux, journaling can’t be disabled, and it slightly slower than each of them overall, but it has the lowest CPU usage by far. The issue about JFS fragmenting shouldn’t be much of a problem since it takes a lot to fragment it and the Wii probably won’t be used for moving, copying, and deleting large numbers of large files. Is there an easy way that I could modify your installer to allow for this (such as editing the boot kernel with a Hex-editor) or would I have to compile the kernel from scratch?
The problem with Wii is that CPU, memory and IO speed are all very limited. Trading off between these (zRam is trading more CPU cycles and RAM usage for less IO) may not necessarily generate expected gain of performance.
As to JFS, if use the installer, you should be able to change filesystem type to JFS during the partition setup stage.
Is it possible for you yo upload the Debian Installer again? As the current links do no work. Would love to give my Wii another use other than collecting dust 🙂
The hotfile links are working. I’ve deleted the non-working links.
Thanks Farter 🙂
Got a slight problem. During installation I am getting No Ethernet Detected. I then select b43 but nothing happens it just keeps sending me back to the same selection screen.
Native wifi is only available in MINI mode.
Thank you very much for your installation guide and everything.
But why there are so many modules missing? I’ve used the tar archive at the end of the installing process, as you’ve written in the guide. But there’s missing one for bluetooth (to use the wiimote) and I also need the whole dvb-usb stuff.
I’ve downloaded the linux-image-2.6.32-5-powerpc from debian archive, extracted everything, and just tried to copy the modules to my sdcard, but at booting it tells me, that it is expecting 188.8.131.52 instead of 2.6.32-5.
Where do I get the whole kernel modules like at a usual pc installation?
Ok, I’ve managed to use the wiimote by installing the debian packages bluez and wminput.
But, where do I get the right kernel-headers to build v4l-dvb from source?
I’ve found linux-headers-2.6.32-5-powerpc/2.6.32-43 (source: linux-2.6 2.6.32-43) at snapshot.debian.org.
The first time after compiling process I got an error message about version magic (kernel: 2.6.32-43 / modules: 2.6.32-5-powerpc), so I just edited the kernel string inside the linux-headers.
The second time after compiling process I got an error message again about version magic (‘184.108.40.206 mod_unload modversions’ should be ‘220.127.116.11 preempt mod_unload’).
Please, can anyone help me?
A simpler solution is to use ‘-f’ to force load pre-compiled modules from debian.
Thank you for quick reply…
Could you please give me short instruction how I get my dvb-t usb stick to work? It has an af9005 chip.
On my laptop (also debian squeeze) I just need to copy the firmware (af9005.fw) into /lib/firmware/ and compile the latest sources of v4l-dvb from linuxtv.
On Wii I don’t get it to compile/install the v4l-dvb part. So, if I plug in the stick, I can see him identified at dmesg but the firmware won’t be loaded, guess cause of the missing module dvb-usb-af9005.ko which I can’t get compiled for the right kernel.
You can try but Wii most likely won’t be able to handle DVB over USB.
I’m pretty sure the Wii won’t be able to display the dvb output stream to watch live tv. But to save the stream directly to usb hdd via ‘cat’ should be possible.
For now, I can select my Wii channel which runs debian through bootmii. Debian mounts the usb hdd at startup and runs pyLoad as download-daemon and (I’m still working at it) a simple gui (controlled by wiimote) to set a timer for recording tv via dvb-t.
Maybe it’s possible to encode the stream after recording to save some space on the hdd, but I think the Wii is much too slow to handle this.
To watch the recorded stream I will use WiiMC. PyLoad can be controlled with my laptop or handy via webinterface.
You should first calculate the data rate of your stream and test using ‘dd’ whether Wii can handle that rate between the 2 usb ports.
If you really need to compile your own module, the kernel sources are just vanilla sources plus geexbox for wii and vfb patches.
‘btusb’ module is included in the download archive modules, user space bluetooth tools are not.