NEXUS 7 自分でモジュールをbuildするメモ

カーネルの更新がある度に必要になる内容と思われるので、
モジュールのビルド方法をメモしておきます。

主にCIFSのモジュールについて書いてます。
(純正で含まれてないので…)

Nexus 7 のカーネルをビルド、あとCIFSとか。 - y-log.net
http://y-log.net/archives/2012/07/19/0555
ここを参考にしました。

カーネルソースからCIFSのモジュールを作成します。

1.prebuiltツールとsourceの準備

/work$ git clone https://android.googlesource.com/platform/prebuilt
/work$ git clone https://android.googlesource.com/kernel/tegra.git kernel/grouper

/work$ cd kernel/grouper
/work/kernel/grouper$ git checkout android-tegra3-grouper-3.1-jb-mr1-fr

https://android.googlesource.com/kernel/tegra/ から最新のTagをチョイス

2.defconfigの準備

端末上の/proc/config.gzをpullするか、boot.imgから抜き出します。

boot.imgからconfigを抜き出す場合は、
https://developers.google.com/android/nexus/images#nakasijop40d から、
必要なイメージをダウンロードして、boot.imgを取り出します。

あとは、カーネルソース上にある extract-ikconfig を使って展開します。

$ scripts/extract-ikconfig boot.img > arch/arm/configs/n7_defconfig

3.環境変数を設定

カーネルをbuildするのに必要な環境変数を設定します。
/work 配下で prebuilt を git clone したことを想定してます。

$ export PATH=/work/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:$PATH
$ export ARCH=arm
$ export SUBARCH=arm
$ export CROSS_COMPILE=arm-eabi-

4.configを設定

defconfigで.configの作成と、その後のmenuconfigでの編集をします。

$ make n7_defconfig
$ make menuconfig

今回は CIFS をモジュール化させるだけなので、以下の設定だけしてます。

モジュールは、使うカーネルと Version Magic を合わせないとload出来ない
ので、Local version を設定します。
(Version Magicは 端末上でuname -aの結果から確認出来ます。下はg22b4fcdの例)

・General setup > (-g22b4fcd) Local version - append to kernel release

合わせてCIFS support と文字コードUTF8 を有効に設定します。(モジュールとしてbuildするので<M>にします。)

・File systems > Network File Systems > CIFS support (advanced network filesystem, SMBFS successor)
・File systems > Network File Systems > Native language support > NLS UTF-8

5.setlocalversionを変更して「+」表示をスルーさせる。

git commitなどの影響で、Version magicに+マークが付いてしまうので、
それを回避させるために、echo "+"をコメントアウトして、Local versionの
設定を反映させます。(正当法ではないですが。。)

# git diff
diff --git a/scripts/setlocalversion b/scripts/setlocalversion
index 4d40384..de03f63 100755
--- a/scripts/setlocalversion
+++ b/scripts/setlocalversion
@@ -52,7 +52,7 @@ scm_version()
                        # If only the short version is requested, don't bother
                        # running further git commands
                        if $short; then
-                               echo "+"
+#                              echo "+"

                                return
                        fi
                        # If we are past a tagged commit (like

6.モジュールの作成

make modulesで編集した部分だけモジュールを作成します。
モジュールだけなのであっという間に出来るはず。

$ make modules

エラーがなく終われば終了。以下の場所に*.koが出力される。

./crypto/md4.ko
./fs/cifs/cifs.ko
./fs/nls/nls_utf8.ko

このファイル群を、NEXUS 7へpushして、indmod すれば完了です。

※ unameの結果貰えれば、CIFSモジュールの作成出来ますのでコメント下さい(動作保証はないですが
※ 3.1.10-g22b4fcd バージョン上げておきます。⇒CIFS-3.1.10-g22b4fcd.zip



コメントする

メールアドレスが公開されることはありません。