Experimental Kernel

From wikiPodLinux

Table of contents

Overview

This page describes how to build an improved version of the iPodLinux kernel (see Kernel Building for the original, official version).

Features in 2.4.32-ipod2:

  • Works with SVN patches
  • Can be built with the 3.4.3 version of the toolchain
  • Uses the latest 2.4 kernel version (2.4.32 instead of 2.4.24)
  • Has been successfully built on Mac OS X systems (both PowerPC and Intel based) and Linux
  • Adds kernel support for the arguments passing from Loader 2
  • Reduced task switching latency for better interactivity while playing music (may cause an overall slowdown of processes, though)
  • Input Device: /dev/misc/wheel new in SVN
  • Completly quiet boot, quicker boot; needs cmdline option 'quiet'.


Options:

NOTE: As of 2.4.32-ipod2, if you are using the precompiled experimental kernel binary, you need to pass the root=/dev/hda3 to the cmdline like this:

iPodLinux @ (hd0,2)/boot/vmlinux root=/dev/hda3

If you want to speed up the time it takes to enter podzilla and don't care about seeing the kernel load, add quiet to the cmdline like this:

iPodLinux @ (hd0,2)/boot/vmlinux root=/dev/hda3 quiet

Kernel arguments can be read from /proc/cmdline. A list of valid kernel arguments can be found in Documentation/kernel-parameters.txt of the kernel source code. As a consequence of the boot parameters required by the experimental kernel, getLoader2Args will not work as intended as /proc/cmdline will read the entire kernel arguments (starting from “root=”). A workaround can be found here (http://ipodlinux.org/forums/viewtopic.php?p=242036#242036) or use the precompiled getLoader2AutoExec below.

Downloads

iPodLinux Kernel Builds Description
vmlinux2432.gz Default linux kernel 2.4.32-ipod2 built with lowlatency enabled.
vmlinux-2.4.32-iBoy-patches-n-loop-mount-enabled.gz Modified linux kernel 2.4.32-ipod2 built with all the below patches, iBoy audio buffer patches and loop-mount enabled.
Kernel Source Description
linux-2.4.32.tar.bz2 (http://www.kernel.org/pub/linux/kernel/v2.4/linux-2.4.32.tar.bz2) Linux kernel source, version 2.4.32 (Note: Avoid the .gz version - the uClinux patch might fail with it)
Patches Description
uClinux-2.4.32-uc0.diff.gz (http://www.uclinux.org/pub/uClinux/uClinux-2.4.x/uClinux-2.4.32-uc0.diff.gz) or download from faster mirror (http://ipod.tempel.org/files/uClinux-2.4.32-uc0.diff.gz) Kernel extensions for uClinux 2.4.32
iPL_2.4.32-ipod2_KERNELRELEASE_exceeding_64_characters_fix.patch (http://www.so2.sys-techs.com/ipod/linux/iPL_2.4.32-ipod2_KERNELRELEASE_exceeding_64_characters_fix.patch) Makefile fix for Mac OS X users
iPL_2.4.32-ipod2_arm-uclinux-elf.patch (http://www.so2.sys-techs.com/ipod/linux/iPL_2.4.32-ipod2_arm-uclinux-elf.patch) Build the kernel with gcc 3.4.3 (arm-uclinux-elf) instead gcc 2.9.x
iPL_2.4.32-ipod2_armksyms.c_cleanup.patch (http://www.so2.sys-techs.com/ipod/linux/iPL_2.4.32-ipod2_armksyms.c_cleanup.patch) Fix two #define declaration errors gcc 3.4.3 might trip over
iPL_2.4.32-ipod2_fbmem_cleanup.patch (http://www.so2.sys-techs.com/ipod/linux/iPL_2.4.32-ipod2_fbmem_cleanup.patch) Make gcc 3.4.3 happier with drivers/video/fbmem.c
iPL_2.4.32-ipod2_version_change.patch (http://www.so2.sys-techs.com/ipod/linux/iPL_2.4.32-ipod2_version_change.patch) Change kernel version to 2.4.32-ipod2
iPL_2.4.32-ipod2_hold_button_fix.patch (http://www.so2.sys-techs.com/ipod/linux/iPL_2.4.32-ipod2_hold_button_fix.patch) Fix issues with the hold button
iPL_2.4.32-ipod2_update_defconfig.patch (http://www.so2.sys-techs.com/ipod/linux/iPL_2.4.32-ipod2_update_defconfig.patch) Update the default kernel config
iPL_2.4.32-ipod2_loader2_cmdline_support.patch (http://www.so2.sys-techs.com/ipod/linux/iPL_2.4.32-ipod2_loader2_cmdline_support.patch) /proc/cmdline support for ipodloader2
iPL_2.4.32-ipod2_low-latency.patch (http://www.so2.sys-techs.com/ipod/linux/iPL_2.4.32-ipod2_low-latency.patch) An attempt to reduce cpu scheduling latency
iPL_2.4.32-ipod2_readlatency2.patch (http://www.so2.sys-techs.com/ipod/linux/iPL_2.4.32-ipod2_readlatency2.patch) An attepmpt to reduce disk read latency
iPL_2.4.32-ipod2_readlatency2_tuning.patch (http://www.so2.sys-techs.com/ipod/linux/iPL_2.4.32-ipod2_readlatency2_tuning.patch) Tune the readlatency patch
getLoader2AutoExec Description
getLoader2AutoExec.tar.gz Modified getLoader2Args to be used with the experimental kernel

Setup

Note for Mac OS X users: The following steps are made for a system with a case sensitive file system. While Linux has that by default, OS X systems using HFS do use a case-insensitive file system instead. Hence, before you follow these steps, you need to create a volume with a case-sensitive file system, or you will get errors once you use the patch commands below. Do this: Using Disk Utility, create a New Image (give it at least 320 MB). Once it has been created, use Disk Utility to Erase it again, choosing a Case sensitive Volume Format. Once this has been done, copy the downloaded files onto this new volume and perform the following steps on this volume.

Get the iPodLinux 2.4.24 kernel code from the SVN:

% svn co https://ipodlinux.svn.sourceforge.net/svnroot/ipodlinux/linux/2.4 linux

Decompress the kernel:

% tar xvjf linux-2.4.32.tar.bz2

Rename the kernel:

% mv linux-2.4.32 linux-2.4.32-ipod2

Switch to kernel directory:

% cd linux-2.4.32-ipod2

Update kernel from 2.4.32 to 2.4.32-uc0:

% gzcat ../uClinux-2.4.32-uc0.diff.gz | patch -p1

(note that with cygwin or some systems use zcat as the alternative command if gzcat does not work) ex. % zcat ../uClinux-2.4.32-uc0.diff.gz | patch -p1

Add support for the iPod:

% cp -r ../linux/* ./

Apply patches needed for 2.4.32-ipod2:

Mac users note: If you've downloaded the files with Safari, they might have gotten an extra .txt extension. Append that to the file names below if necessary.
% patch -p1 -s < ../iPL_2.4.32-ipod2_version_change.patch
% patch -p1 -s < ../iPL_2.4.32-ipod2_arm-uclinux-elf.patch
% patch -p1 -s < ../iPL_2.4.32-ipod2_armksyms.c_cleanup.patch
% patch -p1 -s < ../iPL_2.4.32-ipod2_KERNELRELEASE_exceeding_64_characters_fix.patch
% patch -p1 -s < ../iPL_2.4.32-ipod2_fbmem_cleanup.patch
% patch -p1 -s < ../iPL_2.4.32-ipod2_hold_button_fix.patch
% patch -p1 -s < ../iPL_2.4.32-ipod2_update_defconfig.patch

Apply optional patches:

% patch -p1 -s < ../iPL_2.4.32-ipod2_loader2_cmdline_support.patch
% patch -p1 -s < ../iPL_2.4.32-ipod2_low-latency.patch
% patch -p1 -s < ../iPL_2.4.32-ipod2_readlatency2.patch
% patch -p1 -s < ../iPL_2.4.32-ipod2_readlatency2_tuning.patch

Make the default iPodLinux config the working config:

% cp arch/armnommu/def-configs/ipod .config

Build

Do (A or B) and C


A) Update old config, say Yes to the low-latency option if you applied that patch, for everything else say No:

% make oldconfig

B) Configure your own kernel

% make menuconfig

C) Start building:

% make dep && make boot

When built, find the kernel under the name Image inside arch/armnommu/boot/. Rename it to kernel.bin and put it on your iPod (assuming you're using Loader 2 instead of the old method where you have to patch the kernel into the firmware partition)

Screenshot

Image:kernel2.4.32.png
A 3G iPod running kernel 2.4.32. The "01" in the upper left corner was left by the Screen Capture Module.

Navigation



  • Google Search (http://www.google.com/custom?sa=Google+Search&cof=S%3Ahttp%3A%2F%2Fwww.ipodlinux.org%3BVLC%3Apurple%3BAH%3Acenter%3BBGC%3Awhite%3BLH%3A141%3BLC%3Ablue%3BL%3Ahttp%3A%2F%2Fipodlinux.org%2Fstylesheets%2Fimages%2Fwiki.png%3BALC%3Ablue%3BLW%3A128%3BT%3Ablack%3BAWFID%3A70a74ab66f4d59ae%3B&domains=ipodlinux.org&sitesearch=ipodlinux.org)