NetWalkerのカーネルとかをx86 Ubuntuでクロスコンパイル

昨日のカーネルビルド日記*1が予想外に好評で、koができた!ガンが治った!背が伸びた!恋人が出来た!と喜びの声をごく一部からいただいたので、クロス編もまとめておく。


ロスコンパイラは毎度お馴染みCodeSourcery*2の"IA32 GNU/Linux TAR"を使う。bit.lyしてあるのがtarball。

$ wget http://bit.ly/2Qg8KX
$ sudo tar jxvf arm-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 -C /opt


展開した先のarm-2009q3/binにツールチェーンができるので、パスを通すと同時に環境変数設定。クロスコンパイルの場合、このARCHとCROSS_COMPILEを設定しておく。arm-none-linux-gnueabi-は/opt/arm-2009q3/binをみると分かるとおり、クロスコンパイラのプレフィックス

$ export PATH=/opt/arm-2009q3/bin:$PATH
$ export ARCH=arm
$ export CROSS_COMPILE=arm-none-linux-gnueabi-


ワークディレクトリを作って、NetWalkerの/proc/config.gzとaraneo14のカーネルソースコードを拾ってくる。

$ cd work/directory
$ scp netwalker:/proc/config.gz .
$ wget http://bit.ly/2BGszN


ソースコードとconfig.gzを展開する。例によって、jaunty-armというディレクトリに展開されるので、NetWalker上で行ったのと同様に。

$ tar zxvf linux-fsl-imx51_2.6.28-15.50fsl1araneo14.tar.gz
$ zcat config.gz > jaunty-arm/arch/arm/configs/netwalker_defconfig
$ cd jaunty-arm


.configを作成。ついでにMakefileの EXTRAVERSION を -15-araneo に書き換える。

$ make netwalker_defconfig
$ cp Makefile Makefile.orig
$ cat Makefile.orig | sed 's/EXTRAVERSION = .10/EXTRAVERSION = -15-araneo/' > Makefile
$ diff -up Makefile.orig Makefile


ビルド。-j2でCPUコア数並列。

$ time make -j2
real    4m58.183s
user    7m25.310s
sys     0m52.770s


ゆっくりできません。確認。

$ modinfo fs/fuse/fuse.ko 
filename:       fs/fuse/fuse.ko
alias:          char-major-10-229
license:        GPL
description:    Filesystem in Userspace
author:         Miklos Szeredi 
depends:        
vermagic:       2.6.28-15-araneo preempt mod_unload modversions ARMv7 


NetWalkerに転送、ログインして、insmod。

$ scp fs/fuse/fuse.ko netwalker:~/
$ ssh netwalker
$ sudo insmod ./fuse.ko
[sudo] password for az: 

$ lsmod                                                           
Module                  Size  Used by
fuse                   52892  0 
ks79xx_sdio            60648  0 


とことで。


メモ。謎の暗号。Max 5MB。NANDは6MB取ってるけど、boot loaderが -l 500000。

$ sudo /usr/sbin/flash_eraseall /dev/mtd3
$ sudo /usr/sbin/nandwrite -p /dev/mtd3 zImage
$ sudo /usr/sbin/nandverify -o -b /dev/mtd3 zImage