2014年04月12日

RPi - Raspberry Pi で作る簡単・美味しい? Macintosh アップル・パイの作り方

少し前の話になりますが Old コンピューター好きの John さんが作り大きな話題となった手のひらサイズの Mini Old Mac。 しかも、ボードには Raspberry Pi を使っているらしい。 これを聞いて Old コンピューターと Raspberry Pi が大好きな僕のココロにはその仕組みを知りたいという知的欲求が芽生え、成長し続けていたのです。 残念ながらハードウェアを自作するウデが無いので筐体は作れませんが、今日は Apple Pi のソフトウェア的レシピを考え・ご紹介しようかと思います。

mini macintosh

簡単おいしい Apple Pi の材料


今日作るのはこちらの Apple Pi (筐体除く)。

3分の1サイズの初代Macintoshをラズベリーパイで再現した「Mini Mac」 - GIGAZINE

早速材料をご紹介しましょう。
  
材料(1人前) 数量 説明
Raspberry Pi (SDカード含む) 1セット 今回は Type B を利用。
入出力用デバイス 1セット Pi で認識するディスプレイ、キーボード、マウスなど
Ubuntu 1つ 作業用PC。 今回は DisplayLink チップ内蔵ディスプレイへ対応したカーネルのビルドにも利用。
Mini vMac 1つ vMac.ROM用仮想マシン。ダウンロード・ページから Windows, Mac OS X, Linux, Linux ARM(Raspberry  Pi)用のバイナリを入手可能。
vMac.ROM 1つ ハードウェアに組み込まれた ROM イメージ。 CopyRoms(http://minivmac.sourceforge.net/extras/copyroms.html)を使い事前に動作する Macintosh から吸い出しておく。
System_7.0.1.smi.bin 1つ インストールする Macintosh System ソフトウェア。 Apple Web サイト(Older Software Downloads)から入手可能。
Mac OS X Mavericks 1つ System_7.0.1.smi.bin からインストールを行う FD イメージを取り出す為に利用。

最も入手が難しいのが vMac.ROM。 古い時代の Macintosh では OS 及びその上で動作するアプリケーションから利用する為のプログラム(API)がロジックボード(ハードウェア)上の ROM チップに書き込まれているのですが、これはライセンス上自由に再配布・利用することは当然できません。

よって、今現在動作する実機から CopyRoms とよばれるモトローラ 68000系 CPU を搭載したモデルに幅広く対応した ROM イメージ作成ツールを使って吸い出す必要があります(フロッピーディスクで Mac へコピー、実行すればおしまい)。 
※実は vMac.ROM ファイルを配布しているサイトも探せばあるのですがここでの紹介は控えます。

System_7.0.1.smi.bin からは System 7 インストール FD(フロッピーディスク)のイメージを取り出します。


Apple の下拵え(したごしらえ)


まずは Apple 公式サイト Older Software Downloads から System_7.0.1.smi.bin を入手し、System 7 インストール・イメージを取り出しましょう。

このファイルを Mac OS X 上(ここでは Mavericks を利用)でダブル・クリックすると System_7.0.1.smi が作られます。

smi


この smi ( self mounting image )と呼ばれるファイルは最新の OS X で直接開くことは出来ません。 ディスク・ユーティリティを使い dmg 形式に変換しましょう。

mac os disk utility - convert smi file


この dmg ファイルを起動すると使用許諾が表示されるので内容を確認(複数のコンピュータで同時にソフトウェアを利用することは許されていないので注意)。

apple application licence agreetment

同意したら中に含まれる6つの FD イメージ(インストール・ディスク)を何処かにコピーしておきましょう。

images


続いて CopyRoms を Macintosh 上で実行し、 ROM ファイル(vMac.ROM)を吸い出しておきます。

最後に dd コマンドを使ってインストール先になるハードディスクのイメージ(ここでは空の 20 MBディスク)を作って準備はおしまい。

# 512 byte x 40960 count = 20 MB
ubuntu(or mac) $ dd if=/dev/zero of=20mb.dsk count=40960 bs=512


Pi の下拵え(したごしらえ)


出来るだけ小さなディスプレイを使うと Apple Pi の美味しさが引き立ちます。 僕はセンチュリー LCD-8000U を使い USB ポートにディスプレイを接続するつもりなんですが、これを Pi で動かすには DisplayLink 社のチップセットをサポートしたカーネルをビルドする必要があります。 そこで Ubuntu を使い Pi カーネルとモジュールをクロス・コンパイルます(Pi でビルドするのは時間が掛かるので)。

この作業は HDMI 経由の標準的なディスプレイ、Raspberry Pi 用のTFTディスプレイを使う場合には必要ありませんよ。

まずはビルドに必要なパッケージをインストール。

ubuntu ~ $ sudo apt-get install git-core gcc-arm-linux-gnueabi ncurses-dev

カーネルのソースコードをダウンロードしましょう。

ubuntu ~ $ git clone git://github.com/raspberrypi/linux.git

ディレクトリに移動してビルド・メニューを立ち上げます。

$ cd linux
ubuntu ~/linux$ cp arch/arm/configs/bcmrpi_cutdown_defconfig .config
ubuntu ~/linux$ make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- menuconfig

メニューを Device Drivers -> Graphics support -> Support for frame buffer devices と進み、 Displaylink USB Framerbuffer support (NEW) をスペースで有効(M)にし、Save します。

kernel_config

さあ、カーネルをビルドしましょう。

ubuntu ~/linux$ make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- -k -j2

終わったらモジュールもビルドします。

ubuntu ~/linux$ mkdir modules
ubuntu ~/linux$ make modules_install ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- INSTALL_MOD_PATH=./modules/
  INSTALL crypto/arc4.ko
  INSTALL crypto/authenc.ko
  ...
  INSTALL modules//lib/firmware/keyspan_pda/keyspan_pda.fw
  INSTALL modules//lib/firmware/keyspan_pda/xircom_pgs.fw
  DEPMOD  3.10.36+

これで 3.10.36+ カーネルとモジュールが出来ました。 次のコマンドでカーネルとモジュールを1つにまとめておきましょう。

ubuntu ~/linux$ mkdir DispLinkPiKernel
# kernel
ubuntu ~/linux$ cp arch/arm/boot/zImage DispLinkPiKernel/
# modules
ubuntu ~/linux$ cp -pr ./modules/lib/modules DispLinkPiKernel/
ubuntu ~/linux$ tar -cvf DispLinkPiKernel.tar DispLinkPiKernel

さあ、こちらを参考にカーネルとモジュールをトッピングする Pi 生地を作って下さい(これから行う作業は全て SSH、SFTP を使いコマンド・ベースで行います)。 普通のプレーン生地で大丈夫ですよ。

RPi - Raspberry Pi ファースト・インプレッション + 押さえておきたい初期設定

Pi 生地が出来たら DispLinkPiKernel.tar を Pi に SFTP 等でコピー、次の手順でトッピング(インストール)します。

pi@raspberrypi ~ $ sudo tar xvf DispLinkPiKernel.tar
# backup current kerel.
pi@raspberrypi ~ $ sudo cp /boot/kernel.img /boot/kernel_org.img
# install new kernel & modules.
pi@raspberrypi ~ $ sudo cp DispLinkPiKernel/zImage /boot/kernel.img
pi@raspberrypi ~ $ sudo cp -pr DispLinkPiKernel/modules/3.10.36+ /lib/modules/
# restart pi.
pi@raspberrypi ~ $ sudo reboot

pi が起動したらエディタで /etc/X11/xorg.conf を編集し、フレーム・バッファー(fb)用のディスプレイ設定を作ります。

pi@raspberrypi ~ $ sudo vi /etc/X11/xorg.conf

中身はこう。

Section "Device" 
  Identifier "uga" 
  driver "fbdev" 
  Option "fbdev" "/dev/fb1" 
  Option "ShadowFB" "off"
EndSection 

Section "Monitor" 
  Identifier "monitor" 
EndSection 

Section "Screen" 
  Identifier "screen" 
  Device "uga" 
  Monitor "monitor" 
EndSection 

Section "ServerLayout" 
  Identifier "default" 
  Screen 0 "screen" 0 0 
EndSection

これで startx と入力するとお馴染みのデスクトップ環境が USB ディスプレイに表示されるはずです。
(確認出来たらX環境は停止しておきます)


Apple Pi の調理


いよいよ Apple Pi を作りましょう。 最終的には Pi にのせますが調理は Ubuntu 上で行うのでここから Linux x86 及び ARM 用の Mini vMac をダウンロードします。

Download Mini vMac 3.3.3

Ubuntu 上に適当なフォルダを作り Mini vMac と vMac.ROM を置き、Mini vMac を実行。

mini vmac 01 - run vmac


Mini vMac が起動するので System_7.0.1.smi.bin から取り出した Install 1.image をドラッグ・アンド・ドロップするとインストーラーが立ち上がります。

mini vmac 03 - welcom mac installer

OKするとインストール先ディスクを聞かれるので、やはり用意しておいた 20mb.dsk をドロップして初期化して利用します。

mini vmac 04 - initialize disk

指示に従いながら用意した全てのイメージ・ファイルを使うと5分程でインストールが終わり Restart を求められます。 再度 Mini vMac を起動して今度は 20mb.dsk をドロップすると無事 Macintosh が起動するはずです。

mini vmac 06 - run system 7


Apple Pi の盛り付け


Linux ARM 版 Mini vMac、vMac.ROM、20mb.dsk を Pi にコピー、同じ場所(ここでは pi ユーザのホームディレクトリにあるapplepiの下)に置いたら次のコマンドを実行してみましょう。

# start xserver.
pi@raspberrypi ~ $ /etc/X11/xinit/xserverrc

# run macintosh
pi@raspberrypi ~ $ cd ~/applepi
pi@raspberrypi ~/applepi $ ./Mini\ vMac -r vMac.ROM -display :0.0 20mb.dsk

お、無事起動しましたね!

Raspberry Pi and Mini vMac


最後に Pi の電源投入に合わせて Mini vMac も自動で起動するようひと工夫施します。

rc.local ファイルをエディタで開いて、

pi@raspberrypi ~ $ sudo vi /etc/rc.local

xserver と Mini vMac を開始するコードを記述します。

--- snip ---
# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi

# for Apple Pi
# run xserver
sudo -u pi /etc/X11/xinit/xserverrc > /dev/null 2>&1 &
# wait for xserver initialization
sleep 1
# run Mini vMac
cd /home/pi/applepi
sudo -u pi ./Mini\ vMac -r vMac.ROM -display :0.0 20mb.dsk &

exit 0


もうひと手間加えて、より美味しい Apple Pi を


Mini vMac はその性質上、ウインドウ・サイズが 512x342 (Macintosh の 512x342 画素)に固定されており、現在のディスプレイでフルスクリーン表示するには物足りない場合があります。 そんな場合に Mini vMac をカスタム・ビルドする方法をご紹介しましょう。

まずソースコードをダウンロードし、この中に含まれる minivmac-x.x.x.src.dsk を Mini vMac 上にディスクとしてロードします。

このディスクの中にある MnvM_bld というアプリケーションを起動すとエディタが開くので、ビルド・オプションを入力、File メニューから Go を選択します。

build vmac 04 - fullscreen build

するとオプションを反映したソースコードが Mini vMac と同じ場所にある out というフォルダの中に tar ファイルとして出力されます。

build vmac 03 - output binalry file


これを Pi に運び次の手順でビルド( make )します。

# install application to buid
pi@raspberrypi ~ $ sudo apt-get install libx11-dev
# make custom Mini vMac.
pi@raspberrypi ~ $ tar xf minivmac-3.3.3-larm.tar
pi@raspberrypi ~ $ cd minivmac-3.3.3-larm/
pi@raspberrypi ~/minivmac-3.3.3-larm $ make
pi@raspberrypi ~/minivmac-3.3.3-larm $ ls
COPYING.txt  Makefile  README.txt  bld  minivmac  src

ビルドして出来た minivmac を Mini vMac として使えばOK。

このカスタム・ビルドは Variations Service ページで依頼すればオンラインでも可能で、数日待てば Latest Custom Variations ページからビルド・ファイルをダウンロード出来るようになりますよ。

さあ、僕の作ったアップル・パイを召し上がれ。

Apple Pi

動画はこちら。



それでは、より良い RPi ライフを。


センチュリー 8インチHDMIマルチモニター PLUS ONE HDMI LCD-8000VH
センチュリー (2013-11-20)
売り上げランキング: 2,664

Posted by netbuffalo at 20:00│Comments(2)TrackBack(0)Raspberry Pi | Apple


この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/netbuffalo/4746381
この記事へのコメント
5
はじめまして!

こちらの説明を参考にしてClassicⅡのケースにRaspberry Pi model Bとセンチュリーの8インチHDMIモニタを入れてみました。

Mini vMacのソースコードをmakeするところを解説してくださったのが本当に役立ちました。

ソースコードに手を加えることでMac OS(漢字Talk7.1)の中からRaspberry Piにコマンドを送り結果を受け取ることもできるようになりました。

mpdで音楽を再生できるようなソフトをMac側で作り音楽プレイヤーとして使っています。

画質は悪いのですがYoutubeに動く様子を投稿してみたのでよろしければご覧下さい。
https://www.youtube.com/watch?v=zAmGjcSfaBs

本当にありがとうございました!!!
Posted by きんた at 2015年10月31日 10:57
きんたさん・・・Cooooool!
Posted by netbuffalo at 2015年10月31日 11:11

コメントする

名前
URL
 
  絵文字