<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="http://gezhi.org" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/">
<channel>
 <title>linux</title>
 <link>http://gezhi.org/keyword/28</link>
 <description>The taxonomy view with a depth of 0.</description>
 <language>zh-hans</language>
<item>
 <title>在IPOD Video 30G上安装Linux</title>
 <link>http://gezhi.org/node/194</link>
 <description>&lt;p&gt;&lt;em&gt;本文已经转移到了ipodlinux wiki的&lt;a href=&quot;http://ipodlinux.org/5g_Chinese_Tutorial&quot;&gt;5g Chinese Tutorial页面&lt;/a&gt;。你可以随意修改它。&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;昨天闲着没事，在我的IPOD Video（5g）上装上了Linux（可以和IPOD原来的系统共存），还是满好玩的。下面是how-to。&lt;/p&gt;
&lt;p&gt;注意，本文仅仅适用于5g 30G。如果你需要我告诉你怎么在其他model上装linux，你可以送我一个那种型号的ipod，我安装成功后告诉你。如果你用下面的方法把你的ipod搞爆炸了，请先打911然后联系apple，不要把医药费的帐单寄给我 :)&lt;/p&gt;
&lt;p&gt;&lt;!--break--&gt;&lt;/p&gt;
&lt;p&gt;先show几张图（感谢snoopy一家借我充电电池和充电器）&lt;/p&gt;
&lt;p&gt;&lt;img id=&quot;image127&quot; src=&quot;http://blog.huichen.org/wp-content/uploads/2006/05/IMG_1163.JPG&quot; alt=&quot;IMG_1163.JPG&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img id=&quot;image128&quot; src=&quot;http://blog.huichen.org/wp-content/uploads/2006/05/IMG_1167.JPG&quot; alt=&quot;IMG_1167.JPG&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img id=&quot;image129&quot; src=&quot;http://blog.huichen.org/wp-content/uploads/2006/05/IMG_1171.JPG&quot; alt=&quot;IMG_1171.JPG&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img id=&quot;image130&quot; src=&quot;http://blog.huichen.org/wp-content/uploads/2006/05/IMG_1180.JPG&quot; alt=&quot;IMG_1180.JPG&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img id=&quot;image131&quot; src=&quot;http://blog.huichen.org/wp-content/uploads/2006/05/IMG_1181.JPG&quot; alt=&quot;IMG_1181.JPG&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img id=&quot;image132&quot; src=&quot;http://blog.huichen.org/wp-content/uploads/2006/05/IMG_1174.JPG&quot; alt=&quot;IMG_1174.JPG&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img id=&quot;image133&quot; src=&quot;http://blog.huichen.org/wp-content/uploads/2006/05/IMG_1176.JPG&quot; alt=&quot;IMG_1176.JPG&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img id=&quot;image134&quot; src=&quot;http://blog.huichen.org/wp-content/uploads/2006/05/IMG_1178.JPG&quot; alt=&quot;IMG_1178.JPG&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img id=&quot;image135&quot; src=&quot;http://blog.huichen.org/wp-content/uploads/2006/05/IMG_1179.JPG&quot; alt=&quot;IMG_1179.JPG&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;原理&lt;/h2&gt;
&lt;p&gt;ipodlinux.org网站和其他地方有一些现成的installer等东西进行傻瓜安装，但我不推荐，因为：&lt;/p&gt;
&lt;ul&gt;1. 那些方法不一定适用于30G video，我试过几个installer就没有成功。&lt;/p&gt;
&lt;p&gt;2. 下文的方法还是比较傻瓜的，更重要的是你会一步步知道具体对你的ipod都做了什么，这比较符合DIY的精神。DIY=Destroy It Yourself。&lt;/ul&gt;
&lt;p&gt;我使用的是30G的IPOD Video，第一次使用前默认在windows下格式化过，ipod设置为disk mode。本文的安装平台是Ubuntu 5.10。在运行下面的步骤时可能需要你有系统的root权限。如果你在Windows下用ipod，那么你的ipod的默认硬盘分区是这样的：&lt;/p&gt;
&lt;pre&gt;
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
&lt;/pre&gt;&lt;p&gt;
30G的硬盘共3648个cylinder，分为两个分区：&lt;/p&gt;
&lt;ul&gt;
1. 前10个cylinder是第一个分区，被用来存放引导信息和Apple的IPOD操作系统，在Windows下不可见。&lt;/p&gt;
&lt;p&gt;2. 后面的是第二个分区，也就是你在Window下看到的那个移动硬盘（ipod要设置在disk mode），是FAT32格式，如果你用的是Mac机器则是另一种格式。
&lt;/ul&gt;
&lt;p&gt;我们要做的是：&lt;/p&gt;
&lt;ul&gt;
1. 将第二个分区的大小缩小并在后面开辟一个ext2格式的新分区作为Linux分区。具体过程大致是先把它delete掉（注意删除第二个分区前请将其中所有文件复制到其他地方，等格式完毕再复制回来，注意windows下必须display hidden files才能看到其中隐藏的文件夹），然后重新开辟第二个分区和第三个分区。&lt;/p&gt;
&lt;p&gt;2. 重写第一个分区，在Apple的OS引导代码之前加入Linux的loader（类似于lilo或者grub）。&lt;/p&gt;
&lt;p&gt;3. 最后在我们的第三个分区上建立linux操作系统。
&lt;/ul&gt;
&lt;h2&gt;调整分区&lt;/h2&gt;
&lt;p&gt;当ipod插在usb上时ubuntu会自动mount第二个分区到/media/ipod。把它umount掉。注意你的ipod硬盘的设备名称是：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;第一分区 /dev/sdX1&lt;br /&gt;
第二分区 /dev/sdX2&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;X=a或者b,c...等。X后面号码可能不一样。下文同。&lt;/p&gt;
&lt;p&gt;首先备份你的第一分区中的数据：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;dd if=/dev/sdX1 of=ipod_boot_sector_backup bs=512 count=1&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;如果想恢复，使用下面命令：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;dd if=ipod_boot_sector_backup of=/dev/sd&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;然后进入fdisk工具：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;/sbin/fdisk /dev/sdX&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;p是查看分区列表，d是删除分区，n是建立分区（会寻问你新建的分区从哪里开始到哪里结束，我的第二分区是从第11个cylinder到第3000个cylinder，11是必须的，因为11=10+1 :) 而3000可以根据你需要的第三分区大小调整），t是设置分区类型（b是FAT32，你不用设置第三分区类型，默认就是ext2），用a命令将第二分区设置为bootable。最后用w命令将这些设置写入分区表。（&lt;strong&gt;注意&lt;/strong&gt;我们没有动第一分区）&lt;/p&gt;
&lt;p&gt;然后，&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;mkdosfs -F 32 /dev/sdX2&lt;br /&gt;
mke2fs /dev/sdX3&lt;br /&gt;
格式化分区&lt;/p&gt;
&lt;p&gt;tune2fs -c 0 /dev/sdX3&lt;br /&gt;
将第三分区的自检次数设置为无穷，否则每启动一定次数（我记得是30次），就会自检一次。
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;最后将你以前备份的第二分区的数据拷贝到新的第二分区中。我得到的分区表是这样的：&lt;/p&gt;
&lt;pre&gt;
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
&lt;/pre&gt;&lt;p&gt;
断开usb联接，ipod应该还是可以自己启动（按住中间的按钮和menu不放就可以重启）到apple的os里面，因为我们还没有修改第一分区的启动信息。你的音乐，视频，图片和播放列表还在那里，但菜单的设置可能恢复到默认了，关系不大。&lt;/p&gt;
&lt;h2&gt;在第一分区中添加Loader 2&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;http://ipodlinux.org/images/3/31/Loader-2.3.zip&quot;&gt;下载Loader2&lt;/a&gt;，展开后得到loader.bin。另外，你需要&lt;a href=&quot;http://ipodlinux.org/Make_fw&quot;&gt;make_fw&lt;/a&gt;程序，在&lt;a href=&quot;http://ipodlinux.org/images/6/66/Make_fw-linux-i386.tgz&quot;&gt;这里&lt;/a&gt;下载预编译的for x86的二进制代码。然后，执行下面的代码：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;dd if=/dev/sdX1 of=orig_firmware.bin&lt;br /&gt;
从第一分区中得到apple的原始firmware。&lt;/p&gt;
&lt;p&gt;./make_fw -o apple_os.bin -e 0 orig_firmware.bin&lt;br /&gt;
./make_fw -o apple_sw_5g_rcsc.bin -e 1 orig_firmware.bin&lt;br /&gt;
将apple的os从firmware中提取出来。&lt;/p&gt;
&lt;p&gt;./make_fw -g 5g -v -o my_sw.bin -i apple_os.bin loader.bin&lt;br /&gt;
把loader.bin加在apple os前面生成一个新的引导程序。&lt;/p&gt;
&lt;p&gt;dd if=my_sw.bin of=/dev/sdX1&lt;br /&gt;
将新的引导程序写入第一分区。&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2&gt;安装Linux的基本系统&lt;/h2&gt;
&lt;p&gt;&lt;img id=&quot;image127&quot; src=&quot;http://blog.huichen.org/wp-content/uploads/2006/05/IMG_1163.JPG&quot; alt=&quot;IMG_1163.JPG&quot; /&gt;&lt;/p&gt;
&lt;p&gt;重启ipod后你可以看到上图的菜单（不过还没有iPodLinux那个选项），选择disk mode。mount第三分区到某个目录，比如/media/ipod-1。如果你用ubuntu，进入disk mode后会自动mount。&lt;/p&gt;
&lt;p&gt;到&lt;a href=&quot;http://ipodlinux.org/builds/&quot;&gt;这个网页&lt;/a&gt;下载kernel的nightly builds，比如我用的2006-05-17-kernel.bin.gz，解压缩后更名为kernel.bin，放在/media/ipod-1/下面。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://so2.sys-techs.com/ipod/ipod_fs_240206.tar.gz&quot;&gt;下载userland&lt;/a&gt;到/media/ipod-1，tar -xvf 解压，会生成bin, etc, var等目录。如果某些文件的timestamp有问题，touch一下即可。&lt;/p&gt;
&lt;p&gt;你的Linux基本系统就安装好了，umount掉重启就可以在loader中看到iPodLinux选项，进去就可以看到下面的启动字符串：&lt;/p&gt;
&lt;p&gt;&lt;img id=&quot;image128&quot; src=&quot;http://blog.huichen.org/wp-content/uploads/2006/05/IMG_1167.JPG&quot; alt=&quot;IMG_1167.JPG&quot; /&gt;&lt;/p&gt;
&lt;p&gt;不过，为了得到pp的图形界面，你还需要安装podzilla 2 too :)&lt;/p&gt;
&lt;h2&gt;安装&lt;a href=&quot;http://ipodlinux.org/Podzilla&quot;&gt;podzilla2&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;建议你从&lt;a href=&quot;http://www.josh.sys-techs.com/svnbuilds/&quot;&gt;nightly builds&lt;/a&gt;下载最新版本。比如我下载的是：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
appearance-1223.tar.gz&lt;br /&gt;
podzilla2-1223.gz&lt;br /&gt;
pzmodules-1223.tar.gz&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;解压缩这三个文件：&lt;/p&gt;
&lt;ul&gt;1. podzilla2-NNN.gz 文件解压后改名为podzilla，设置可执行属性，放在 /media/ipod-1/bin/目录下。&lt;/p&gt;
&lt;p&gt;2. pzmodules-NNN.tar.gz 解压后生成一堆文件夹，放在 /media/ipod-1/usr/lib/ 目录下，我把那个MPDc子文件夹给删除了，因为在我的机器上无法正确加载。&lt;/p&gt;
&lt;p&gt;3. appearance-NNN.tar.gz 解压后生成两个文件夹，放在/media/ipod-1/usr/share/ 目录下。&lt;/ul&gt;
&lt;p&gt;make sure你的/media/ipod-1/etc/rc文件最后一行是podzilla。&lt;/p&gt;
&lt;p&gt;还没有爆炸？good！umount，重启你的机器，应该可以正常进入podzilla看到我抓的那些图片了。&lt;/p&gt;
&lt;h2&gt;一点点进阶的东东&lt;/h2&gt;
&lt;p&gt;装好基本系统和podzilla，你可以玩你的ipodlinux了（或者说它玩你）。&lt;/p&gt;
&lt;p&gt;下面教你怎么给你的ipod写hello world的c程序。你需要&lt;a href=&quot;http://www.so2.sys-techs.com/ipod/toolchain/linux-x86/arm-uclinux-elf-tools-base-gcc3.4.3-20050722.sh&quot;&gt;下载toolchain&lt;/a&gt;，这是一个后缀为.sh的脚本。su到root帐号后运行这个程序，会在你的本地PC上的/usr/local目录下生成arm-uclinux-tools2目录，你需要的编译器，库文件，头文件等等都在里面了。&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;设置PATH（比如放在.bashrc中）：&lt;br /&gt;
export PATH=/usr/local/arm-uclinux-tools2/bin:$PATH &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;下面是测试的hello.c代码：&lt;/p&gt;
&lt;pre&gt;
#include &amp;lt;stdio.h&amp;gt;
int main(int argc, char **argv)
{
   printf( &quot;Hello World!&quot; );
   return 0;
}
&lt;/pre&gt;&lt;p&gt;
用下面的命令编译链接：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;arm-elf-gcc hello.c -o helloworld -elf2flt&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;将生成的helloworld复制到你的ipod即可。&lt;/p&gt;
&lt;p&gt;我不打算继续hack下去了，因为：&lt;/p&gt;
&lt;ul&gt;1. Ipod 5g本身的硬件不怎么吸引人，CPU主频太低，无法上网，而且那个滚轮的input实在太不好用了。这个东东基本上只是用来给&lt;a href=&quot;http://blog.huichen.org/archives/21&quot;&gt;懒人听音乐&lt;/a&gt;的，从这一点看apple已经做的很好了。&lt;/p&gt;
&lt;p&gt;2. 过一段时间会有一个更好玩的东东寄到家里，那是真的为3D图形处理设计的，而且有无线网络和红外驱动，在上面hack linux，装上OpenGL,SDL什么的肯定要爽很多。&lt;/ul&gt;
&lt;p&gt;关于iPodLinux的所有信息都可以从下面的网站找到，尽管这个网站的内容组织的不太好。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://ipodlinux.org&quot;&gt;http://ipodlinux.org&lt;/a&gt;&lt;/p&gt;
</description>
 <comments>http://gezhi.org/node/194#comments</comments>
 <category domain="http://gezhi.org/technology">工程技术</category>
 <category domain="http://gezhi.org/keyword/28">linux</category>
 <pubDate>Wed, 17 May 2006 23:25:56 -0700</pubDate>
 <dc:creator>Hui</dc:creator>
 <guid isPermaLink="false">194 at http://gezhi.org</guid>
</item>
</channel>
</rss>
