5/15/2015

Ubuntu 15.04でAndroid開発環境を構築してみる。

というわけで、やってみた手順をまとめておく


  1. JDKはOracleのやつを使う。Oracleからダウンロードすやるやつはdebパッケージになってなくて、既存のパッケージとの競合解決がめんどくさいので、今回はppaリポジトリから。
  2. sudo add-apt-repository ppa:webupd8team/java
    sudo apt-get update
    sudo apt-get install oracle-java7-installer
  3. そろそろEclipse離れしてみようかと、Android SDK Tool Only + Intellij CEを試してみたところ、結構いい感じで開発できそうだが、Android開発メインならサンプルコードのダウンロード機能やAndroid SDKが統合されて至れり尽くせりなAndroid Studioの方がやっぱ便利っぽい感触。(https://developer.android.com/sdk/index.html)。ダウンロードしてandroid-studio/bin/studio.shで起動。ここで、ハマりポイント。適当にサンプルとかをビルドするとaaptがエラーという旨が。ファイルはあるのに、実行ができない事態。これが、32bitバイナリで64bit版Linuxだと実行できないことが判明。で、Andorid Studioのページよく見たら書いてあった。(https://developer.android.com/sdk/installing/index.html?pkg=studio) ia32-libs, lib32ncurses5-dev, lib32stdc++6 をインストールせよと。
  4.  sudo apt-get install ia32-libs lib32ncurses5-dev lib32stdc++6 
    だが、しかし、ia32-libsは古いパッケージでUbuntu15.04では廃止っぽい。これなしでも、なんだか実行できるようになったが、過去にインストールしたパッケージで、なんかしんないけど解決できてるだけかもです。 あと、Android Studioだと、adbが一緒にインストールされてる気配だったが、一応Ubuntuでもandroid-tools-adbパッケージがある。
  5. で、USBで繋いだ実機にデプロイするには、端末繋いでlsusbしてみてベンダーIDを確認。
  6. $ lsusb 
    Bus 001 Device 005: ID 2019:ed17 PLANEX GW-USValue-EZ 802.11n Wireless Adapter [Realtek RTL8188CUS]
    Bus 001 Device 006: ID 18d1:4ee2 Google Inc. Nexus 4 (debug)
    Bus 001 Device 004: ID 05e3:0610 Genesys Logic, Inc. 4-port hub
    Bus 001 Device 003: ID 0bda:57b5 Realtek Semiconductor Corp. 
    Bus 001 Device 002: ID 8087:07e6 Intel Corp. 
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
  7. /etc/udev/rules.d/50-android.rulesを作成して、以下を追加。18d1のところは端末のベンダーID。別の端末を複数登録するにはこのファイルに追記すればいいはず。
  8. SUBSYSTEM=="usb",SYSFS{idVendor}=="18d1",MODE="0666"
とりあえず、こんな感じで、開発進められるかなー。

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