11/06/2015

Ubuntuで、Android本体(Android Open Source Project)のソースコードをビルドしてみる

AndroidのOS基本部分はソースが公開されていることは、ご存じの方も多いと思いますが、最近ちょっと、Androidのアーキテクチャをリサーチしてみたり、手を加えてみたい欲求が出てきたので、ソースコード取得&ビルドまでをやってみる。の記録。

本家ページは以下。手順も書いてある。
http://source.android.com/source/index.html


サポートされている開発環境は、Ubuntu14.04 or Macで、メモリー16GB、ディスク100GB以上(ソース)、ビルドするなら150GB〜200GBいるとか書いてある。

うちには、そんな贅沢なスペックのマシンはありません。でもやる。最近中古で買ったメインマシンのHP Spectre(Ivy Bridge)がメモリー4GB、SSD250GBと、きわどいスペックですが、きっとビルド遅いだけで済むでしょう。Windows10マシンとして使っていたところ、急遽Ubuntu14.04 64bitをインストール。ハードウェアも、ほどよく枯れているので、とくにトラブルもなく快適動作。SkylakeのPCほしー。コスパ的に私が買うのは2年後の中古かなー。


まずは、要るものインストール

JDKから

$ sudo apt-get update
$ sudo apt-get install openjdk-7-jdk



別のJDKをデフォルトにしている人は以下で、切り替える

$ sudo update-alternatives --config java
$ sudo update-alternatives --config javac

なんだか、OpenJDK使えとな。Oracleのじゃなくて。ここはとりあえず、従っておく。Googleさんのスタンスとして、このへんどうなんだろう。AndroidStudioだとOracleのリンクが指定されていたり。AOSPは、別扱いなのだろうか。まあ、今はいいや。今度、ちゃんとドキュメントちゃんと読みます。


コンパイルに必要なものをインストール

$ sudo apt-get install bison g++-multilib git gperf libxml2-utils make python-networkx zlib1g-dev:i386 zip


USBでAndroidデバイスを認識できるようudev設定追加。ハードウェアにデプロイしないのなら要らないと思われ。

$ wget -S -O - http://source.android.com/source/51-android.rules | sed "s/<username>/$USER/" | sudo tee >/dev/null /etc/udev/rules.d/51-android.rules; sudo udevadm control --reload-rules


ソースをダウンロードするのに、repoというコマンドを使うので、その下ごしらえ

$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo


ソースを取得するディレクトリ作成。私はとりあえずaospとしましたが、好きな名前でOKです。

$ mkdir aosp
$ cd aosp


repo初期化

$ repo init -u https://android.googlesource.com/platform/manifest


ブランチ指定したい人は、以下のように指定。ブランチ一覧はここを参考に。

$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1

ソース取得

$ repo sync


家のネット環境がイモ(Wimax)なせいか、頻繁にエラーで中断される。何度かやり直して、Done。
この時点でソースの総容量が、約13GB、うーん。推奨環境では100GBという話だったが、ちゃんと全部取得できてるんやろか。

とりあえず、ビルドまで通してみる。

$ source build/envsetup.sh
$ lunch aosp_arm-eng

引数のビルドタイプはプロセッサアーキやハードウェアの指定+user, userdebug, engとある。eng(多分エンジニアリングとかの意と思われ)はデバッグ可能な開発者向けビルド的なやつっぽ。タブで補完すれば、指定可能なオプションが確認できる。

現時点で選択可能なのは以下だった。

aosp_angler-userdebug
aosp_arm-eng
aosp_arm64-eng
aosp_bullhead-userdebug
aosp_deb-userdebug
aosp_flo-userdebug
aosp_flounder-userdebug
aosp_fugu-userdebug
aosp_hammerhead-userdebug
aosp_hammerhead_fp-userdebug
aosp_mips-eng
aosp_mips64-eng
aosp_shamu-userdebug
aosp_x86-eng
aosp_x86_64-eng
full_fugu-userdebug
m_e_arm-userdebug
mini_emulator_arm64-userdebug
mini_emulator_mips-userdebug
mini_emulator_x86-userdebug
mini_emulator_x86_64-userdebug



$ make -j4

知ってる人は多いと思いますが、-j4は並列コンパイルのスレッド数を指定。ホストマシンのコア数によって加減する。当然、多くすれば、コンパイルが早いが、マシン性能を超えて指定しても、早くはならない。一般にコア数の2倍程度が良好とされるが(昔の目安)、最近は4コア8スレッドとか、物理コア1つにつき、ハイパースレッディングで仮想コア2つみたいなアーキになってきたりしてるので、そのあたりも踏まえて、自分のマシンで、いろいろ試して、いい感じの並列数を探すのがいいのかもしれない。

で、ビルドが、なんとか終わる、正確に測ってなかったが、 Core i7-3517U  1.90GHz (2Core, 4Thread) のCPUで、-j4オプションで、約4時間くらい。

早速、実行してみる。実機デバイスに焼くというてもありますが、今、デプロイしちゃっていい端末や、開発ボードもないので、エミュレーターで起動させてみる。

$ emulator





なんとも言えない、やっちまった感漂うブートスプラッシュの趣。



うーん。なんだか、しょぼいホーム画面です。Nexus5を愛用してるので、それに近いものが出てくると勝手に予想してましたが、思いの外、オープンソースになってる部分だけでは、しょぼい感じのようです。ビルド指定が、ただのarmだからだろうか。hammerhead(nexus5のコードネーム)というビルドオプションもあるので、次はそれでやってみようかな。


ちょっと、目を疑ったので、ビルド情報確認。

Android6.0で、ビルドナンバーには今日の日付と、私の名前入ってます。どうやら、私がビルドしたものに間違いないようです。

ちなみに、ビルド後の作業ディレクトリの総容量は約41GBでした。ごにょごにょしていくと増えていくんでしょうが、思ったほどでかくなくて、助かりました。最近、ラップトップの内蔵ストレージが、SSDやeMMCになって容量あたりのコスト高いですからねえ。足りなくなりがち。 とりあえず、当初の目標であるソース取得からビルドまでは、無事できましたので、これからイジって行きたいと思います。

今回はこんなところで。



11/03/2015

Asus x205taでUbuntu14.04LTSを使う タッチパッド対策

5月くらいから、Asus x205taにUbuntu14.04をインストールして使っておりましたが、(LinuxMintはやめた)タッチパッドが、スクロールできなかったり、タップ無効にできなかったりで、不便でしたが治りました。

LinuxMint等、Ubuntu派生ディストリはこの方法で行けると思われます。

といっても、カーネルが対応したというだけのこと。ただのマウスっぽく認識していたところ、カーネル4.3以上でタッチパッドとして認識するようになりました。

4.3以上で対応するということは、前情報で知っていたので、kernel ppaにて、 まだか、まだかと、こまめにチェックしてカーネル取っ替え引っ替えしていたところ、4.3の安定版が提供され始めたのでインストール

http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.3-wily/

↑から、

linux-headers-4.3.0-040300-generic_4.3.0-040300.201511020949_amd64.deb
linux-headers-4.3.0-040300_4.3.0-040300.201511020949_all.deb
linux-image-4.3.0-040300-generic_4.3.0-040300.201511020949_amd64.deb

をもらってきて、$sudo dpkg -i linux*

だけで、タッチパッドがまともになりました。カーネルモジュールや、X11関連の設定ファイルは特にイジらなくてもよさげ。これで、2本指スクロール。タップ無効ができて快適になりました。



が、しばらく使っていて、よくフリーズする。経験即で、カーネル4.2以上だとx205taは固まる頻度が高い感じがする。acpiとi2cのなんかっぽい情報は、web上で、ちらほら見かけますが、このカーネルバージョン(あるいはビルドオプション)でも、今一つのよう。現時点で、安定性を重視するならタッチパッド諦めて、4.1系を使っていたほうが無難かも。

あと、サウンドとblue toothは依然、認識せず。パーフェクトになるには、まだまだカーネル開発が進むのを待つ必要がありそうです。カーネルソースを自力でイジればいいんでしょうが、ヘタレなので今の所、待ちのスタンスで(笑)

今日は以上です。


11/02/2015

このところ、頭脳がこんがらがり気味なので、生活に禅を取り入れてみようと。

このブログは技術ネタがメインですが、故スティーブジョブス氏や、Googleでも禅を取り入れているようで、ストレスフルで変化の激しいIT業界で生きていくには、禅は有用なツールとなりえるのではなかろうか。

というわけで、金沢で初心者が気軽に座禅ができるらしいということで、大乗寺の座禅会に参加してみました。






 木々が美しい参道をてくてく歩いて行き、門をいくつかくぐると本殿に到着。駐車場から結構歩きます。(15分くらいかな)今回は行けませんでしたが、公園や、前田家の墓地が隣接しているそうで、そちらも観光スポットになっているようです。






中はわりと、地味で質素な感じです。


座禅会は毎朝4:00と、日曜1:30からやっているそうです。初心者は日曜のやつがお勧めとのことだったので、そちらに参加。予約は特にしなくても、おもむろに行ってOKでした。HPによると企業、団体向けに数日、泊まり込みで修行僧と一緒に禅修行することもできるらしい。

1:15分くらいに行って、受付を済ませます。氏名、住所、電話番号と、「初めてのかた」に丸をつけるような簡単な名簿記入だけです。毎回、初心者の方も多いらしく、手慣れた感じでサクサク、システマチックに進みます。座禅入門的パンフレットと、法話のプリントもらって談話室のようなところに案内され、それらに目を通していると、お坊さんがやってきて、パンフレットに沿って、作法を一通り説明して頂けました。手の組み方、合掌の仕方、足の組み方、歩き方等々。




といっても、この段階で、完璧に作法をマスターしてください、というわけではなく、やりながら指導して頂けます。

で、お坊さん曰く、人間、無になることはできないので、思考は浮かぶままに、深く追及せず、流していってくださいとのこと。禅は無になることを目指すんだ、という思い込みがありましたが、そういうわけでもないみたい。

座禅場は、さすがに、写真撮れる雰囲気ではありませんでしたが、なんとも静かで素朴な空気感です。どでかいカメムシが、けっこう居ます。

座布団の上に座禅用のボール状のクッションが置いてあり、これを揉みほぐして、ふっくらさせることから始まります。
で、前後に合掌、一礼して、(周囲の人に、ここでやらせて頂きます、よろしくね的な意)座について足を組みます。

足の組み方ですが、両足を腿の上に乗せるのがベストっぽいですが、片方だけでもアリで、どっちの足が上とかは、それほどこだわらなくていいっぽ。体固い人は、普通のあぐらでもOKとのこと。私は、片足だけ腿の上で、挑戦しましたが、数分で足もげそうになって、集中できなかったので、無理せず、あぐらにしました。

目は半閉じで、斜め下45度を見る。完全に閉じると眠くなるからだそうです。で、座禅というと寝てたりすると、肩をぶっ叩かれるイメージあるかと思いますが、どうやら、自主的に気合い入れてほしい人は首を左に傾け、肩を開けると叩きますという感じみたいです。いきなり不意打ちで、ぶっ叩かれることは無いようです。私は姿勢が悪かったようで、背中をツンツンされて、背筋伸ばしました。

そんなこんなで40分ほど座禅しました。途中トイレ休憩があります。この際も、小股で、座禅上の前を回るという作法があります。

体験してみて、感じた事は、40分は、全く長く感じず、苦痛でもなかった。もっとやってもいいくらい。だが、それ以上は冗長になるだけっぽい感じもするので40分は、程よい時間かなと思う。

初めは、隣の人とかが、気になったり、自分の姿勢が気になったり、足痛いという雑念がありましたが、やってるうちに、建物や、目の前の障子、カメムシに意識が向いて、そのうち、それらも気にならなくなっていって、自分の思考を、どんどん流していくと、半覚醒というか、心地よいトランス状態というか、緊張感と意識が残っている、夢うつつ状態というか、植物とか石ころのような感じというか、そこに存在するべくして存在する感というか、自我や価値観みたいなものが、あってないもの。ただそこに存在するだけ、それでOKじゃん感というか。言葉では言い表すのは難しいですが、そんな感じ。やってる途中、頭のこめかみから前頭部にかけて、ジンジンした。

終わったら、脳みそに湿布張ったような、スーッと感があった。(医学的にいいことなのかはわからないが)


3時頃に座禅終えて、その後4時頃まで、和尚さん的な方の法話があり、これが、また面白い。

政治家さんや、経営者やスポーツ選手の方など、メンタルきつい人達は、座禅をやりにくるという話を実話エピソードを交えてお話しして頂けたり、念、想、観をやめて自分の見方を一度捨てて、心を投げ出す。執着を手放すことで、次のものを得ることができる。刻々と変わる変化に対応して行けるということ。その他諸々、為になるお話を聞くことができ、勉強になりました。

法話が終わったら、お茶とお菓子が振る舞われます。でも、みなさん、さくさく帰る方がほとんど。あまり雑談もなく。もそもそ食べて帰路につきました。中々、有意義な時間だった。

これは、月一くらいで、やってみてもいいかなと思った。