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 Szeredidepends: 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