5/13/2015

Asus x205taにUbuntu14.04LTSをインストール

Asus x205taがコスパが良くUbuntuマシンにしようと思って買ったもののBay trailのPCはすんなりとはインストールできないとわかって、Windowsで我慢してたが、重い腰を上げてチャレンジ。

問題は、BIOSが32bit UEFIでレガシBIOS互換モジュール無しなところ。
つまり32bit UEFIブートしかできない。がしかし、Ubuntuを含め、32bit版のインストールディスクではUEFIブートをサポートしていない。(というか、Linuxカーネルが32bitでUEFIをサポートしない方針っぽい)64bitのインストールディスクは64bitUEFIブートしかサポートしていない。というめんどくさいことになっているのです。Linuxサイドでは、64bit CPUにわざわざ32bit UEFIを使うなんてことが想定外なのでしょう。

Bay trailは64bitでも動くのだが、このマシンを含め、最近の低価格タブレットのマシンでは、なぜか、32bit UEFIを実装している。インテルさんの都合か、BIOSベンダーさんの都合か、大した理由などないのか、まあいいや。

一日こねくりまわして、何とかできたので手順をざっくりまとめておく。


1. Ubuntu14.04の64bit版インストールディスクをダウンロードする。
    http://www.ubuntu.com/download/desktop

2. Universal USB Installerをダウンロードする。(Windowsで作業する場合。別のLinuxマシンがある人はddとかで。)
    http://www.pendrivelinux.com/universal-usb-installer-easy-as-1-2-3/

3. Universal USB Installerを使って、USBメモリにUbuntuのインストールディスクを書き込む。

4. bootia32.efiをダウンロード。32bitUEFIブートしてGrubを起動させるためのEFIアプリケーション。自力でビルドすることもできそうだが、せっかくなので、実績ある有志の成果物を使わせて頂く。
    https://github.com/jfwells/linux-asus-t100ta/blob/master/boot/bootia32.efi
    (ちなみに、LinuxMintやUbuntu14.10、Ubuntu15.04のインストールディスクももこいつで起動できた)

5. USBに書き込んだインストールディスクの中の「/EFI/BOOT/」ディレクトリにbootia32.efiをコピー。

6. x205ta側の設定。起動時に「f2」キーを押してBIOS設定画面に入り、Security->Secure Boot Menu->Secure Boot ControlをDisableに。いわゆるセキュアブートを無効にする。あと、Advanced->USB Configuration->USB Controller SelectをEHCIにしておいたほうが無難なようだ。あと、内臓Wifiが使えないので、USBのWifiアダプタをつけとく。

7. USB刺して、再起動。起動時に「esc」キーで、ブートデバイス選択画面に入って、「UEFI: USB MassStorage Device」を選択。USBから起動。

8. Ubuntuを普通にインストールして、再起動。だが、このままでは起動してくれない。というのも、64bitのインストールディスクは64bitUEFIマシンを想定していて32bitUEFIブート用のGrubをインストールしてくれないから。なので、まずは、USBインストールディスクのGrubでマシンにインストールされたUbuntuを立ち上げるという方法を採る。USBインストールディスクからマシンを起動Grubメニューで「c」キーを押し、Grubのコマンドラインに入り、以下を入力

$ linux (hd1,gpt2)/boot/vmlinuz-3.13-0-52-generic root=/dev/mmcblk0p2 reboot=pci,force
$ initrd (hd1,gpt2)/boot/initrd-3.13-0-52-generic 
$ boot

めでたく起動したら、32bit UEFIブートを何とかする。ネットを見て回っていると、grubのソースをビルドしてバイナリ作ってインストールという方法を取っている記事を見かけることが多かったが、パッケージで何とかしてみる。「grub-efi-ia32」をインストール。

$ sudo apt-get install grub-efi-ia32

で、たぶん、本来これだけでいいっぽいのだが、これのインストール中に「efibootmgr」が実行され、EFIのバリアブルにブートローダーを登録するのに失敗している。というか、EFIバリアブルにアクセスできてなさそうな感じ。「Try modprobe efivars」とでるが、やっても駄目だった。これはカーネルモジュールの問題なのか、UEFIが32bitだからなのか、原因不明。とは言え、モノはそろっているし、そもそもファイル名だけの話っぽいので、さしあたって、今回はファイル入れ替え作戦で回避

$ cd /boot/efi/EFI/ubuntu
$ sudo cp grubx64.efi grubx64.efi.bak
$ sudo cp grubia32.efi grubx64.efi

ちょっとスマートではないが、他にいい方法思いついたらまた試してみる。恐らく、何らかの方法でEFIバリアブルに、grubia32.efiを登録できればいいと思われる。不思議なのは、どこかの段階で、ubuntu/grubx64.efiは登録されているということ。

なので、この環境で、手順さえ踏めば行ける気がするのだが。(これをやる前に、15.04のインストールを試みたので、その名残の可能性もある) 

追記:その後、改めてUbuntu15.04のインストールを試したところ、Ubuntuのインストール途中で、grub-efi-amd64-signedのエラーでクラッシュ。これを無視して、USBから起動させ、apt-get install grub-efi-ia32したところ、efivarsに関する問題も出ず。

ファイル入れ替えはせずに普通に起動。インストーラがクラッシュしているので、なんか気持ち悪いが、使えるには使えそうな感触。逆に言えば、15.04のカーネルか、efibootmgrあたりで問題が修正されているのかもしれない。 で、再起動。試行錯誤したなかで、上手く行った部分だけ、まとめるとこんな感じ。手順抜けてる可能性もあります。この通りやっても上手く行かないこともあるかも。そしたら、連絡ください。試行錯誤思い出します。以下のページが非常に参考になりました。先人の知恵に感謝致します。


http://brownbro.github.io/blog/2015/01/15/asus-x205ta-with-lubuntu/ http://sturmflut.github.io/linux/ubuntu/2015/01/21/installing-ubuntu-15.04-on-baytrail-tablets/ http://www.geocities.jp/cowfish_lactoria/mstick1-euc.html http://orumin.blogspot.jp/2013/01/grubefi.html

1/27/2014

Ubuntu12.04でCUDA5.5開発環境

Ubuntu12.04でCUDAの開発環境を整えてみるメモ


CUDA5.5のTookKitを以下からダウンロード
https://developer.nvidia.com/cuda-downloads

うちのマシンはUbuntu12.04 64bitなので、それようのdebパッケージをもらってくる。これはレポジトリ追加するだけのもののようだ。
で、これを普通にパッケージマネージャでインストールして
$ sudo apt-get install cudaとかやると依存関係のエラーが出てきて、にんともかんともな感じに突入。


仕切り直し。

まず、nvidia関連のパッケージを削除しまくる。
$ sudo dpkg -l | grep nvidia | grep '^ii'

とかで出てきたやつをapt-get removeで片っ端から削除。

$ sudo gdebi cuda-repo-ubuntu1204_5.5-0_amd64.deb

でリポジトリを追加して、

$ sudo apt-get update
$ sudo apt-get install cuda

でインストールできた。

/usr/local/cuda-5.5に一式インストールされる。このままだとパスが通ってなくて不便なので
.bashrcの末尾に以下を追加

export PATH=/usr/local/cuda-5.5/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-5.5/lib64:$LD_LIBRARY_PATH

64bit版じゃない場合はlib64じゃなくて単にlib

で、eclipseベースのIDE環境でnsightというのが、もれなくインストールされるらしいので試す。/usr/local/cuda-5.5/binにインストールされているので、パスが通ってれば適当にターミナルから以下のコマンドで起動。

$ nsight


















/usr/loca/cuda-5.5/samplesに諸々サンプルがあるので、homeにコピーする。
適当なやつをeclipse(nsight)にインポートしてビルドしてみる。

いくつかサンプルをビルドしてみたが問題なく通る。が、Runしようとするとバイナリがないとか言われる。ターミナルから直接バイナリを実行するとできるので、インポートの方法がまずいのかなー。
eclipseのプロジェクトのプロパティからRun/Debug Settingで直接バイナリを指定したらEclipse側でRunできた。


2_Graphics/simpleTexture3D を実行



















Runができたところで、EclipseのパースペクティブをProfileに切り替えて、試しにプロファイルをとってみた。

















へー。真面目にパフォーマンスを分析するには有用かも。

そんなこんなで、今日は終了。


1/15/2014

LinuxでOpenGL

今日も寒いなー。金沢に活動拠点を移して早3ヶ月。転職して、キャリアや趣向にも変化があり、x86や組み込みという路線から、VRを軸に画処理、射影変換や3D/2Dグラフィックス路線に以降ぎみであります。気づいたらkinectやOculusとか、レンズやら、へんな3D眼鏡でいっぱいになってる。

そんなこんなで、気づいたら去年はほとんどブログ書いてないと気づく。(下書きはちょいちょいあるんだが)
で、なんとなく久々にブログ書いてみる。というか、ほぼメモ


LinuxでOpenGLプログラミングをするメモ。現在、Ubuntu12.04を使用。まあディストリ変わってもパッケージマネージャの違いだけで、やることは大差ないと思われる。

glutを使います。OpenGLプログラミングでウインドウ周りの描画の面倒を見てくれる、よく使われるライブラリ。結構枯れたライブラリでWindowsでもよく使われるので、サンプルコードはググればいろいろ出てきます。


さしあたって以下をインストール

$ sudo apt-get install freeglut3-dev libglew1.6-dev

ほかにも以前に入れたものでいるものがあったかも。

コンパイラ一式の導入がまだなら以下でがっぽり入ります。

$ sudo apt-get install build-essential


で、テストコード
test.c

#include <GL/glut.h>

int main(int argc, char *argv[])
{
  glutInit(&argc, argv);
  glutCreateWindow(argv[0]);
  glutMainLoop();
  return 0;
}


コンパイル

$ gcc test.c -lglut


実行

$ ./a.out

でコンパイルが成功してればウインドウが出る。



続いてEclipseでやる方法

Eclipseの導入とCDTのインストールは、端折りまして
普通にコード書いてもコンパイル通らないはず。
プロジェクトのプロパティで「GCC C++ Linker」の「Libraries」に「glut」を追加。
でRunできる。


そんなところ。

今日は、ライトな内容ですが以上っす。