2014年1月31日金曜日

SOL21 用の ftf を作ってみよう。

 Flashtool が無いと話が進まないのでダウンロードするべし。
http://www.flashtool.net/download.php

 http://www.flashtool.net/index.php
 やあ。
 Flashtool は X10 から Xperia Z Ultra までの Sony 製 Xperia 端末用のソフトウェアである。
 これらの端末はファームウェアを焼くために S1 プロトコルを使う。

 このプログラムはもともと SEUS や PCC が sim ファイルをダウンロードして焼くときに使われていたものである。
 時々 sim ファイルにバンドルされている FTF (Flash Tool Firmwares) である。
 Flashtool のコアであり名前の由来である。

 Flashtool は BLU アイコンを使って簡単にブートローダーをアンロックできる。

 Flashtool がデバイスを認識していれば焼くだけではなくブートローダーのアンロックもできる。
 唯一必須なのは焼く対象となるデバイスの FTF ファイルを持つことである。

 なぜ Flashtool を使う必要があるのか。
 ブートローダーをアンロックするとソニー公式のツールは動作しないためである。
 ソニー公式のツールはダウングレードは出来ずアップグレードしか出来ないのである。
 しかし Flashtool を使えば必要な FTF ファイルを選択して焼くことが出来る。
 (これによると多くの root シナリオが利用可能な暗示カーネルのみ利用するパッチを適用した root を取得して適切なカーネルでダウングレードすることが出来る。)

 ブーロドーダーのアンロックをするのか。
 このプロセスは CyanogenMod ROM などのカスタムロムを焼けるようになる。
 あなたの Xperia デバイスに CyanogenMod をもたらすために Free Xperia Project を訪問することをお勧めします。
https://sites.google.com/site/projectfreexperia/

 Flashtool に認識されれば他の多くの機能を使用することが出来るようになる。
 1. root 取得
 2. recovery, busybox, custom kernels のインストール
 3. /system/apps のアプリを削除(文鎮と化すので何をしているのか理解できなければデフォルトリストを変更しないこと)
 4. dalvik キャッシュクリア
 5. 最適化(Just-In-Time V2 のインストール)
 6. カスタマイズ (Flashtool custom/apps のフォルダで見つけたアプリ)
 7. デバイス上の任意のテキストファイルの編集
 8. 新しいブランドの立ち上げ


 ということらしい。
 いろいろ出来るツールなんだな。








 ftf を一回作ってみたけど SOL21_9.1.D.0.401_au.ftf ファイルが検索しても見つからなかったのでやり方を間違えたのかなと思ってもう一回作ってみようとすると This bundle name already exists エラーが発生。
 どこかに ftf ファイルがあるはずだと探してみたら FlashTool.app 本体に入っていた。
/Applications/FlashTool.app/Contents/MacOS/firmwares

 じゃあどう使うのかと思ったら Flashmode に入れば選択できるようになっていた。
 でも同一名称で作り直したい場合はどうするんだろう。

 とりあえず作った ftf ファイルを焼いてみよう。






 これで買った時の状態に戻れば正解なのだが実は Wipe のチェックをすべて外していたので設定とかが残っている状態で焼けた。
 これでバックアップとリカバリが出来たので時々バックアップしておけば簡単に元に戻すことができるぞ。

Sony Bridge for Mac 3.6(3602) を使って SOL21 を初期化してみる。


 特に問題はないけれど最近いじっていない SOL21 を初期化する事にした。
 何はともあれバックアップバックアップ。
 カメラで撮った写真と動画しかないので Sony Bridge for Mac を使ってインポートして終了。

 初期化自体はちょっと前にやったことがあるので問題はない。
 それにしても機種選択画面で Xperia VL と書かれているのに (SOL21) がないのは何か理由があるのだろうか。SOL22 は SOL22 だけのそのまんまだし。
 あったりなかったりで規則性ってものが分からないのは Xperia に詳しくないからだろうな。
















 初期化が終わったようなので本体設定をするか。

 ここからは ftf 作成とか root とかをやる予定だけどお昼ご飯が先。


2014年1月8日水曜日

android を build して

touch: out/target/common/docs/api-stubs-timestamp: No space left on device
make: *** [out/target/common/docs/api-stubs-timestamp] Error 45

$ df
Filesystem    512-blocks      Used Available Capacity  iused   ifree %iused  Mounted on
/dev/disk0s2   235298960 220472000  14314960    94% 27622998 1789370   94%   /
devfs                370       370         0   100%      640       0  100%   /dev
map -hosts             0         0         0   100%        0       0  100%   /net
map auto_home          0         0         0   100%        0       0  100%   /home

/dev/disk1s2    83214256  83213680       576   100% 10401708      72  100%   /Volumes/android

 まさかのディスク容量不足。
 悲しい結果でしたw

 どこからやり直せばいいのかな。

2014年1月7日火曜日

Initialize

http://source.android.com/source/building-running.html#initialize

 envsetup.sh を使って環境を初期化をする。
 次のようなコマンドラインで実行する。詳しくはシェルのマニュアルを参照のこと。
$ source build/envsetup.sh
$ . build/envsetup.sh

 という事でやってみた。
$ source build/envsetup.sh
including device/asus/deb/vendorsetup.sh
including device/asus/flo/vendorsetup.sh
including device/asus/grouper/vendorsetup.sh
including device/asus/tilapia/vendorsetup.sh
including device/generic/armv7-a-neon/vendorsetup.sh
including device/generic/mips/vendorsetup.sh
including device/generic/x86/vendorsetup.sh
including device/lge/hammerhead/vendorsetup.sh
including device/lge/mako/vendorsetup.sh
including device/samsung/manta/vendorsetup.sh
including sdk/bash_completion/adb.bash
$


 Choose a Target

 以下のように lunch へ引数を渡して build したいターゲットを選ぶ。
$ lunch aosp_arm-eng

 上の例は全てのデバッグが有効となっているエミュレータの完全な build を指す。
 lunch に引数なしで実行した場合はターゲットを選択するメニューが表示される。
 全てのビルドターゲットは BUILD-BUILDTYPE となる。
 BUILD は特定の機能の組み合わせを参照したコードネームとなる。
 部分的なリストは以下の通り。
 そして BUILDTYPE は次のいずれか。
 実際のハードウェア上で実行する方法については Building for Devices を参照のこと。
http://source.android.com/source/building-devices.html


 やってみたが何がなんだか分からない状態。
$ lunch aosp_arm-eng

============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=4.4.3.2.1.000.000
TARGET_PRODUCT=aosp_arm
TARGET_BUILD_VARIANT=eng
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a
TARGET_CPU_VARIANT=generic
HOST_ARCH=x86
HOST_OS=darwin
HOST_OS_EXTRA=Darwin-13.0.0-x86_64-i386-64bit
HOST_BUILD_TYPE=release
BUILD_ID=OPENMASTER
OUT_DIR=out
============================================

$


 Build the Code

 make コマンドで build する。 
 GNU make の -jN は引数を指定して並列タスクを処理する事ができる。

$ make -j2

 さてさて build が終わるのはいつだろうか。

 ふと気がついたがフルスペックの build をしているのではないのか。

2014年1月6日月曜日

Building the System

http://source.android.com/source/building-running.html

 Android のソースツリーを build する手順はマスターを含めて全てのブランチに適用する。


 Choosing a Branch
http://source.android.com/source/building-running.html#choosing-a-branch

 build 環境の要件のいくつかはコンパイル予定のソースコードのバージョンによって決まる。
 コードネームやタグや build 番号を見てブランチを決める。
 なおリポジトリを初期化するときやマスターと呼ばれる最新のソースコードをダウンロードするときにはブランチの選択を省略することが出来る。
 ブランチを選んだら以下の適切な指示に従って build 環境をセットアップする。
 基本的な build コマンドの順序は以下の通り。


Using Authentication

 認証の使用
http://source.android.com/source/downloading.html#using-authentication

 デフォルトでは Android ソースコードへのアクセスは匿名である。
 サーバ保護のため各 IP アドレスごとに使用量の制限をかけてある。


 特に認証を使う予定はないのですきっぷすきっぷ。

 いよいよ次は build だ。

Downloading the Android Source Tree

 デフォルトのマニフェストで指定したリポジトリから作業ディレクトリに Android のソースツリーをプルダウンします。

$ repo sync

 Android のソースファイルはプロジェクト名で作業ディレクトリにダウンロードされるが完了するまでに相当な時間がかかる。

 repo sync や他のコマンドについては開発セクションを参照のこと。
http://source.android.com/source/developing.html



 放置しておいたらいつの間にか終わっていた。
Syncing work tree: 100% (420/420), done.

Downloading the Source

http://source.android.com/source/downloading.html

 Android のソースツリーは Google がホストしている Git リポジトリにある。
 ここでは特定の Android のソースツリーをダウンロードする方法を説明する。


 Installing Repo

 Repo は Git リポジトリにあるアンドロイドのコンテキストを簡単に作業することが出来るツールである。
 詳細は開発セクションを参照のこと。

 1. ホームディレクトリに bin ディレクトリがあり PATH を通してあることを確認する。
$ mkdir ~/bin

$ PATH=~/bin:$PATH

 2. Repo ツールをダウンロードして実行権限を付与する。
$ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 23618  100 23618    0     0  15634      0  0:00:01  0:00:01 --:--:-- 15641
$ chmod a+x ~/bin/repo


 Initializing a Repo client

 Repo をインストールしたら Android のソースリポジトリにアクセスできるようにクライアントを設定する。

 1. 空のディレクトリを作成して作業ファイルの保存先にする。この保存先は大文字小文字を区別できるファイルシステムであること。
$ cd /Volumes/ASOP/
$ mkdir wk
$ cd wk
$ pwd

/Volumes/ASOP/wk

 2. 最新バージョンをダウンロードするために repo init を実行する。マニフェストの URL を指定する必要がある。Android のソースが含まれている様々なリポジトリは作業ディレクトリ内に配置する。
$ repo init -u https://android.googlesource.com/platform/manifest

 3. プロンプトが表示されたら名前とメールアドレスを入力して repo を設定する。Gerrit code-review ツールを使うにはメッセージを受信できる登録済みの Google アカウントが必要となる。

 repo init の成功時は最後に作業ディレクトリが初期化されたメッセージを表示する。
 クライアントディレクトリ .repo にはマニフェストなどのファイルが保存される。
$ repo init -u https://android.googlesource.com/platform/manifest

Your identity is: mushi.suzu <mushi.suzu@gmail.com>
If you want to change this, please re-run 'repo init' with --config-name

repo has been initialized in /Volumes/ASOP/wk



Master branch

 Intel Mac OS X 環境で最新ソースを build するには Xcode 4.5.2 とコマンドラインツールが必要となる。


Next: Download the source

 いよいよ次はソースコードのダウンロードだ。

Creating a case-sensitive disk image

 OS X 付属のディスクユーティリティを使って大文字と小文字を区別したファイルシステムを作る事が出来る。
https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/hdiutil.1.html

 build を完了させるには最低でも 25G は必要であるので今後のことを考えると容量は大きいほど良さそう。
 しかし容量を大きくすると SSD 自体の容量が厳しくなるので「スパースディスクイメージ」機能を用いる。この機能を使うと無駄なスペースをディスクとして使用しなくなるので必要なディスク容量だけを使うことになる。
 あと忘れないようボリュームフォーマットに「大文字小文字を区別」と「ジャーなリング」を選択しておく。

 サイトに記載されているコマンドをそのままターミナルで実行してみる。
$ hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 40g ~/android.dmg
created: /Users/xxxxx/android.dmg.sparseimage

 無駄なスペースを使っていないかどうかを調べるために 40G のディスクイメージが使用しているディスク容量を調べてみると 163M 程度になっている。これなら問題なさそうだ。
$ ls -sk android.dmg.sparseimage 
163844 android.dmg.sparseimage

 この作成したディスクイメージ android.dmg.sparseimage をマウントすることで Android の開発に必要なドライブとして機能する。
$ hdiutil attach ~/android.dmg.sparseimage  -mountpoint /Volumes/android
/dev/disk1           GUID_partition_scheme          
/dev/disk1s1         EFI                            
/dev/disk1s2         Apple_HFS                       /Volumes/android

 都度マウントをするのは面倒なので ~/.bash_profile へ追加しておこう。

 サイトはなんで function にしてあるんだろう。
# mount the android file image
function mountAndroid { hdiutil attach ~/android.dmg -mountpoint /Volumes/android; }

Setting up a Mac OS X build environment

 Mac OS X での build 環境を整える。
http://source.android.com/source/initializing.html

 OS X のデフォルトインストールだとファイルシステムは大文字小文字を区別しない。
 Git リポジトリはこのファイルシステムをサポートしていないため git status などは異常な動作をする。
 常に大文字小文字を区別するファイルシステム上で Android Open Source Project のソースファイルを使う事をお勧めする。
 なおこのファイルシステムは次に説明するディスクイメージを使う事で比較的簡単にできる。
 適切なファイルシステムを使えるようになると最新の OS X 環境で master ブランチを構築することが簡単になるがちょっと前のブランチにはいくつかのツールと SDK が必要になってくる。

 ということだそうだ。
 最新のブランチを build したいので次の手順というのを進めて行けば大丈夫そうだな。

2014年1月5日日曜日

Initializing a Build Environment & Choosing a Branch

http://source.android.com/source/initializing.html

 ここではローカル環境を整備するらしい。
 ローカル環境っていうのは目の前で作業をしている MacBook Air のことだな。

 ソースコードは 8.5G 程度らしいので不要な ipsw などを削除して空き容量を増やそうっと。
 駄目なら外付け HDD で対応だ。
 フルセットの build だと 100G は必要だってさ。

 ソースコードをダウンロードしている間は Life of a Patch を見ておこっと。
http://source.android.com/source/life-of-a-patch.html

 Choosing a Branch
 ブランチを選べ!ということか。
 Nexus5 に入っているビルド番号は KOT49H なのでこれにしたい。
 Codenames, Tags, and Build Numbers を見たら最新だったw
http://source.android.com/source/build-numbers.html

 次はいよいよ来たぞというタイトルだな。
 Setting up a Mac OS X build environment

Downloading and Building

 Downloading and Building
http://source.android.com/source/building.html

 必要となるツールを確認。

$ python -V

Python 2.7.5

$ make -version
GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for i386-apple-darwin11.3.0

 JDK は以下からダウンロードしてインストールした。
http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

$ git --version
git version 1.8.3.4 (Apple Git-47)

 ざっと見るとツールは大丈夫そうだ。
 ただ MacBook Air の SSD ではディスク容量が厳しいかも。

 あと気になるのはファイル名の大文字小文字の区別をしないところなので解決方法を調べてみよう。

OS X って大文字小文字の区別が無かったのか

$ uname -a

Darwin xxxxx-no-MacBook-Air.local 13.0.0 Darwin Kernel Version 13.0.0: Thu Sep 19 22:22:27 PDT 2013; root:xnu-2422.1.72~6/RELEASE_X86_64 x86_64

$ mkdir Aa
$ mkdir aa
mkdir: aa: File exists

 新年そうそうに衝撃的な事実を知った。
  Android のビルド方法を調べているときにあるサイトで書かれていたので試してみた結果が上の File exists だったりする。
 ほんとびっくりした。

 とりあえず先に進もう。

MELSECNET/HのリモートI/O局経由のMODBUS(R)通信について

http://fa-faq.mitsubishielectric.co.jp/faq/show/13661  別ネットワークの先にぶら下げるってどういうことだろう。