Jul 27, 2008

自宅サーバのカーネル64bit化

CLFSのドキュメントを参考にクロスコンパイル環境を構築し、カーネルのみ64bit化した。
環境は以下の通り。
  • ベースのOS環境はLFS(SVN-20070304版)
  • linux-2.6.26
  • binutils-2.17
  • gcc-4.1.2
※なぜか、--prefixで/usr/local/crossを指定しているのに、/usr/local/cross/usr/local/crossにインストールされてしまうので、都度移動させた。H8用のクロスコンパイル環境を作った時はそんなこと無かったのに。
準備
export DESTDIR=/usr/local/cross
unset CFLAGS
unset CXXFLAGS
PATH=${DESTDIR}/bin:/bin:/usr/bin
export PATH
export XTARGET="x86_64-unknown-linux-gnu"
export BUILD64="-m64"
cd /sources
mkdir build64
cd build64
bin-utils-2.17
bzip2 -dc ../binutils-2.17.tar.bz2 | tar xf -
mkdir binutils-build
cd binutils-build
../binutils-2.17/configure --prefix=${DESTDIR} \
--host=${MACHTYPE} --target=${XTARGET} \
--disable-nls --enable-shared --enable-64-bit-bfd --disable-multilib
make configure-host
make
make install
cd ..
gcc-4.1.2
bzip2 -dc ../gcc-4.1.2.tar.bz2 | tar xf -
mkdir gcc-build
cd gcc-build
../gcc-4.1.2/configure --prefix=${DESTDIR} \
--host=${MACHTYPE} --target=${XTARGET} --disable-multilib \
--disable-nls --disable-shared \
--disable-threads --enable-languages=c
make all-gcc
make install-gcc
cd ..
カーネル
bzip2 -dc ../linux-2.6.26.tar.bz2 | tar xf -
cd linux-2.6.26
export CC="${XTARGET}-gcc"
export CXX="${XTARGET}-g++"
export AR="${XTARGET}-ar"
export AS="${XTARGET}-as"
export RANLIB="${XTARGET}-ranlib"
export LD="${XTARGET}-ld"
export STRIP="${XTARGET}-strip"

make ARCH=x86_64 CROSS_COMPILE=${XTARGET}- menuconfig
make ARCH=x86_64 CROSS_COMPILE=${XTARGET}-

※ユーザランドのプログラムは全部32bitアプリなので、32bit互換モードオプションを忘れずに。
Executable file formats / Emulations --->
 IA32 Emulation

freeを実行してみると、リニアに4GBのメモリが使えることを確認できた。めでたしめでたし。
# free
             total       used       free     shared    buffers     cached
Mem:       3972264     112452    3859812          0       4072      47540
-/+ buffers/cache:      60840    3911424
Swap:      1004052          0    1004052
Posted at 15:59 in computer

Jul 23, 2008

GAINER

今更ながら、GAINERで遊んでみようかと思いGAINER I/Oモジュールを購入。
これだけのために、PSoCの開発環境を整備しようとは思わなかったので、キットを購入することに。
載ってる部品が大したことない割には\7,500とちょい高。\3,500位でいいんじゃない?
足が片方1ピン足りなかったけど、in側は未使用ピンがあるので、とりあえずは使えるから許してあげよう。
Posted at 22:34 in embedded

Jul 21, 2008

自宅サーバUpgrade

自宅サーバが異音を発していたのでCPU/マザー/メモリを新調。
今までPentiumIII/1GHz Dualという骨董品だったので、思い切ってCore2Quad(Q6600)に変更。
ARAID99のPATA版を使っているので、レガシーデバイスサポートのあるマザーボードとして、IntelのDG33FBを選択。
当初の目論見として、ARAID99はPATA->SATA変換モジュール経由で接続、DVD-ROMドライブをPATA接続と考えていたが、ARAID99に変換モジュールを付けるだけのスペースが無かった。
ARAID99はPATA接続としたが、もう一台のHDDをSATA接続すると、そちらの優先度が高くなってしまうので、デバイス名の問題からこれもPATA接続することに。
結局、DVD-ROMはPATA->SCSI変換モジュール経由でSCSI接続。ブートには使えないが、使うことがほとんど無いので、とりあえずこれで凌ぐことに。(DDS3のテープが接続されているので、SCSIは元々ある)

元の環境だと440GXという太古のチップセットでBigDrive非対応のため、外付けUltraATA100のI/F経由でARAID99を接続し、/bootのみ内蔵のディスクを使用して起動していた。
ARAID99側のディスクのMBRにはブートローダが書き込まれていなかったので、grub-installすると「そのディスクはBIOSから認識されてないからダメ by grub-0.97」と怒られる。
仕方が無いので、急遽GRUB2(1.96)に乗り換え。こちらは無事に起動できたので、ひとまずは移行完了。

あとは、64bitビルド環境を構築してカーネルを64bit化しないと。

DG33FBメモ
  • G33+ICH9なので、別途PATAコントローラとして「Marvell 88ES6101」が載っている。
  • カーネルの認識順は「ahci->pata_marvell」なので、SATAのHDDを接続すると、PATAのHDDはどんどん後ろにズレてゆく。
  • Kernel2.6.26では問題無いが、一部カーネルでは「ACPI: Assume Root Bridge [\_SB_.PCI0] bus is 0」辺りで停止する場合あり。
    → カーネルの起動オプションで「pci=nommconf」を指定すると回避可能。
    Posted at 13:25 in computer