Jul 27, 2008
自宅サーバのカーネル64bit化
CLFSのドキュメントを参考にクロスコンパイル環境を構築し、カーネルのみ64bit化した。環境は以下の通り。
- ベースのOS環境はLFS(SVN-20070304版)
- linux-2.6.26
- binutils-2.17
- gcc-4.1.2
| 準備 |
|
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
|
Jul 23, 2008
GAINER
今更ながら、GAINERで遊んでみようかと思いGAINER I/Oモジュールを購入。これだけのために、PSoCの開発環境を整備しようとは思わなかったので、キットを購入することに。
載ってる部品が大したことない割には\7,500とちょい高。\3,500位でいいんじゃない?
足が片方1ピン足りなかったけど、in側は未使用ピンがあるので、とりあえずは使えるから許してあげよう。
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」を指定すると回避可能。