この記事を作成するにあたって試行錯誤した備忘録
ボツ案 1 Ubports 公式インストーラーでROM焼き
まず、Nexus 5にUbuntu Touchを焼いていく。
Ubuntu Touchを使う方法はいろいろあるが、一番簡単なのが公式インストーラーを使う方法
起動することはできたが、以下のエラーが出てトンネリングデバイスを追加できなかった。
add tunnel ip6tnl0 failed: No such device
https://forums.raspberrypi.com/viewtopic.php?t=32684
でmodprobeを使えば有効化できると書いてあったので試みたが、カーネルにip6_tunnel.ko
が存在しないので無理だった。
ボツ案 2 カーネルモジュールのビルドをする
いろいろ漁っていると、Ubuntu TouchのNexus 5(hammerhead)のカーネルソースを見つけたのでip6_tunnel.ko
をビルドしてみることにした。
こちらの記事を拝借して概要だけ説明する。
ちなみにUbuntu Touchは端末に焼いてある前提です。
ソースをcloneする
以下コマンドを実行
git clone https://github.com/ubports/android_kernel_lge_hammerhead --depth 1
config抜き出し&書き換え
以下コマンドで.configファイルをNexus 5から抜き出し、
adb pull /proc/config.gz
gunzip config.gz
mv config .config
.configのなかの
# CONFIG_IPV6_TUNNEL is not set
の行を見つけて
CONFIG_IPV6_TUNNEL=m
に書き換える。
完成した.configを先程pullしたandroid_kernel_lge_hammerheadディレクトリに移動する。
mv .config ./android_kernel_lge_hammerhead
ndkインストール
ココからandroid-ndk-r9dをダウンロードして、toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/binにパスを通しておく。
適当に一番古いバージョンをダウンロードしたが、android_kernel_lge_hammerhead/Documentation/Changesに書いてあるものと一致していればOKらしい
ビルド実行
android_kernel_lge_hammerheadディレクトリに移動する。
cd ./android_kernel_lge_hammerhead
以下コマンドを実行して環境変数を設定しておく。
export ARCH=arm
export CROSS_COMPILE=arm-linux-androideabi-
以下コマンドでビルド
make modules
ちなみに以下のコマンドでMakefileに定義してあるエントリを一覧できる
(他のコマンドが何に使うのかわからない. . .)
grep "^[a-zA-Z\-]*:" Makefile | grep -v "grep" | sed -e 's/^/make /' | sed -e 's/://'
正常に終了すると、net/ipv6/ip6_tunnel.ko
が出力されるのでfileコマンドでみてみる。
file net/ipv6/ip6_tunnel.ko
ここで問題発生。
vermagicがuname -r
で表示される情報と同じである必要があるが、3.4.0-cyanogenmod-の後の文字列がことなる。
http://atelier-orchard.blogspot.com/2013/10/invalid-module-format.html
や
https://blogger.tempus.org/2009/05/linux-kernel-version-dirty.html
を参考になんとかvermagicを合わせるも、今度は別のエラーがでて断念。
ボツ案 3 カーネルのビルドをする
ならカーネルごとビルドすれば良いのではと思いやってみる。
以下コマンドを実行
make
10分くらいでarch/arm/boot/zImage-dtb
に出力される。
これをfastboot boot arch/arm/boot/zImage-dtb
で焼くと. . . . .
Nexus 5がロゴ画面のまま起動しなくなったorz