x86 Boot Loader for iPod

| | コメント(0) | トラックバック(0)
ipodmbr.png

iPod と一緒に amazon.co.jp に注文した MacBook がいまだに届かないので、 この週末は iPod 用の x86 ブートローダを書いた。

前回のエントリで iPod を PC の USB-HDD ブートデバイスにするために MBR に lilo や grub をインストールすると iTunes で使えなくなってしまうと書いたが、それを回避するためのものである。

なんだかすごそうに聞こえるかもしれないが実際はそんなに大したものではなく、 iPod Updater による復元時に MBR に書かれる x86 コードをちょっと上書きしてみただけである。 iPod の MBR は この図 のようになっており、 黄色で示した x86 コードの部分なら書き換えてもたぶん問題ない。

うまい具合に iPod の MBR の次のセクタは使われていないみたいなので、 ここに本来の実行させたい MBR を格納しておき、 起動時にそれを 0x7c00 に読み込んでジャンプするという作戦でいくことにした。 実際のコード も BIOS ファンクションコールにブロックコピーをするだけのごく単純なものだ。

#define LOAD_ADDR 0x7c00
#define BUF0_ADDR 0x0600
#define BUF1_ADDR 0x0800
#define START_OFFSET 0x5a
#define TABLE_OFFSET 0x1be

.org BUF0_ADDR
        jmp entry_point
.org BUF0_ADDR+START_OFFSET
entry_point:
        cld
        xor ax,ax
        mov ss,ax
        mov sp,ax
        mov ds,ax
        mov es,ax
        mov si,#LOAD_ADDR
        mov di,#BUF0_ADDR
        mov cx,#0x100
        rep
        movsw
        jmp 0:next
next:
        mov ax,#0x0201
        mov bx,#BUF1_ADDR
        mov cx,#0x0002
        mov dx,#0x0080
        int 0x13

        mov si,#BUF1_ADDR
        mov di,#LOAD_ADDR
        mov cx,#TABLE_OFFSET/2
        rep
        movsw
        jmp 0:LOAD_ADDR
.org BUF0_ADDR+0x1fe
        dw 0xaa55

MBR の次のセクタに格納する本来の MBR は Neil TurtonMBR プログラムを使わせてもらった。 1 セクタサイズながらランタイムにブートするパーティションを選択できる非常に便利なブートローダである。

インストールは以下のようにする。 こういうバイナリファイル操作ではやはり dd コマンドが活躍する。 日本 dd ユーザ会会員のみならずすべてのバイナリアン必携のツールといえよう。

% gcc -E -xc ipodmbr.S86 | as86 -0 -b ipodmbr.bin -s /dev/null
% sudo dd if=/dev/sda count=1 > sda.bin
% dd conv=notrunc if=ipodmbr.bin of=sda.bin bs=1 skip=$((0x5a)) seek=$((0x5a)) count=$((0x180-0x5a))
% sudo dd if=sda.bin of=/dev/sda
% sudo install-mbr --force --offset=512 -p3 /dev/sda

これで iPod を購入した本来の目的をほぼ達成することができた。 たいていの PC で起動する フルスペックの Debian GNU/Linux に GNOME Desktop (VESA X サーバだけど) の環境を持ち歩けるので、 なかなか便利である。

カテゴリ

トラックバック(0)

このブログ記事を参照しているブログ一覧: x86 Boot Loader for iPod

このブログ記事に対するトラックバックURL: http://www.keshi.org/mt/mt-tb.cgi/42

コメントする

このブログ記事について

このページは、yaegashiが2006年6月19日 02:55に書いたブログ記事です。

ひとつ前のブログ記事は「Transcend JetFlash 150」です。

次のブログ記事は「MacBook 購入」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.0