この記事を作成するにあたって試行錯誤した備忘録

ボツ案 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