この記事を作成するにあたって試行錯誤した備忘録
ボツ案 1 Ubports 公式インストーラーでROM焼き
まず、Nexus 5にUbuntu Touchを焼いていく。
Ubuntu Touchを使う方法はいろいろあるが、一番簡単なのが公式インストーラーを使う方法
起動することはできたが、以下のエラーが出てトンネリングデバイスを追加できなかった。
add tunnel ip6tnl0 failed: No such devicehttps://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 1config抜き出し&書き換え
以下コマンドで.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_hammerheadndkインストール
ココから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 カーネルのビルドをする
ならカーネルごとビルドすれば良いのではと思いやってみる。
以下コマンドを実行
make10分くらいでarch/arm/boot/zImage-dtbに出力される。
これをfastboot boot arch/arm/boot/zImage-dtbで焼くと. . . . .
Nexus 5がロゴ画面のまま起動しなくなったorz