5g Chinese Tutorial

From wikiPodLinux

Image:Stop_120px.pngThis page is deprecated, and is no longer a recommended method for installation.
For recent installation instructions please visit Manual Installation.


本文是关于在5g(30G和60G)上安装iPodLinux的中文教程。如果你有问题,请点击上方的discussion参加讨论(需要注册)。注意,这个教程不是核心开发组官方文档(英文)的一部分。

This article is a complete tutorial for installing iPodLinux on IPOD 5g (both 30G and 60G).

Table of contents

安装Linux基本系统

安装原理

本文假设你的IPOD在windows下格式化过,并设置为disk mode。安装平台是Ubuntu 5.10。在运行下面的步骤时可能需要你有系统的root权限。如果你在Windows下用ipod,那么你的ipod的默认硬盘分区是这样的(下面是30G的硬盘,60G的硬盘与此类似):

 Disk /dev/sda: 30.0 GB, 30005821440 bytes
 255 heads, 63 sectors/track, 3648 cylinders
 Units = cylinders of 16065 * 512 = 8225280 bytes
 
  Device     Boot Start     End     Blocks    Id  System
  /dev/sda1         1       10      80293+    0   Empty
  /dev/sda2         11      3648    29222235  b   W95 FAT32

30G的硬盘共3648个cylinder,分为两个分区:

  1. 前10个cylinder是第一个分区,被用来存放引导信息和Apple的IPOD操作系统,在Windows下不可见。
  2. 后面的是第二个分区,也就是你在Window下看到的那个移动硬盘(ipod要设置在disk mode),是FAT32格式,如果你用的是Mac机器则是另一种格式。

我们要做的是:

  1. 将第二个分区的大小缩小并在后面开辟一个ext2格式的新分区作为Linux分区。具体过程大致是先把它delete掉(注意删除第二个分区前请将其中所有文件复制到其他地方,等格式完毕再复制回来,注意windows下必须display hidden files才能看到其中隐藏的文件夹),然后重新开辟第二个分区和第三个分区。
  2. 重写第一个分区,在Apple的OS引导代码之前加入Linux的loader(类似于lilo或者grub)。
  3. 最后在我们的第三个分区上建立linux操作系统。

调整分区

当ipod插在usb上时ubuntu会自动mount第二个分区到/media/ipod。把它umount掉。注意你的ipod硬盘的设备名称是:

   第一分区 /dev/sdX1
   第二分区 /dev/sdX2

X=a或者b,c…等。X后面号码可能不一样。下文同。

首先备份你的第一分区中的数据:

   dd if=/dev/sdX1 of=ipod_boot_sector_backup bs=512 count=1

如果想恢复,使用下面命令:

   dd if=ipod_boot_sector_backup of=/dev/sd

然后进入fdisk工具:

   /sbin/fdisk /dev/sdX

p是查看分区列表,d是删除分区,n是建立分区(会寻问你新建的分区从哪里开始到哪里结束,我的第二分区是从第11个cylinder到第3000个cylinder,11是必须的,因为11=10+1 :) 而3000可以根据你需要的第三分区大小调整),t是设置分区类型(b是FAT32,你不用设置第三分区类型,默认就是ext2),用a命令将第二分区设置为bootable。最后用w命令将这些设置写入分区表。(注意我们没有动第一分区)。

然后,

   mkdosfs -F 32 /dev/sdX2
   mke2fs /dev/sdX3
   格式化分区
   tune2fs -c 0 /dev/sdX3
   将第三分区的自检次数设置为无穷,否则每启动一定次数(我记得是30次),就会自检一次。 

最后将你以前备份的第二分区的数据拷贝到新的第二分区中。我得到的分区表是这样的(下面是30G的硬盘,60G的硬盘与此类似):

 Disk /dev/sda: 30.0 GB, 30005821440 bytes
 255 heads, 63 sectors/track, 3648 cylinders
 Units = cylinders of 16065 * 512 = 8225280 bytes
 
  Device     Boot  Start  End    Blocks   Id  System
  /dev/sda1        1      10     80293+   0   Empty
  /dev/sda2   *    11     3000   24017175 b   W95 FAT32
  /dev/sda3        3001   3648   5205060  83  Linux

断开usb联接,ipod应该还是可以自己启动(按住中间的按钮和menu不放就可以重启)到apple的os里面,因为我们还没有修改第一分区的启动信息。你的音乐,视频,图片和播放列表还在那里,但菜单的设置可能恢复到默认了,关系不大。

在IPOD的引导分区添加Loader 2

下载Loader2,展开后得到loader.bin。另外,你需要make_fw程序,在这里下载预编译的for x86的二进制代码。然后,执行下面的代码:

   dd if=/dev/sdX1 of=orig_firmware.bin
   从第一分区中得到apple的原始firmware。
   ./make_fw -o apple_os.bin -e 0 orig_firmware.bin
   ./make_fw -o apple_sw_5g_rcsc.bin -e 1 orig_firmware.bin
   将apple的os从firmware中提取出来。
   ./make_fw -g 5g -v -o my_sw.bin -i apple_os.bin loader.bin
   把loader.bin加在apple os前面生成一个新的引导程序。
   dd if=my_sw.bin of=/dev/sdX1
   将新的引导程序写入第一分区。

在IPOD的Linux分区安装Kernel和userland

如下图,重启ipod后你可以看到菜单(不过还没有iPodLinux选项),选择disk mode。

Image:IMG 1163.JPG

mount第三分区到某个目录,比如/media/ipod-1。如果你用ubuntu,进入disk mode后会自动mount。

  1. 这个网页 (http://ipodlinux.org/builds/)下载kernel的nightly builds,比如我用的2006-05-17-kernel.bin.gz,解压缩后更名为kernel.bin,放在/media/ipod-1/下面。
  2. 下载userland (http://so2.sys-techs.com/ipod/ipod_fs_240206.tar.gz)到/media/ipod-1,tar -xvf 解压,会生成bin, etc, var等目录。如果某些文件的timestamp有问题,touch一下即可。

你的Linux基本系统就安装好了,umount掉重启就可以在loader中看到iPodLinux选项,进去就可以看到下图的载入kernel的进程条和启动字符串。不过,为了得到图形界面,你还需要安装podzilla2。

Image:IMG_1164.JPG Image:IMG 1167.JPG

安装podzilla2图形界面

建议你从nightly builds (http://www.josh.sys-techs.com/svnbuilds/)下载最新版本。比如我下载的是:

   appearance-1223.tar.gz
   podzilla2-1223.gz
   pzmodules-1223.tar.gz

解压缩这三个文件:

  1. podzilla2-NNN.gz 文件解压后改名为podzilla,设置可执行属性,放在 /media/ipod-1/bin/目录下。
  2. pzmodules-NNN.tar.gz 解压后生成一堆文件夹,放在 /media/ipod-1/usr/lib/目录下,我把那个MPDc子文件夹给删除了,因为在我的机器上无法正确加载。
  3. appearance-NNN.tar.gz 解压后生成两个文件夹,放在/media/ipod-1/usr/share/目录下。

确定你的/media/ipod-1/etc/rc文件最后一行是podzilla。

umount,重启你的机器,应该可以正常进入podzilla了。下图显示了podzilla2启动时的初始化进程条和运行时的Settings菜单:

Image:IMG_1171.JPG Image:IMG 1180.JPG

下面是podzilla2中的Cube和Matrix程序

Image:IMG_1174.JPG Image:IMG 1176.JPG

在本地PC上设置C语言编译环境

为了在本地PC上编译能够在IPOD上执行的二进制代码,我们需要在PC上设置C语言的编译环境。下载toolchain (http://www.so2.sys-techs.com/ipod/toolchain/linux-x86/arm-uclinux-elf-tools-base-gcc3.4.3-20050722.sh),这是一个后缀为.sh的脚本。su到root帐号后运行这个程序,会在你的本地PC上的/usr/local目录下生成arm-uclinux-tools2目录,需要的编译器,库文件,头文件等等都在里面了。

设置PATH(比如放在.bashrc中):

   export PATH=/usr/local/arm-uclinux-tools2/bin:$PATH 

下面是测试的hello.c代码:

 #include <stdio.h>
 int main(int argc, char **argv)
 {
    printf( "Hello World!" );
    return 0;
 }

用下面的命令编译链接:

   arm-elf-gcc hello.c -o helloworld -elf2flt

将生成的helloworld复制到你的ipod即可。

中文iPodLinux资源

  1. 【格志】本文原始版本的出处 (http://gezhi.org/209)
  2. iPod Linux 中文联盟 (http://ipodlnxcn.ee67.com/)
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)