Intel JouleにUbuntuをインストールして普通に動かせたら。かなりワクワクしますよね。
※11/24 かなり簡単にインンストールできるようになってます。現在執筆中!!
----->12/6 完了。下の記事参照。Ubuntu16.04、外付けSSDにも簡単にインストールできて、mraaでGPIOも制御できた上に、OpenCL(GPGPU)の動作確認までできちゃいました。
以下の記事はUbuntu14.04をインストールしたい場合参考にして下さい。
画面のもたつきとGPIOの制御ができない(執筆時点では気付かなかったのですが、sudoをつければボード上のLED制御可能。多分Pull UPすれば、大部分のGPIO制御が可能です)ことを我慢すれば、ちゃんとしたものになったので、どんな状態なのかも画像でついでにご報告。今回は、この記事の
成功例を使わせていただきました。結局、記事を最初に書いたKhaosさんが説明している通りでした。後の方でMcCoolさんが補足していますが参考になりません。混乱するのでやめた方が良いと思われます。KhaosさんはかなりLinuxに精通しているらしく、私のような初心者では中間が抜け過ぎています。でも。最終的にインストールができてみると、こんな短い英文に、よくぞこんなに盛り込んだと思えるくらいヒントが隠されてます。今回は補足という形で記事を書きました。ただし、IntelからJoule版Ubuntuが正式発表されるまでの命です。
私は本体eMMCにインストールしてしまったのですが、後で元に戻すのが厄介なのでSDカードにインストールした方がベターです。今回は、SDカードインストール方法を紹介します。インストール先を変更すれば、簡単に内部eMMCにもインストールできますが、あまりオススメできません。例によってlinux初心者+αなので力技で処理しています。なので精通している方はもっとインストール過程がスマートになると思います。
用意するもの
- SDカード16G以上(Ubuntu実行用。価格が高くなるが、なるべくスピードの速いもの)
- USB3.0用のSDカードリーダー
- USBメモリ16G程度(インストールディスクとして使う)
- USB3.0用のUSBハブ(4口程度がベター。補助電源なしでも今の所快適)
- 専用のHDMIケーブル
本体のSDカードフォルダはスピードが遅く(ubutu実行時入力が相当もたつく)16Gまでという壁があるのでUbuntuはインストールしない方が良いと思われます。今回はUSB3.0にSDカードリーダーを介したSDカードにUbuntuをインストールします。まー遅めのSSDと言いましょうか。Ubuntuを使う限りはサクサクです。USB3.0ですから本物の外付け小型SSDを付ければもっとサクサク。
Ubuntuのインストールは、かなりスピードの速いソニーのUSM-W3というUSB3.0対応のUSBメモリでも試してみましたが、USB2.0並みの操作感でした。つまり遅くてUbuntu実行環境では使えません。今回の検証はUSB3.0対応カードリーダー+SanDisk Ultraです。また、Joule本体がかなり熱くなるので小さなFanが必要。無い方はウチワであおぎながら作業しましょう。
インストール準備
まずインストール用USBメモリをを用意して、通常通りインストールディスクを作ります。最初から日本語化してある理研などのサイトからダウンロード。作成方法は他のサイトを当たって下さい。(今回はUbuntu14.04)
Joule本体にキーボードとHDMIディスプレーを本体につなぐ
キーボードは、ファンクションキーである「F2」が直接打ち込める標準キーボード(無線やFnキーを押さないとF2を認識しない小型キーボードではBIOS設定ができなくなる可能性大)BIOS設定ではJIS標準キーボードだと特殊記号が文字化けするので、 = / \ : + - の位置を入力時確認する必要があります。
インストール用のUSBメモリをUSBハブにつなぐ
- Jouleの電源ON
- 本体のランプが4つ点灯した頃F2キーを押す。
- 画面がBIOS設定に切り替わるの矢印キーで以下を選択
- Boot -> F2 -> Boot Manager -> EFI Internal Shell
ここで EFI Internal Shellを選択すると、
Shell画面になる。画面ではfs0:を入力後lsコマンドを実行している
なんだか訳のわからない表示が出てきますが、Shellがスタートしています。なので普通のlinuxコマンドが実行できます。この状態になったら、最初に「UbuntuインストールUSBメモリ」を選びます。通常は、fs0: のようです。
- fs0: エンター
必ず : を付けること。ここで装置記号を入力しないとShellコマンドが実行できません。記憶装置名を入力したら、lsなどのコマンドを入力して、ファイル構成を確認して見て、選択した記憶装置が正しいものかどうかチェック。違っている場合は慌てずにexitを入力すると初期状態に戻るのでもう一度やり直しすればOK。直接画面では肝心の FS◯◯ 部分がスクロールされてしまうので、内容がfs0:でない場合は、fs0: から Fs4:くらいまで試して見ます。多分Fs0:でOKですが.....。Ubuntuインストールディスクはrootにcasperというディレクトリができているのですぐに判別できます。(一応他のlinuxマシンでcasperディレクトリが存在するかどうか事前に確認しておくと、安心)
- cd casper
を入力して、casperに入ったら、めんどくさいですが以下を入力。この時、特殊記号の入力に注意すること。この時点でキーボード配置を確認しておくと後々便利。
---まで一挙に入力したらエンター。スペルは正確に!!。
ドキドキしますが、しばらくすると見慣れたUbuntuの画面が現れます。ただしこれはインストール用(CDイメージ)ですから他のアプリはインストールできません。とりあえずここで、ディスクトップ画面から家庭内のwifiに接続しておきます(簡単に接続できるはず)。Ubuntu画面が出てこないでシステムが止まってしまったら慌てずリセットボタン(パーワーボタン長押し)を押して、再挑戦。casperディレクトリの有無やスペルの確認をしてみて下さい。
標準でGpartedがインストールされているので、USB3.0用カードリーダーに高速SDカードを挿してUSBハブに接続してから、Gpartedを起動させ、SDカードのフォーマットを行います。すでにsdaはインストールUSBメモリに割り当てられているので、新たにつないだSDカードはsdbの筈です。ここで新たに2つのパーテーション(sdbに)を作成しますが、詳しくはGpatedの使い方を確認してください。前方に500MiB程度のfat16、後方の残りをext4にフォーマットします。前方にfat16を作らないとJouleのBIOSがこのSDカードを認識しないのでここが重要なポイントとなります。
この時は内部eMMCにインストールしたのでmmcblk0になっているが、SDカードはsdbになっているはず。パーテーションはこんな感じで2つ作る。(fat16,ext4。ext4はsdb2になっていることになる)
あとは、sdb2を/に指定して通常のUbuntuインストールを実施します。インストールが終了したら、再起動しないでそのまま、yoctoがプレインストールされている内部eMMCの第一パーテーションの中身を全部sdb1にコピーします
認識している外部記憶装置は、/media 以下に全部マウントされているので、端末を立ち上げ、sudo cp -a を使ってフォルダごとコピーします。/media 以下にぶら下がっているディレクトリは、こんがらがってしまうので、中身を確認して間違えないように名称を確認してください。(英数字の羅列になっている)つまり内部eMMCに作られているBOOT部分をそっくり新しく作ったSDカードの第一パーテーション(fat16フォーマット)にコピーしてしまうわけ。コピーするディレクトリ構成は2つだけです。
--BOOT
次に端末からSDカードの第一パーテーションに入って、sudo で ubuntuフォルダを作ります。フォルダ構成は(ubuntuフォルダは、EFIの直下にBOOTと同位置に作る)
--BOOT
--ubuntu
今度は今作ったubuntuフォルダに入って
sudo cp -a /boot/* 現在のディレクトリ
を実行して第2パーテーションに作られたboot以下のファイルをめんどくさいので全部コピー。さらに端末から、今コピーしたファイルの中のvmlinuz-4.4.0-31-generic を vmlinuz-4.4.0-31-generic.efi に名称変更。これで下準備完成。
チョット複雑そうですが、よく考えてみると簡単なことに気づくと思います。コピー方法はこの他にもmountコマンドを使うなり好きな方法で。
いよいよ起動
- まずインストール用のUSBメモリを抜きます。
- SDカードを挿したUSBカードはそのまま挿しっぱなし。
- システムをrebootしてF2キーを押しBIOSを立ち上げます。
- Reboot -> F2 -> Boot Maintenance Manager -> Boot Options ー> Add Boot Option を選択
- 矢印キーでUSBカードらしき部分を選択します。選択した記憶装置が正しければ先ほど作ったubuntuフォルダが選択できるので
違う場合はEscで変更が可能です。
- 正しければここで、選択名称とスクリプトを入力。
ここではBOOT名称はUSB-UBUNTUにしている。カーソルで選択してEnterを押さないと入力できない。スクリプトを入力しているところ。
名称は自分の好きな名前で。スクリプトは
root=/dev/sda2 initrd=\\EFI\\ubuntu\\initrd.img-4.4.0-31-generic ro rootfstype=ext4
です。赤文字部分ですが、先ほどフォーマットした時はsdbですがubuntuインストールUSBメモリを抜いているので、自動的にsdaになります。数値は2なのでお間違いなく。F4キーを押して保存した後ESCキーを押してBIOS設定初期画面に戻った後
Boot Manager->今作った設定ファイル名選択で..................Ubuntuが起動!!
Boot Manager で先ほど作った USB-UBUNTUを選択
起動方法は順序を設定するより、Boot Managerから選択するのが一番確実なようです。
注意点としては、UbuntuをインストールしたSDカードを抜いてしまうと、設定ファイルが消えてしまうようなので、再度起動スクリプトを書いてやる必要があること。まー暫定ですからガマンガマン。
Openframeworksインストール
Openframeworksは、標準Linux64版をダウンロードすれば問題なくインストールできました。いつもの3D Exampleをビルドすると、スピードが早いものの「もたつき」があります。ただしコンパイルスピードがPi3とは比較にならないくらい早い。
その他
- apt-getが確実に使えるので、pip、pygame、SimpleCVは簡単にインストールできました。pypyなんかもインストールできて、当然ですが標準Pythonより物によっては10倍以上早くなります。
- SimpleCVを使ったMJPEG配信では、USBカメラはちゃんと認識するのですが、なぜか配信スピードがEdisonより大幅に遅くなってしまいます。
JouleでSimpleCVを使って配信した360X240のWebCamera映像をMacのサファリで表示している。ものすごく遅い。OpenframeworksのOfxHTTPを使えば改善できるかも。後からSimpleCVで顔認識させたら480X270で8〜10fpsくらい出る。不思議不思議。タイミングの問題か?
- mraaはソースからビルドできますが、全くGPIOを認識しません(実行時GPIOエラー。USBが使えたとしても現段階ではJouleの本領を発揮できません)。
- GPIOを無視すれば、音声までは試してませんが、動作がぎこちない部分はあるとしてもほとんどのアプリが動くと思われます。
- Jouleはかなり頻繁にCPUクロックが変化(800〜2400kHz)するので、スピードを固定すると多少画像のギクシャク感が解消できるかもしれません。
その後
sudo apt-get install indicator-cpufreq
でCPUスピードを簡単に変えられました。インストールしたらreboot後右上に表示されたインジケーターで調整。何もしないと直ぐに0.8GHzに変わるみたいです。だから直ぐに反応が鈍るのか...。フーム。
最後に
今回はSDカードを使ってのUbuntuインストール方法でした。寿命のある内部eMMCを使わないだけ精神的に気が楽になります。失敗を恐れずに何回でも試行できますので、説明不足のところは挫折しないで最後まで頑張ってみてはどうでしょうか?。私ができたのだから必ず成功します。本家がUbuntu稼働を発表した時にはそれよりも良いものになったりして...。マサカねー。
Jouleの内部eMMCはかなり性能が良いみたいです。LinuxでSSD使用者ではおなじみのTrimコマンドを実行可能。延命とスピード維持を確保するため、たまにfstrimを実行した方が良いかもしれません。
例: sudo fstrim -v /
(内部eMMCでブートした場合。SDカードなどの場合は / を変更)
では、また。