−PlayStation 3(PS3)でLinuxだワン!−
PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!PlayStaion 3(PS3)でLinuxだワン!

3.PS3用(Powerpc版)のクロスコンパイル環境構築

1 クロスコンパイルに必要なファイルを入手

☆linux-2.6.18.3      言わずと知れたLinuxカーネル
☆glibc-2.4           GNUライブラリー
☆bintuils-2.17       アセンブラ,リンカー,ローダー
☆gcc-4.1.1           GNUコンパイラー
☆zlib-1.2.3          libzライブラリー
PS3でLinuxだワン!近くのミラーサイトより入手するだワン!

2 クロスコンパイル用ディレクトリの作成とファイルの展開

PS3でLinuxだワン!今回の作業は特に断りがない限りrootユーザで作成するだワン!よって間違えると環境が壊れてしまうこともあるだワン!
PS3でLinuxだワン!Linuxのお約束ごとですが,作業に関してはすべて自己責任だワン!。細心の注意を払って作業するだワン!

まずは適当な場所にクロスコンパイル用のディレクトリを作成します。
#mkdir -v /usr/local/ps3
export CROSS=/usr/local/ps3

今回は/usr/local/ps3ディレクトリ以下に環境を構築します。
クロスコンパイルに必要なファイルをsourceディレクトリを作成してその中に保存します。
#mkdir -v ${CROSS}/source
#cd ${CROSS}/source
#tar jxvf linux-2.6.18.3.tar.bz2
#tar jxvf binutils-2.17.tar.bz2
#tar jxvf glibc-2.4.tar.bz2
#tar jxvf gcc-4.1.1.tar.bz2
#tar zxvf zlib-1.2.3.tar.gz

クロスコンパイルで作成したコンパイラーやアセンブラー,リンカー,ローダーを保存するディレクトリを作成します。
#mkdir -v ${CROSS}/cross-ps3

ヘッダーファイルやライブラリー関連を保存するディレクトリを作成します。
#mkdir -v ${CROSS}/tools-ps3

3 環境ファイルの作成

クロスコンパイル環境を使うための環境ファイルを作成します。PS3のプログラムをコンパイルするときにだけ環境を変更できるようにします。
#vi ~/.ps3rc
ファイルの内容は以下のとおり
# .ps3rc
# PS3 Cross compile Environment
#

if [ -z ${CROSS} ] ; then
CROSS=/usr/local/ps3
export PATH=${CROSS}/cross-ps3/bin:${PATH}
fi

unset CFLAGS
unset CXXFLAGS
export PS3_HOST=i386-cross-linux-gnu
export PS3_TARGET=powerpc64-unknown-linux-gnu
export PS3_TARGET32=powerpc-unknown-linux-gnu
export BUILD32=-m32
export BUILD64=-m64

環境ファイルを読み込んで環境を整えます。
#. ~/.ps3rc

4 PS3用クロスコンパイラーの作成

 1 カーネルヘッダーを準備する

これからコンパイルに必要なヘッダーファイルを「tools-ps3」ディレクトリへコピーします。
#cd ${CROSS}/source
#cd linux-2.6.18.3
#make include/linux/version.h
#mkdir -v ${CROSS}/tools-ps3/include
#cp -av include/asm-powerpc ${CROSS}/tools-ps3/include/asm
#cp -av include/{asm-generic,asm-ppc,linux} ${CROSS}/tools-ps3/include/

 2 binutilsをクロスコンパイル用に準備する

CLFS提供のパッチファイルを当ててPS3用にbinutilsをコンパイルします。
必要なパッチは次のとおり
☆binutils-2.17-posix-1.patch
☆binutils-2.17-genscripts_multilib-1.patch
PS3でLinuxだワン!CLFSのパッチはWARNINGが出るので,WARNINGが出ないように作成しなおしただワン!。気になる方はこちらよりどうぞだワン!
以下は作り直したパッチを例に話を進めます。パッチを置くディレクトリは「$CROSS/source」
#cd ${CROSS}/source/binutils-2.17
#patch -Np1 -i ../binutils-2.17-ps3-1.patch
#mkdir -v ../build-binutils-ps3
#cd ../build-binutils-ps3
#../binutils-2.17/configure --prefix=${CROSS}/cross-ps3 \
>              --host=${PS3_HOST} \
>              --target=${PS3_TARGET} \
>              --with-lib-path=/usr/local/ps3/tools-ps3/lib \
>              --disable-nls \
>              --enable-shared \
>              --enable-64-bit-bfd

エラーなく終了したらコンパイルし導入します。
#make configure-host
#make -j3
#make install

最後にlibibertyヘッダーをtools-ps3ディレクトリへコピーします。
#cp -v ../binutils-2.17/include/libiberty.h ${CROSS}/tools-ps3/include

 3 Glibcのヘッダーファイルを導入する

クロスコンパイルに必要なヘッダーファイルをコンパイルします。
confiureファイルを少し編集する必要があります。
PS3でLinuxだワン!簡略化するためにパッチファイルを作成しただワン!。必要な方はここからどうぞだワン!
#cd ${CROSS}/source/glibc-2.4
#patch -Np1 -i ../glibc-2.4-ps3-1.patch
#mkdir -v ../build-glibc-ps3
#cd ../build-glibc-ps3

NPTLサポートのためのconfig.cacheファイルを作成します。
#echo "libc_cv_forced_unwind=yes" > config.cache
#echo "libc_cv_c_cleanup=yes"    >> config.cache
#echo "libc_cv_ppc_machine=yes"  >> config.cache

powerpc64拡張用のconfig.cacheファイルを作成します。ファイルはconfig.cacheに追記します。
#echo "libc_cv_mlong_double_128ibm=yes" >> config.cache
#echo "libc_cv_mlong_double_128=yes"    >> config.cache
#echo "libc_cv_powerpc64_tls=yes"       >> config.cache
#echo "libc_cv_initfini_array=yes"      >> config.cache
#echo "libc_cv_gcc___thread=yes"        >> config.cache

コンパイルをして,ヘッダーファイルを導入します。
#../glibc-2.4/configure --prefix=${CROSS}/tools-ps3 \
>            --host=${PS3_TARGET} \
>            --build=${PS3_HOST} \
>            --disable-sanity-checks \
>            --enable-kernel=2.6.0 \
>            --with-headers=${CROSS}/tools-ps3/include \
>            --cache-file=config.cache \
>            --with-binutils=/usr/local/ps3/cross-ps3/${PS3_TARGET}/bin
#make install-headers
#cp -v bits/stdio_lim.h ${CROSS}/tools-ps3/include/bits
#touch /usr/local/ps3/tools-ps3/include/gnu/stubs.h

 4 スタティックなGCCをコンパイルする

次にGCCをスタティックでコンパイルします。
CLFS提供のパッチファイルを当ててPS3用にGCCをスタティック・コンパイルします。
必要なパッチは次のとおり
☆gcc-4.1.1-specs-1.patch
☆gcc-4.1.1-posix-1.patch
☆gcc-4.1.1-cross_search_paths-1.patch
PS3でLinuxだワン!CLFSのパッチはWARNINGが出るので,WARNINGが出ないように作成しなおしただワン!。
以下は作り直したパッチを例に話を進めます。パッチを置くディレクトリは「$CROSS/source」
また,クロスコンパイルするためにいくつかファイルを編集をする必要があります。
PS3でLinuxだワン!上記のパッチと一緒にファイルの修正を行うパッチを作成しただワン!。必要な方はここからどうぞだワン!
#cd ${CROSS}/source/gcc-4.1.1
#patch -Np1 -i ../gcc-4.1.1-ps3-1.patch
#mkdir -v ../build-gcc-ps3
#cd ../build-gcc-ps3
#../gcc-4.1.1/configure --prefix=${CROSS}/cross-ps3 \
>            --host=${PS3_HOST} \
>            --target=${PS3_TARGET} \
>            --with-local-prefix=${CROSS}/tools-ps3 \
>            --disable-nls \
>            --disable-shared \
>            --disable-threads \
>            --enable-languages=c

コンパイルをして導入します。
#make -j3 all-gcc
#make install-gcc

 5 Powerpc 32ビット版のglibcをコンパイルする

32ビット版のglibcをコンパイルします。Powerpcは32ビットと64ビットの両方をサポートするCPUなので,両方コンパイルします。
例のごとく,CLFS提供のパッチファイルを当てて,32ビット版glibcをコンパイルします。
必要なパッチは次のとおり
☆glibc-2.4-libgcc_eh-1.patch
☆glibc-2.4-localedef_segfault-1.patch
PS3でLinuxだワン!CLFSのパッチはWARNINGが出るので,WARNINGが出ないように作成しなおしただワン!。
以下は作り直したパッチを例に話を進めます。パッチを置くディレクトリは「$CROSS/source」
また,クロスコンパイルするためにいくつかファイルを編集をする必要があります。
PS3でLinuxだワン!上記のパッチと一緒にファイルの修正を行うパッチを作成しただワン!。必要な方はここからどうぞだワン!
#cd ${CROSS}/source/glibc-2.4
#patch -Np1 -i ../glibc-2.4-ps3-2.patch
#mkdir -v ../build-glibc32-ps3
#cd ../build-glibc32-ps3

NPTLサポートのためのconfig.cacheファイルを作成します。
#echo "libc_cv_forced_unwind=yes" > config.cache
#echo "libc_cv_c_cleanup=yes"    >> config.cache

コンパイルして32ビット版のglibcを導入します。
#BUILD_CC="gcc" \
> CC="${PS3_TARGET}-gcc ${BUILD32}" \
> AR=${PS3_TARGET}-ar \
> RANLIB=${PS3_TARGET}-ranlib \
> ../glibc-2.4/configure --prefix=${CROSS}/tools-ps3 \
>            --host=${PS3_TARGET32} \
>            --build=${PS3_HOST} \
>            --disable-profile \
>            --enable-add-ons \
>            --with-tls \
>            --enable-kernel=2.6.0 \
>            --with-__thread \
>            --with-binutils=${CROSS}/cross-ps3/bin \
>            --with-headers=${CROSS}/tools-ps3/include \
>            --cache-file=config.cache
#make -j3
#make install

 6 Powerpc 64ビット版のglibcをコンパイルする

ワークディレクトリを作成します。
#mkdir -v ${CROSS}/source/build-glibc64-ps3
#cd ${CROSS}/source/build-glibc64-ps3

次にキャッシュファイルと構成パラメータファイルを作成します。NPTLサポートと64ビットライブラリーの場所定義します。
#echo "libc_cv_forced_unwind=yes" > config.cache
#echo "libc_cv_c_cleanup=yes"    >> config.cache

#echo "slibdir=${CROSS}/tools-ps3/lib64" >> configparms

コンパイルして64ビット版のglibcを導入します。
#BUILD_CC="gcc" \
> CC="${PS3_TARGET}-gcc ${BUILD64}" \
> AR=${PS3_TARGET}-ar \
> RANLIB=${PS3_TARGET}-ranlib \
> ../glibc-2.4/configure --prefix=${CROSS}/tools-ps3 \
>            --host=${PS3_TARGET} \
>            --build=${PS3_HOST} \
>            --libdir=${CROSS}/tools-ps3/lib64 \
>            --disable-profile \
>            --enable-add-ons \
>            --with-tls \
>            --enable-kernel=2.6.0 \
>            --with-__thread \
>            --with-binutils=${CROSS}/cross-ps3/bin \
>            --with-headers=${CROSS}/tools-ps3/include \
>            --cache-file=config.cache
#make -j3
#make install

 7 Powerpc用のGCCをコンパイルする

次にGCCをコンパイルします。
CLFS提供のパッチファイルを当ててPowerpc用にGCCをコンパイルします。
必要なパッチは次のとおり
☆gcc-4.1.1-PR20425-1.patch
以下は作り直したパッチを例に話を進めます。パッチを置くディレクトリは「$CROSS/source」
また,クロスコンパイルするためにいくつかファイルを編集をする必要があります。
PS3でLinuxだワン!上記のパッチと一緒にファイルの修正を行うパッチを作成しただワン!。必要な方はここからどうぞだワン!
#cd ${CROSS}/source/gcc-4.1.1
#patch -Np1 -i ../gcc-4.1.1-ps3-2.patch
#mkdir -v ../build-gccfinal-ps3
#cd ../build-gccfinal-ps3
#../gcc-4.1.1/configure --prefix=${CROSS}/cross-ps3 \
>            --host=${PS3_HOST} \
>            --target=${PS3_TARGET} \
>            --with-local-prefix=${CROSS}/tools-ps3 \
>            --disable-nls \
>            --enable-shared \
>            --enable-languages=c,c++ \
>            --enable-__cxa_atexit \
>            --enable-c99 \
>            --enable-long-long \
>            --enable-threads=posix

コンパイルして導入します。
#make AS_FOR_TARGET=${PS3_TARGET}-as LD_FOR_TARGET=${PS3_TARGET}-ld
#make install

 8 powerpc用のzlibをコンパイルする

圧縮ファイルをサポートするためのライブラリーをコンパイルします。
#cd ${CROSS}/source/zlib-1.2.3
#CC="${PS3_TARGET}-gcc ${BUILD64}" \
>./configure --prefix=${CROSS}/tools-ps3 \
>      --shared \
>      --libdir=${CROSS}/tools-ps3/lib64
#make all libz.a
#make install
#cp -p libz.a ${CROSS}/tools-ps3/lib64
#${CROSS}/cross-ps3/bin/powerpc64-unknown-linux-gnu-ranlib ${CROSS}/tools-ps3/lib64/libz.a 

PS3でLinuxだワン!ここまででひとまずクロスコンパイル環境構築は終わりだワン!あとは必要に応じて機能を追加していくだワン!

前  戻る  次
PlayStaion 3(PS3)でLinuxだワン!