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
|
Posted at 15:59
in computer