├── baedit ├── .gitignore ├── Makefile └── baedit.go ├── docs ├── _config.yml ├── tux-wii.png ├── wii-linux-ngx-logo.png ├── gumboot.html └── index.md ├── dt_node_info ├── CHANGELOG.md ├── gumboot.lst ├── dt_stat └── README.md /baedit/.gitignore: -------------------------------------------------------------------------------- 1 | baedit 2 | baedit-ppc 3 | -------------------------------------------------------------------------------- /docs/_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-hacker 2 | -------------------------------------------------------------------------------- /docs/tux-wii.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neagix/wii-linux-ngx/HEAD/docs/tux-wii.png -------------------------------------------------------------------------------- /docs/wii-linux-ngx-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neagix/wii-linux-ngx/HEAD/docs/wii-linux-ngx-logo.png -------------------------------------------------------------------------------- /docs/gumboot.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Redirecting to Gumboot home page 4 | 5 | 6 | -------------------------------------------------------------------------------- /baedit/Makefile: -------------------------------------------------------------------------------- 1 | all: baedit baedit-ppc 2 | 3 | baedit: baedit.go 4 | CGO_ENABLED=0 GOOS=linux go build -a -ldflags '-s -w -extldflags "-static"' . 5 | 6 | baedit-ppc: baedit.go 7 | powerpc-linux-gnu-gccgo -obaedit-ppc -static baedit.go 8 | 9 | clean: 10 | rm -f baedit baedit-ppc 11 | 12 | .PHONY: all clear 13 | -------------------------------------------------------------------------------- /dt_node_info: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ $# -eq 0 ]; then 4 | echo "Usage: dt_node_info pattern" 1>&2 5 | exit 1 6 | fi 7 | 8 | 9 | echo ===== devices 10 | dt_stat --d | grep "$1" 11 | echo 12 | 13 | echo ===== nodes 14 | dt_stat --n | grep "$1" 15 | echo 16 | 17 | echo ===== nodes bound to a driver 18 | dt_stat --nb | grep "$1" 19 | echo 20 | 21 | echo ===== nodes with a device 22 | dt_stat --nd | grep "$1" 23 | echo 24 | 25 | echo ===== nodes not bound to a driver 26 | dt_stat --nxb | grep "$1" 27 | echo 28 | 29 | echo ===== nodes without a device 30 | dt_stat --nxd | grep "$1" 31 | echo 32 | 33 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | v0.3.6 neagix 2 | * added Gumboot bootloader 3 | * switched first partition to FAT32 4 | 5 | v0.3.5 neagix 6 | * use LABEL= on root command line to allow booting from SD/USB 7 | * fixed login on tty (thanks to DeltaResero for reporting) 8 | 9 | v0.3.4 neagix 10 | * working RGBA mode (some console glitches) 11 | * added example PNG 12 | 13 | v0.3.3 neagix 14 | * fix tty1 display logo 15 | 16 | v0.3.2 neagix 17 | * kernel v3.15.10 18 | * fixed missing eth0 network configuration 19 | * added a framebuffer visualization tool (fbv) 20 | * installed fbset 21 | 22 | v0.3.1 neagix 23 | * added Farter's framebuffer patch 24 | * aesthetical fix to first boot initialization 25 | 26 | v0.3.0 neagix 27 | * fixed INIT error on ttyS0 28 | * kernel v3.14.19 29 | 30 | v0.2.0 neagix 31 | * first rootfs+bootmii+disk image+kernel release 32 | 33 | 34 | v0.1.0 neagix 35 | * initial kernel images released 36 | -------------------------------------------------------------------------------- /gumboot.lst: -------------------------------------------------------------------------------- 1 | ## 2 | ## This is the default gumboot.lst menu for gumboot. 3 | ## 4 | 5 | # Video mode, possible settings: 6 | # NTSC, PAL50, PAL60, PROGRESSIVE 7 | video PAL60 8 | 9 | ## not yet supported - work in progress 10 | #splashimage (sd0,0)/gumboot/mario.png 11 | 12 | # supported colors are the official GRUB legacy set available at: 13 | # http://www.gnu.org/software/grub/manual/legacy/grub.html#color 14 | # syntax: 15 | #color NORMAL HIGHLIGHT HELPTEXT HEADING 16 | 17 | ## colors can also be expressed in RGB format 18 | #color rgb(255,0,0)/rgb(0,255,0) green/black white/blue 19 | 20 | ## official/default Gumboot color set 21 | color light-blue/white white/blue white/light-blue green/white 22 | 23 | ## timeout 0 means show the menu and do not enable any countdown 24 | timeout 30 25 | 26 | ## Gumboot-specific option 27 | ## do not display the menu and boot directly 28 | ## timeout must be zero 29 | ## alias of 'hiddenmenu' 30 | #nomenu 31 | 32 | default 0 33 | 34 | title wii-linux-ngx kernel v3.4 35 | root (sd0,0)/gumboot 36 | kernel /zImage.ngx 37 | ## 'boot' is always implicit, but if specified must be the last line of a menu entry 38 | boot 39 | 40 | title wii-linux-ngx kernel v2.6 41 | root (sd0,0)/gumboot 42 | kernel /zImage26.ngx 43 | boot 44 | 45 | title Browse SD 46 | root (sd0,0) 47 | browse 48 | 49 | title Bootmii GUI 50 | root (sd0,0) 51 | kernel /bootmii/gui.elf 52 | boot 53 | 54 | title Reboot 55 | reboot 56 | 57 | title Poweroff 58 | # 'halt' can also be used 59 | poweroff 60 | -------------------------------------------------------------------------------- /baedit/baedit.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "bytes" 5 | "fmt" 6 | "io/ioutil" 7 | "os" 8 | ) 9 | 10 | var ( 11 | startMarker = []byte(`mark.start=1 `) 12 | endMarker = []byte(` mark.end=1`) 13 | ) 14 | 15 | func main() { 16 | if len(os.Args) != 3 && len(os.Args) != 2 { 17 | fmt.Fprintf(os.Stderr, "Usage: baedit zImage ['new kernel command line']\n") 18 | os.Exit(1) 19 | } 20 | zImage := os.Args[1] 21 | 22 | b, err := ioutil.ReadFile(zImage) 23 | if err != nil { 24 | panic(err) 25 | } 26 | 27 | fmt.Printf(">OK: %d bytes read\n", len(b)) 28 | 29 | start := bytes.Index(b, startMarker) 30 | if start == -1 { 31 | panic("cannot find start marker") 32 | } 33 | start += len(startMarker) 34 | availBytes := bytes.Index(b[start:], endMarker) 35 | if availBytes == -1 { 36 | panic("cannot find end marker") 37 | } 38 | 39 | bootArgs := string(b[start : start+availBytes]) 40 | fmt.Printf("current bootargs = '%s'\n", bootArgs) 41 | 42 | if len(os.Args) < 3 { 43 | return 44 | } 45 | 46 | newBootArgs := os.Args[2] 47 | l := len(newBootArgs) 48 | if l > availBytes { 49 | panic("new command line is too long") 50 | } 51 | 52 | // pad with spaces 53 | for i := 0; i < availBytes-l; i++ { 54 | newBootArgs += " " 55 | } 56 | fmt.Printf("replaced bootargs = '%s'\n", newBootArgs) 57 | 58 | for i := 0; i < availBytes; i++ { 59 | b[start+i] = newBootArgs[i] 60 | } 61 | 62 | err = ioutil.WriteFile(zImage, b, 0775) 63 | if err != nil { 64 | panic(err) 65 | } 66 | fmt.Printf(">OK: %d bytes written\n", len(b)) 67 | } 68 | -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | # wii-linux-ngx 2 | 3 | Tux + Wii 4 | 5 | Running modern Linux on Wii consoles. 6 | 7 | This project provides: 8 | * source code for a working Linux kernel for GC/Wii, in the form of git branches (stable Linux trees + necessary patches) 9 | * kernel single-binary releases in ELF format (zImage) 10 | * ready to use Debian Jessie images/rootfs 11 | * [Gumboot](https://neagix.github.io/gumboot/) 12 | * support for framebuffer RGBA mode 13 | 14 | See [README](https://github.com/neagix/wii-linux-ngx/blob/master/README.md) for a full description and instructions. 15 | 16 | # Releases 17 | 18 | * [https://github.com/neagix/wii-linux-ngx/releases](https://github.com/neagix/wii-linux-ngx/releases) 19 | 20 | # Issues 21 | 22 | Visit the issues tracker to see what needs help: 23 | * [https://github.com/neagix/wii-linux-ngx/issues](https://github.com/neagix/wii-linux-ngx/issues) 24 | 25 | Pull requests are welcome! 26 | 27 | # Frequently Asked Questions 28 | 29 |
30 |
Does the ethernet dongle work?
31 |
Yes
32 |
Does the Wi-Fi work?
33 |
Yes
34 |
Can I run Xorg on it?
35 |
Yes, with the framebuffer driver.
36 |
Does it work on GameCube?
37 |
It should. GameCube is supported but author cannot test on it.
38 |
Does SD/SDHC/USB work?
39 |
Yes
40 |
What type of multimedia/gaming applications can I use?
41 |
Anything that works on a framebuffer will do. But forget about video playback, 3D or high end games. There is no hardware acceleration support so far.
42 |
43 | 44 | # Thanks 45 | 46 | Thanks to the following people/organizations/groups: 47 | * the Linux Kernel developers 48 | * the GC-Linux team 49 | * DeltaResero 50 | * marcan 51 | -------------------------------------------------------------------------------- /dt_stat: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # author: Frank Rowand frank.rowand@sonymobile.com 3 | # license: GPL V2 4 | #_______________________________________________________________________________ 5 | 6 | script=`basename $0` 7 | help=0 8 | 9 | 10 | cmd_d=0 11 | cmd_n=0 12 | cmd_nb=0 13 | cmd_nd=0 14 | cmd_nxb=0 15 | cmd_nxd=0 16 | 17 | if [ $# -eq 0 ] ; then 18 | help=1 19 | fi 20 | 21 | while [ $# -gt 0 ]; do 22 | ARG=${1:1} 23 | 24 | case "$ARG" in 25 | h | -help) 26 | help=1 27 | break 28 | ;; 29 | "d") 30 | cmd_d=1 31 | shift 32 | ;; 33 | "n") 34 | cmd_n=1 35 | shift 36 | ;; 37 | "nb") 38 | cmd_nb=1 39 | shift 40 | ;; 41 | "nd") 42 | cmd_nd=1 43 | shift 44 | ;; 45 | "nxb") 46 | cmd_nxb=1 47 | shift 48 | ;; 49 | "nxd") 50 | cmd_nxd=1 51 | shift 52 | ;; 53 | *) 54 | echo "ERROR: invalid parameter" 1>&2 55 | exit 1 56 | ;; 57 | esac 58 | 59 | done 60 | 61 | 62 | #_______________________________________________________________________________ 63 | 64 | PDT="/proc/device-tree/" 65 | 66 | 67 | #_______________________________________________________________________________ 68 | 69 | if [ ${help} -eq 1 ] ; then 70 | cat<&2 71 | 72 | usage: 73 | dt_stat 74 | 75 | -h synonym for --help 76 | --help print this message and exit 77 | 78 | -d report devices 79 | -n report nodes 80 | -nb report nodes bound to a driver 81 | -nd report nodes with a device 82 | -nxb report nodes not bound to a driver 83 | -nxd report nodes without a device 84 | 85 | Reports about nodes in /proc/device-tree/ 86 | Nodes without a compatible string are not reported 87 | 88 | data fields reported: 89 | -d Device Node 90 | -n Node Compatible 91 | -nb Node Compatible 92 | -nd Node Compatible Device Driver 93 | -nxb Node Compatible 94 | -nxd Node Compatible 95 | EOF 96 | exit 1 97 | fi 98 | 99 | 100 | #_______________________________________________________________________________ 101 | if [ ! -d /sys/devices ] ; then 102 | echo "ERROR: /sys/devices is not a directory" >&2 103 | exit 1 104 | fi 105 | 106 | 107 | if [ ! -d "$PDT" ] ; then 108 | echo "ERROR: ${PDT} is not a directory" >&2 109 | exit 1 110 | fi 111 | 112 | # ============================================================================== 113 | # COLLECT DATA 114 | 115 | UEVENTS="$(find /sys/devices -name uevent)" 116 | 117 | #----- nodes of devices with an OF_FULLNAME in uevent 118 | #----- nodes with a device that has been bound to a driver 119 | NODES_DEV="" 120 | function get_nodes_dev() { 121 | for dev in $UEVENTS; do 122 | grep '^OF_FULLNAME=' "${dev}" | sed -e 's|OF_FULLNAME=||' 123 | done | sort 124 | } 125 | function nodes_dev() { 126 | if [ -z "$NODES_DEV" ]; then 127 | NODES_DEV="$(get_nodes_dev)" 128 | fi 129 | echo "$NODES_DEV" 130 | } 131 | 132 | NODES_DEV_BOUND="" 133 | function get_nodes_dev_bound() { 134 | for uevent in $UEVENTS; do 135 | grep '^OF_FULLNAME=' "${uevent}" | sed -e 's|OF_FULLNAME=||' 136 | done | sort 137 | } 138 | 139 | function nodes_dev_bound() { 140 | if [ -z "$NODES_DEV_BOUND" ]; then 141 | NODES_DEV_BOUND="$(get_nodes_dev_bound)" 142 | fi 143 | echo "$NODES_DEV_BOUND" 144 | } 145 | 146 | #----- nodes with a compatible property 147 | NODES_COMPAT="" 148 | function get_nodes_compat() { 149 | local D 150 | for node in `find "${PDT}" -name compatible -type f`; do 151 | D=$(dirname "${node}") 152 | echo "$D" | sed -e 's|\/proc\/device-tree||' 153 | done | sort 154 | } 155 | function nodes_compat() { 156 | if [ -z "$NODES_COMPAT" ]; then 157 | NODES_COMPAT="$(get_nodes_compat)" 158 | fi 159 | echo "$NODES_COMPAT" 160 | } 161 | 162 | TABS=' ' 163 | 164 | # ============================================================================== 165 | # REPORTS 166 | 167 | #----- devices with an OF_FULLNAME in uevent 168 | 169 | if [ ${cmd_d} -eq 1 ] ; then 170 | for dev in $UEVENTS; do 171 | if grep -q '^OF_FULLNAME' "${dev}" ; then 172 | node=$(grep '^OF_FULLNAME' "${dev}" | sed -e 's|OF_FULLNAME=||') 173 | echo $(dirname "${dev}") $TABS "${node}" 174 | fi 175 | done | sort 176 | fi 177 | 178 | #----- nodes with a compatible property 179 | 180 | if [ ${cmd_n} -eq 1 ] ; then 181 | for node in $(nodes_compat) ; do 182 | if [ -f "${PDT}/${node}/compatible" ]; then 183 | echo "$node" $TABS $(< "${PDT}/${node}/compatible") 184 | fi 185 | done 186 | fi 187 | 188 | 189 | #----- nodes with device bound to driver 190 | if [ ${cmd_nb} -eq 1 ] ; then 191 | for node in $(nodes_dev_bound) ; do 192 | if [ -f "$PDT/${node}/compatible" ]; then 193 | echo "${node}" $TABS $(< "$PDT/${node}/compatible") 194 | fi 195 | done 196 | fi 197 | 198 | 199 | #----- nodes with a device 200 | 201 | if [ ${cmd_nd} -eq 1 ] ; then 202 | for uevent in $UEVENTS; do 203 | if [ -f "$uevent" ]; then 204 | node=$(grep '^OF_FULLNAME=' "${uevent}" | sed -e 's|OF_FULLNAME=||') 205 | if [[ "${node}" != "" ]] ; then 206 | dev=$(dirname "${uevent}") 207 | # driver might be empty 208 | driver=$(grep '^DRIVER=' "${uevent}" | sed -e 's|DRIVER=||') 209 | echo "$node" $TABS $(< "${PDT}/${node}/compatible") $TABS "$dev" $TABS "$driver" 210 | fi 211 | fi 212 | done | sort 213 | fi 214 | 215 | 216 | #----- nodes not bound to a driver 217 | 218 | if [ ${cmd_nxb} -eq 1 ] ; then 219 | for node in $(nodes_compat); do 220 | if ! echo $(nodes_dev_bound) | grep -E -q "(^|)${node}( |\$)"; then 221 | echo "${node}" $TABS $(< "${PDT}/${node}/compatible") 222 | fi 223 | done 224 | fi 225 | 226 | 227 | #----- nodes without a device 228 | 229 | if [ ${cmd_nxd} -eq 1 ] ; then 230 | for node in $(nodes_compat); do 231 | if ! echo $(nodes_dev) | grep -E -q "(^|)${node}( |\$)"; then 232 | echo "${node}" $TABS $(< "${PDT}/${node}/compatible") 233 | fi 234 | done 235 | fi 236 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Modern Linux for Wii/GameCube 2 | 3 | Tux + Wii 4 | 5 | The [wii-linux-ngx repository](https://github.com/neagix/wii-linux-ngx) contains Linux kernel branches with rebased patches for the purpose of running a modern Linux distribution on the Wii. 6 | 7 | Up-to-date documentation and scripts can always be found on the [master branch](https://github.com/neagix/wii-linux-ngx/tree/master). 8 | 9 | Feel free to open Issues/Pull requests for improvement/discussion purposes. 10 | 11 | See also [Frequently Asked Questions](https://github.com/neagix/wii-linux-ngx/blob/master/docs/index.md#frequently-asked-questions). 12 | 13 | ## How to install 14 | 15 | Download the compressed image from the releases, decompress it (`gunzip`) and then flash it to an SD card with your program of choice. 16 | 17 | ## How it works 18 | 19 | ### Wii 20 | 21 | wii-linux-ngx works with an SD card (or USB mass storage) with the following layout: 22 | * first partition, FAT32 with MINI and [Gumboot](https://neagix.github.io/wii-linux-ngx/gumboot) (Bootmii is provided as fallback) 23 | * second partition with ext3 Linux rootfs 24 | 25 | You can add other partitions of your choice; performance of SD cards is better than USB mass storage. 26 | 27 | You can use Priiloader to make Bootmii your default choice, effectively creating this chain: 28 | 29 | ``` 30 | Wii power on -> MINI -> (Gumboot selection with power/eject buttons ->) Linux kernel zImage 31 | ``` 32 | 33 | See also: 34 | * [Gumboot](https://neagix.github.io/wii-linux-ngx/gumboot) 35 | * [customized MINI](https://github.com/neagix/mini) 36 | 37 | ### GameCube 38 | 39 | Currently not tested on GameCube. 40 | 41 | ### vWii 42 | 43 | Currently not tested on virtual Wii. 44 | 45 | ## Default credentials 46 | 47 | The SD image and rootfs have `root:root` credentials. 48 | 49 | If you prefer to login via USB serial console, edit the last line of `/etc/inittab` in order to use `ttyUSB0` as a login terminal; you might need to recompile the kernel with your serial-over-USB driver as only the PL2303 driver is included. 50 | 51 | ## History 52 | 53 | Chronological history of Linux for Wii/GameCube: 54 | 55 | * [gc-linux (v2.6-based) MIKEp5](http://www.gc-linux.org/wiki/MINI:KernelPreviewFive) - this is the original project and corresponds to the bulk work done to bring Linux to the Wii 56 | * [DeltaResero's fork (unofficial MIKEp7)](https://github.com/DeltaResero/GC-Wii-Linux-Kernels) - considerable work done by DeltaResero to bring up the GC/Wii patches into a v3.x kernel 57 | * [this project, wii-linux-ngx](https://github.com/neagix/wii-linux-ngx) - continuation of the previous work, distribution packaging and maintenance 58 | 59 | The original (2.6.32 and prior) gcLinux work can be found at: http://sourceforge.net/projects/gc-linux/; at the time of writing project has not seen activity since 2013. 60 | 61 | ## Status 62 | 63 | A few branches are currently maintained: 64 | * [stable-v3.x](https://github.com/neagix/linux/tree/stable-v3.x), latest working v3.x kernel with most up to date upstream patches 65 | * [experimental-v3.x](https://github.com/neagix/linux/tree/experimental-v3.x), some features might be broken (SDHC) 66 | * [experimental-v4.x](https://github.com/neagix/linux/tree/experimental-v4.x), some features might be broken (SDHC) 67 | * [rebased-deltares-v3.x](https://github.com/neagix/linux/tree/rebased-deltares-v3.x), original v3.12.11 by DeltaResero rebased for easier merges + v3.12.12 merge 68 | * [stable-v3.x-w-extras](https://github.com/neagix/linux/tree/stable-v3.x-w-extras), features added by DeltaRes but not in stable-v3.x can be found in this branch. 69 | 70 | Some of the dropped features (easy to re-add through cherry-pick) are: 71 | * Nold360's GameCube SDHC support (http://www.gc-forever.com/forums/portal.php) 72 | - (https://github.com/Nold360/GC-Linux-Kernel-2.6.32/commits/master) 73 | 74 | ## Framebuffer support 75 | 76 | Current version has framebuffer support with Farter's Deferred I/O Framebuffer patch (http://fartersoft.com/) and neagix (author)'s support for RGBA. 77 | 78 | To change mode to 32bit: 79 | ``` 80 | fbset -xres 576 -yres 432 -vxres 576 -vyres 432 -depth 32 81 | ``` 82 | 83 | Change the last parameter to go back to 16bit. 84 | 85 | To display an image: 86 | ``` 87 | $ fbv mario.png 88 | ``` 89 | 90 | Xorg using framebuffer works fine. 91 | 92 | ## Known issues 93 | 94 | Boot from MINI is well tested, but not boot from IOS. Xorg framebuffer driver is also not tested. 95 | 96 | Bugs probably introduced in the port of MIKEp5 from v2.6 to v3.x tree: 97 | * In IOS mode, external swap partitions don't mount correctly as of kernel version 2.6.39. As a workaround, use a local swapfile (This bug should be relatively easy to find using git bisect) 98 | * Both IOS and MINI modes seem to have a bug that prevents Linux from booting if a GameCube Controller is inserted in one of the ports while the serial port is enabled in the config. This bug is caused by a glitch that was created when forward porting from 2.6.32 to 2.6.33. It should be possible to find this bug using git bisect. 99 | * Both IOS and MINI also still suffer from the same hardware limitations that they did in 2.6.32.y. For example, wireless and disc support for Wii consoles is still limited to MINI mode. Also, DVDs can be mounted as they were in version 2.6.32.y, but due to hardware limitations, it's unable to write to any disc and is unable to read CDs and certain types of DVD's 100 | - Support for DVD-RW and DVD-DL disc seems to vary. Currently, -R and +R (both mini & full-size) DVDs are know to work on both GameCube and Wii consoles. 101 | All WiiU as well as some of the newer Wii disc drives, lack support for DVDs as they don't contain the same type of disc drive. 102 | In other words, support will vary on the age of the console, but most standard GameCube consoles should be able to read mini DVDs (full-sized DVDs are too big for unmodified Gamecube consoles, but they can be read). 103 | 104 | See [open issues](https://github.com/neagix/wii-linux-ngx/issues). 105 | 106 | ## Changing bootargs with baedit 107 | 108 | It is possible to change kernel command line arguments (also known as `bootargs` from the DTS file) with a hex editor, with (very careful) usage of `sed`, or with the provided `baedit` tool. 109 | 110 | To show current bootargs embedded in the kernel: 111 | ``` 112 | $ baedit zImage 113 | >OK: 3201336 bytes read 114 | current bootargs = 'root=/dev/mmcblk0p2 console=tty0 console=ttyUSB0,115200 force_keyboard_port=4 video=gcnfb:tv=auto loader=mini nobats rootwait 115 | ``` 116 | 117 | To change the arguments, just pass them as second parameter to `baedit`: 118 | ``` 119 | $ baedit zImage 'your new arguments here' 120 | >OK: 3201336 bytes read 121 | current bootargs = 'root=/dev/mmcblk0p2 console=tty0 console=ttyUSB0,115200 force_keyboard_port=4 video=gcnfb:tv=auto loader=mini nobats rootwait 122 | replaced bootargs = 'your new arguments here ' 123 | >OK: 3201336 bytes written 124 | ``` 125 | 126 | # Connecting via Ethernet dongle 127 | 128 | Connection will work automatically and it uses regular Debian configuration files. 129 | 130 | # Connecting to Wi-Fi 131 | 132 | The `whiite-ez-wifi-config` script is included in `/root` to easily connect to a Wi-Fi network. 133 | 134 | Supported modes (from http://en-americas-support.nintendo.com/app/answers/detail/a_id/498/~/compatible-wireless-modes-and-wireless-security-types): 135 | 136 | Wireless Frequency: 2.4 GHz Frequency 137 | Wireless Modes: 802.11b, 802.11g 138 | Wireless Security Modes: WEP, WPA-PSK (TKIP), WPA-PSK (AES), WPA2-PSK (AES) 139 | 140 | ## Network troubleshooting resources 141 | 142 | * http://www.gc-linux.org/wiki/WL:Wifi_Configuration 143 | * http://www.linux-tips-and-tricks.de/overview#english 144 | * http://www.linux-tips-and-tricks.de/downloads/collectnwdata-sh/download 145 | * http://forum.wiibrew.org/read.php?29,68339,68339 146 | 147 | # Swap 148 | 149 | It is suggested to create a swap partition and enable it to speed up operations, since the Wii has little memory available (~80M). 150 | 151 | # Installing packages 152 | 153 | The Jessie rootfs is stripped down so you will need to run `apt-get update` before being able to install any package. 154 | 155 | # Building the kernel 156 | 157 | Compiling this kernel will has some dependencies that must be installed. 158 | On a Debian-based system, these dependecies can be installed by running the following command: 159 | 160 | sudo apt-get install advancecomp autoconfig automake bash build-essential bzip2 ccache coreutils fakeroot file gcc g++ gzip libmpfr-dev libgmp-dev libnurses5-dev make strip 161 | 162 | Give a look to DeltaResero's script to see how to use ccache for kernel compilation 163 | ## (Cross) Compiling the Kernel 164 | 165 | Remember to edit the corresponding dts file (`arch/powerpc/boot/wii.dts` for the Wii when not using the default boot method from SD card (`/dev/mmcblk0p2`). 166 | Enabling zcache and other kernel options requres editing the default bootargs. 167 | You can alter the bootargs of an already compiled kernel by using the provided tool `baedit` (it's found in the rootfs image or you can run/build it with Go). 168 | 169 | Related pages: 170 | * http://www.gc-linux.org/wiki/Building_a_GameCube_Linux_Kernel_%28ARCH%3Dpowerpc%29 171 | 172 | ## ZRAM 173 | 174 | The zram-config v0.5 files are provided in `/root/zram-config`, there is no init integration though. 175 | 176 | You can verify whether zRam ha started by running the following command as root: 177 | 178 | swapon -s 179 | 180 | zRam swapping can be turned off with the following command: 181 | 182 | swapoff /dev/zram0 183 | 184 | Change the command accordingly to which device should be stopped. 185 | 186 | Related readings: 187 | * how to start zRam: http://forums.debian.net/viewtopic.php?t=77627 188 | * http://gionn.net/2012/03/11/zram-on-debian-ubuntu-for-memory-overcommitment/ 189 | 190 | ## Mounting a disc 191 | 192 | Create a "dvd" folder (as root) in the "/media" directory (only if the folder doesn't exist) with the command: 193 | 194 | mkdir /media/dvd 195 | 196 | Then run the following (also as root): 197 | 198 | mount /dev/rvl-di /media/dvd 199 | 200 | DVDs can be inserted/switched anytime but should be unmount prior to ejecting and then remount again after to prevent errors. To unmount a disc, enter the following command as root: 201 | 202 | umount /dev/rvl-di /media/dvd 203 | 204 | Additional packages such as libdvdcss & libdvdread may need to be installed for DVD playblack (may need to search package manager as naming standards aren't consistant). Mplayer and Xine seem to work the best but support will vary depending on the operating system. 205 | 206 | ## Related pages: 207 | * http://fartersoft.com/blog/2011/08/17/debian-installer-for-wii/ 208 | --------------------------------------------------------------------------------