前のエントリに書いた通り SheevaPlug の SDHC の Read/Write 性能が非常に遅い。カーネルのバージョンを上げることで解消できるとの話があり、カーネルバージョンアップを試してみることにした。
Linux kernel 2.6.30-rc1 から SheevaPlug を使うことができる。今回は kernel.org で公開されている最新版 2.6.30-rc5 を使うことにした。
カーネルのコンパイル方法については以下にまとめられている。基本的にはこれに従ってコンパイルすれば良い:
http://plugcomputer.org/plugwiki/index.php/Compiling_Linux_Kernel_for_the_Plug_Computer
$ make ARCH=arm kirkwood_defconfig
$ make ARCH=arm menuconfig
SDIO 関係の patch を当てておく:
$ patch -p1 < mvsdio.patch
この patch は現時点で以下から手に入る:
http://svn.nslu2-linux.org/svnroot/optware/trunk/sources/kernel-modules/kirkwood/mvsdio.patch
せっかくなので ext4 や btrfs など色々と入れてみた。カーネル本体が大きくなりすぎると uImage 領域のパーティションを拡張する必要が出てくるのでモジュールを多めにした。
$ make ARCH=arm CROSS_COMPILE=~/SheevaPlug_tools/LinuxHost/gcc/bin/arm-none-linux-gnueabi- uImage
$ make ARCH=arm CROSS_COMPILE=~/SheevaPlug_tools/LinuxHost/gcc/bin/arm-none-linux-gnueabi- modules
ARCH や CROSS_COMPILE を指定するところが重要。
u-boot で以下の設定をする:
Marvell>> setenv mainlineLinux yes
SheevaPlug の標準カーネルで立ち上げるときにこれが yes になっていると立ち上がらないので注意。
Marvell>> setenv arcNumber 2097
Marvell>> saveenv
Marvell>> reset
添付のカーネルでは mtdparts で nand_mtd を使ってパーティションを指定していたが、2.6.30 では orion_nand になっているので注意。rootfstype も指定しておく。u-boot のコマンドラインで変更:
Marvell>> set bootargs ‘console=ttyS0,115200 mtdparts=orion_nand:0×400000@0×100000(uImage),0x1fb00000@0×500000(rootfs)rw root=/dev/mtdblock1 rootfstype=jffs2′
Marvell>> saveenv
Marvell>> reset
uname -m の結果が armv5tel になっている。
SDIO の性能が改善されたか確認してみた。
オリジナルのカーネルから 2.6.30 に変更することで、シーケンシャル write 6.9 MB/s (変更前は 600 KB/s)、シーケンシャル read 19.1 MB/s (変更前は 9.4 MB/s) となった。TS4GSDHC6 の性能から考えて問題なさそう。SheevaPlug の標準カーネルはやはり SDIO 関係に問題を抱えているようだ。
SheevaPlug を手に入れたらカーネル 2.6.30-rc1 以降にした方が良さそう。
タグ: Linux, SheevaPlug