Raspberry Pi

なぜかこのタイミングでのRaspberry Pi

やったことを一気にまとめていきまふ。

①下準備

AmazonRaspberry Pi Model B 注文
・USBキーボード手持ちないのでどうせならトラックパッド付きを注文
 (LogicoolのWireless Touch Keyboard K400r)
・SDカードはそのへんに転がってたのを準備
 (BUFFALO SDHC Class4 8GB)
・MicroUSBケーブルもそこらへんに転がってるので準備
・USB電源にはKindleの急速充電用のがあるのでそれを流用
HDMIケーブルはPSVitaTVに突き刺してるのをそのまま流用
 (PSVitaTVのお休み感は異常)

②OSインストール

http://www.raspberrypi.org/downloads/
 ここからとってくる。RASPBIAN。NOOBSとかあるらしいけど無視。

・RPi-sd card builder とかいうのがあるらしいのでそれをとってくる
 ・・・んだけどなぜかダウンロードできないので素直にターミナル叩きまくることに

 とりあえずSDカードを突き刺してから

$ diskutil list

 を実行してSDカードの場所を確認。容量とかそういうのを参考に。
 ここで確認間違えるとMacちゅどーんしそうなイメージあるけど試したことは無い。

$ diskutil unmountdisk /dev/disk1

 で、アンマウントして、「SDカードは抜かずに」、次のコマンド。

sudo dd if=~/Downloads/2014-01-07-wheezy-raspbian.img of=/dev/disk1 bs=4m

 適当に待ってたら終わり。書き込み終わったらなんか自動でまたマウントされてると思うのでそのままアンマウント、引っこ抜く。


 自動マウントされてるの気付かずにそのまま引っこ抜いて警告画面でたのはないしょ!!


③RasPiの接続

 これ悩みようがないのでHDMI突き刺し、SD突き刺し、キーボードの無線USBを突き刺して。
 ハイ終わり。
 あとはmicroUSBを電源につないだ瞬間にはいかんりょ



 のはずが。
 画面がつきやしません。

 ちょっと調べてみると、RasPiはケースに入れてると(実は入れた)、HDMIケーブルを奥までさせない場合もあるとかなんとか。
 ただ、ディスプレイが認識自体はしてるっぽいしなーと思ったら、「HDMI切り替え器」が戦犯だった模様。


 おとなしくSDカード引っこ抜いてMacに突き刺して、
 /boot/config.txt
 を開いて、

 #hdmi_force_hotplug = 1

 とかいう記述があるので、このコメント(#)を外しちゃう。

 で、保存して、またRasPiにSDカードを突き刺して起動してみたら画面ついた。よしよし。


 なんか妙に見辛いけどとりあえず無視

④ 初期設定

 なんや画面出てくるけど無視。知らん。あとでいいや

⑤ Xうごかす

 初期設定のままだからユーザとかパスワードも初期設定のまま。
 ユーザ : pi
 パス  : raspberry
 ログインできたら

$ startx

 で、なかなかびみょうなベリーの画像が背景に設定されてるデスクトップが。
 思ったよりここまで早く動くね? へっぽこかと思ったらそうでもないね?

⑥ ふつーのディスプレイに繋いだらPS3使えんじゃん

 いや、液晶ディスプレイはPS3(&PSVitaTV)に使ってるので、RasPi使ってたら使えんねというか1920*1080だと文字ちっさすぎて見えんねていうかこのへっぽこにそんなまともなディスプレイ与えなくても良いでしょ。


 ってことで埃かぶりかけてた液晶ディスプレイさんのご登場
 http://kakaku.com/item/K0000020194/spec/

 5年くらい前に家電量販店で安売りしてたので買ってたやつ。むかーしはこの画面にTweenの画面とか出してただのついった廃人してましたね(遠い目
 ただ解像度的にちっさすぎて使えんってことで放置されてたけどこれならいけるかなーと思って引っ張りだし。

 ただまあ当然ながらUSBディスプレイなのでそのまま繋いでもつかない、っていうかそのまま突き刺したらRasPiが落ちたね?


 てことでドライバ入れたらすぐでしょいけるでしょ   って軽い気持ちでやり始めたけど色々どはまりしてた
 失敗からのうまくいく流れまで全部まとめてみる

 とりあえずまたMacを用意してツールチェインの取得

$ git clone https://github.com/raspberrypi/tools

 とりあえず取得できたっぽいので次。カーネルソースを取得。

$ git clone --branch=rpi-3.6y https://github.com/raspberrypi/linux.git

 これもぱっと見問題なさげに見える。ぱっと見。

 で、RasPiのほうでkernel configをとってくる

% zcat /proc/config.gz > current-config

 RasPi側で作ったファイルをMac側に送らないといけないけど今のところネットワーク絡みの設定をろくにしてないので、これまたなぜか持ってクロスケーブルを引っ張りだしてRasPiのLANとMacのLANを直結。
 RasPi側はデフォルトではDHCPを利用している設定なので静的IPに変更。

$ cat /etc/network/interfaces 

 とりあえず見てみると、

iface eth0 inet dhcp

 こうなってるところがあるので

iface eth0 inet static
  address 192.168.1.10
  netmask 255.255.255.0
  gateway 192.168.1.1

 こうする。IPアドレスはとりあえず上記みたいにした。
 あ、変更するときは一応バックアップとること。
 あと、RasPiはviを使ってもいいし、nanoとかいうエディタ使っても良いらしい。
 emacsがデフォルトで入ってなくてちょと不満。

 あとは ifconfig を実行して設定したIPになってたらおっけ。

 次はMac側の設定を。とはいってもこっちはネットワーク環境設定を開いてIPを手入力にして192.168.1.2とか適当なのを設定しただけ。(元々がDHCP使うようにしてあったので)

 設定が終わったらあとは適当にscpでおいしくいただく。

$ scp pi@192.168.1.10:/home/pi/current.config .

 で、これで、Mac側にRasPiで取得したkernel configが持って来れたので、gitで取得したときにできたlinuxフォルダの下にコピーする。名前は .config に変える。

$ cd linux
$ cp ../current.config .config

 で、このフォルダってMakefileがあるのでこれを編集。一番最後の行に追加する

ARCH := arm
CROSS_COMPILE := /opt/arm-bcm2708-linux-gnueabi/bin/arm-bcm2708-linux-gnueabi-

 これが終わったら

$ make menuconfig

 とかすると画面が変わるので、
  
 ・Device Drivers
 ・Graphics Support
 ・Support for Framebuffer support
 ・Displaylink USB Framebuffer support

 とEnterを押していって、最後のだけスペースキー押したらMって文字がつく。
 あとはEsc連打して確認画面でYes押せば適用。

 で、あとは

% make -j2

 とかしてコンパイル開始。2っていうのは環境にあわせて適当に



 が。
 が。

 エラーでまくりのわけわからん状態に。


 その後色々試すもどうにもならず、撃沈。
 Makefileを直接編集するんじゃなくて、

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

 とかしてみたけど結果は同じ。RasPiからとってきた.configを使わずにやってもだめ


 うーん。。。。。。

⑦ コンパイル時のエラーをよくみてみたらコマンドが足りんとか色々出てる

 よーく見てみたらなんかgccがどうとかあるような。てことでこれをぶちこんでみる

$ sudo apt-get install git-core gcc-arm-linux-gnueabi

 が、そんなコマンドはないよ!!!!と返ってくる。

 あー、そういえばそうだね、Macはデフォではapt-getないんだっけ。。。


 で、それを入れる。
 ・Xcode 4.3以降が入ってるかどうか確認。入ってなかったら入れる
 ・環境設定画面のダウンロードだかそんなところに、Command Line Toolsとかあるのでそれをインストール
 ・インストールしたらターミナルを再起動
 ・finkとってくる http://sourceforge.net/projects/fink/files/fink/0.34.2/fink-0.34.2.tar.gz/download?use_mirror=hivelocity
  (多分最新版じゃない気もしたけどこれで試したので)

 これで前準備終わり。

$ tar -xvf fink-0.34.2.tar.gz
$ cd fink-0.34.2
$ ./bootstrap

 で、なんか選択肢でるけどsudoを選んでパスワード。あとはかーーーーなり待ち。
 おわったら

$ /sw/bin/pathsetup.sh

 これでパス設定。これも終わったらターミナル再起動。
 そしたら

$ fink selfupdate-rsync
$ fink index -f
$ fink list

 いろいろでてきたらおっけ。


 これでapt-getが使えるようになってるので、apt-getを使うような方法を試してみる。

$ sudo apt-get install git-core gcc-arm-linux-gnueabi
$ sudo ln -s /usr/bin/arm-linux-gnueabi-gcc-4.* /usr/bin/arm-linux-gnueabi-gcc
$ mkdir raspi
$ cd raspi
$ git clone git://github.com/raspberrypi/linux.git
$ cd linux
$ cp arch/arm/configs/bcmrpi_cutdown_defconfig .config
$ make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- menuconfig

 で、画面変わるので例によってDisplaylinkのを選択してからEsc連打からの保存。

 あとはまたコンパイル

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

 が、またもエラー。えー。。。。。。。。。


⑧ もうめんどくさいからUbuntuとかでやればいいんじゃないの

 てことで、VMware Fusionが都合良く導入済みだったのでUbuntuのISOイメージを取得してくる。
 今回はUbuntu 13.10 32bit版を利用。64bit? 知らん。

 とりあえずさくっと仮想OS準備したらそこでまたコマンドを。 

 どのタイミングか忘れたけど、多分gitのタイミングで、ncursesがないみたいな感じのエラーが出るので

$ sudo apt-get install libncurses5-dev

 をして入れておく。
 あと、UbuntuにRasPiのkernel configを渡しておく。
 (これまたMacに保持してたのをUbuntuにscpでもそのままドラッグ&ドロップで放り込む)

 で、さいしょから。

 最後の、

$ make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- -k -j5

 がうまくいったので、

$ ls arch/arm/boot

 で確認してみると、zImageとかいうファイルできてる。
 ので、次はモジュールを用意。

$ mkdir ../module
$ make modules_install ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- INSTALL_MOD_PATH=../module/

 で、あとはzImage(カーネル)とモジュールをtarでかためちゃう。

$ mkdir raspiketnel
$ cp arch/arm/boot/zImage raspiketnel/kernel.img
$ cp -pr ../module raspiketnel/
$ tar cvzf raspiketnel.tgz raspiketnel

 できあがったのでこれをRasPiに送る。(仮想のUbuntuからRaspiに直接放り込んだ。)

$ scp raspiketnel.tgz pi@192.168.1.10:/home/pi

 で、RasPiでの作業。

$ sudo cp /boot/kernel.img /boot/kernel_org.img

 さすがにカーネルのバックアップ。
 いやまあここまでたいしたことしてないから消し飛んでも別にいいんだけど。
 あとは、さっきRasPiに送ったtarを解凍してから、カーネルとモジュールをインストール。

$ tar xvzf raspiketnel.tgz
$ sudo cp raspiketnel/kernel.img /boot/kernel.img
$ sudo cp -pr raspiketnel/modules/lib/module/3.2.21+ /lib/modules

 これがうまくいったらRasPiを再起動。

$ sudo reboot

 でもって再起動したら、USBディスプレーを突き刺す。


 ・・・突き刺したら落ちた。
 電力の問題? とりあえず、USBディスプレイに付属してた二股ケーブルの一方をRaspiに、もう一方を適当なモバイルバッテリーに突き刺してから再度Raspiに電源を刺す。


⑨ 黄緑色のきもい画面がUSBディスプレイにうつった

 とりあえず、RasPiで、

$ dmesg | grep DisplayLink

 とかやってみて、それっぽいのを探す。そしたら /dev/fb1 とかそんな記述があるはず。
 (番号違ったらそれを控えておく。

 で、
>||
$ sudo vi /etc/X11/xorg.conf
|