先週末、AdoramaからNexus 7が届いた。
初めてまともに買ったNexusなので、とりあえず基礎から。
公式の方法でAOSPのSource treeからkernelをbuildしてみる。
以下、てきとーにVM上のUbuntuで。
mkdir ~/android cd ~/android git clone https://android.googlesource.com/platform/prebuilt git clone https://android.googlesource.com/kernel/tegra.git kernel/grouper cd kernel/grouper git checkout android-tegra3-grouper-3.1-jb-fr2
で、実機からconfigファイルを取り出す。
adb pull /proc/config.gz cat config.gz | gunzip > arch/arm/configs/grouper_defconfig
またはビルド済みのboot.imgから
scripts/extract-ikconfig boot.img > .config
で取り出せるらしい。
export PATH=~/android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:$PATH export ARCH=arm export SUBARCH=arm export CROSS_COMPILE=arm-eabi- make grouper_defconfig make -j4
で完成。最後の-jオプションは適当な値。
kernelはarch/arm/boot/zImageに出力される。
これでkernelはいいんだけど、
今回はとりあえずNAS用にmoduleが欲しいので、
make menuconfig
で
File systems –> Network File Systems –> CIFS support
File systems –> Native language support –> NLS UTF-8
を<M>にした。ちなみに<ESC><ESC>で前の画面に戻れる。で、
make modules
してやると
crypto/md4.ko
fs/cifs/cifs.ko
fs/nls/nls_utf8.ko
にそれぞれ出力されるが、adb pushしてsuしてinsmodすると、Exec format errorになった。
dmesgによると
dmesg | busybox grep cifs
cifs: version magic ‘3.1.10-g55edff4 SMP preempt mod_unload ARMv7 ‘ should be ‘3.1.10-g52027f9 SMP preempt mod_unload ARMv7 ‘
ということで、version magicが違うとダメらしい。
そういやOTAでアップデートあったな。
ググったらAndroidはmodprobeはダメなので、.configの数字を合わせろ、とのこと。
ここで徐にHex Editorで開いて「vermagic」で検索して「g52027f9」に書き換えたらokだった。
(CONFIG_LOCALVERSIONの値を指定したら+がついてinsmodできなくて諦めた)
で、本日の成果が以下
mkdir /sdcard/cifs mount -r -t cifs //192.168.1.x/<ShareDir> /sdcard/cifs -o username=<username>,password=<password>,iocharset=utf8
でマウント
busybox umount -l /sdcard/cifs
でアンマウント。
(-lオプションを付けないとbusyでアンマウントできないのは何故??)
欲しい人はこちらからどうぞ
3.1.10-g52027f9専用で
ピンバック: NEXUS 7 自分でモジュールをbuildするメモ » treffen @ memo