2012年7月22日日曜日

IS12SのKernel Moduleをビルドする

XPERIA acro HD KDDI IS12Sのカーネルモジュールをビルドしたので備忘録。
CentOS 6でやってます。Debianとかもで大丈夫かと。

今回作ったもの
・ nls_utf8.ko
・ ntfs.ko
※IS12Sではcifs, slow-work, tunなど欲しいものは意外と組み込み済みだったります。

用意するもの


クロスコンパイラの導入

ウチでは /optにandroid-ndk-r5c-linux-x86.tar.bz2を展開しました。
# cd /opt
# tar jxvf ~huhka/android-ndk-r5c-linux-x86.tar.bz2

ソースの準備

ウチではホームディレクトリ以下に android/kernel/6_0_D_0_274を作って展開しました。
※基本的には展開場所はどこでも大丈夫
$ mkdir -p /home/huhka/android/kernel/6_0_D_0_274
$ cd 6_0_D_0_274
$ tar jxvf ../6_0_D_0_274_tar.bz2

実機のカーネルバージョンにあわせるためパッチあて
パッチあて対象:kernel/arch/arm/configs/fuji_hayate_defconfig
*** fuji_hayate_defconfig.org 2012-06-13 20:00:33.000000000 +0900
--- fuji_hayate_defconfig 2012-07-15 23:37:22.000000000 +0900
***************
*** 36,42 ****
CONFIG_LOCK_KERNEL=y
CONFIG_INIT_ENV_ARG_LIMIT=32
CONFIG_CROSS_COMPILE=""
! CONFIG_LOCALVERSION="-307005"
# CONFIG_LOCALVERSION_AUTO is not set
CONFIG_HAVE_KERNEL_GZIP=y
CONFIG_HAVE_KERNEL_LZMA=y
--- 36,42 ----
CONFIG_LOCK_KERNEL=y
CONFIG_INIT_ENV_ARG_LIMIT=32
CONFIG_CROSS_COMPILE=""
! CONFIG_LOCALVERSION="-307005+"
# CONFIG_LOCALVERSION_AUTO is not set
CONFIG_HAVE_KERNEL_GZIP=y
CONFIG_HAVE_KERNEL_LZMA=y

ビルド

まずは.configを作る
$ ARCH=arm CROSS_COMPILE=/opt/android-ndk-r5c/toolchains/arm-eabi-4.4.0/prebuilt/linux-x86/bin/arm-eabi- make fuji_hayate_defconfig
※実際は1行で改行なし

次はmenuconfig
$ ARCH=arm CROSS_COMPILE=/opt/android-ndk-r5c/toolchains/arm-eabi-4.4.0/prebuilt/linux-x86/bin/arm-eabi- make menuconfig
※実際は1行で改行なし

File systems → Native language support → NLS UTF-8 を"M"(モジュール)に
File systems → DOS/FAT/NT Filesystems → NTFS file system support を"M"(モジュール)に
NTFS file system support配下のものも選択
・ NTFS debugging support
・ NTFS write support

モジュール個別にビルド
$ ARCH=arm CROSS_COMPILE=/opt/android-ndk-r5c/toolchains/arm-eabi-4.4.0/prebuilt/linux-x86/bin/arm-eabi- make prepare
$ ARCH=arm CROSS_COMPILE=/opt/android-ndk-r5c/toolchains/arm-eabi-4.4.0/prebuilt/linux-x86/bin/arm-eabi- make scripts/mod/
$ ARCH=arm CROSS_COMPILE=/opt/android-ndk-r5c/toolchains/arm-eabi-4.4.0/prebuilt/linux-x86/bin/arm-eabi- make M=fs/nls/
$ ARCH=arm CROSS_COMPILE=/opt/android-ndk-r5c/toolchains/arm-eabi-4.4.0/prebuilt/linux-x86/bin/arm-eabi- make M=fs/ntfs/
※実際は各1行で改行なし

nls_utf8.koとntfs.koができたので端末に持って行って読み込ませればOK♪
# insmod nls_utf8.ko
# insmod ntfs.ko

koを読み込んだ時に
insmod: init_module 'nls_utf8.ko' failed (Exec format error)
などとエラーになったら、dmesgしてみましょう♪

0 件のコメント:

コメントを投稿