前提
作成するクロスコンパイル環境
ls-qlのlibc, kernelのバージョンと合わせたクロスコンパイル環境を作成する。ls-qlのlibc, kernelをコンパイルしたgccのバージョンは分からないので、ビルドエラーが出にくそうなバージョンを選ぶことにする。
ls-qlのlibcは、eglibc 2.5 (/lib/libc-2.5.soから)、kernelは、linux-2.6.22_lsp.3.0.5 (buffaloのOpen Sourceのページにあるから)、と判断。
クロスコンパイル環境をビルドする環境
makeは、3.81
gccは、4.4.5 (gcc--version : gcc (Debian 4.4.5-8) 4.4.5)
手順
eglibcのEGLIBC.cross-building に従う。
参考2.に、シェルスクリプトがあり、活用する。変更は、eglibc, kenelへのパッチ当てとconstruct sysrootの追加、インストール先のディレクトリ構成(tools, sysroot)の変更。
install_gcc.sh
参考2.に、シェルスクリプトがあり、活用する。変更は、eglibc, kenelへのパッチ当てとconstruct sysrootの追加、インストール先のディレクトリ構成(tools, sysroot)の変更。
install_gcc.sh
ビルドするソース(クロスコンパイル環境のソース)
gmp=gmp-4.3.2
mpfr=mpfr-2.4.2
mpc=mpc-0.8.1
binutils=binutils-2.23.2
gcc=gcc-4.6.3
eglibc=eglibc-2.5
linux=linux-2.6.22_lsp.3.0.5
隘路
eglibc 2.5のビルドには、ソースの変更が必要だった。下記パッチを作成:
kernelも、ビルドエラー発生。有名なgetlineの関数定義重複。下記パッチを作成:
ソースの入手先
binutils,eglibc, http://www.eglibc.org/home,
$ svn co svn://svn.eglibc.org/branches/eglibc-2_5 eglibc-2.5
$ tar jcvf eglibc-2.5.tar.bz2 eglibc-2.5
kernel, http://opensource.buffalo.jp/ls-ql_r5-102.html
参考
隘路
- binutils 2.17のビルドでは、makeでエラー発生(2.17aで試すも同じエラー)。binutils 2.32.2を使ったら成功。
- linux のmake headers_installで、エラー発生:
scripts/unifdef.c:209: error: conflicting types for ‘getline’
getline → get_line に変更。 - eglibc-headersのconfigureで、arm未サポートとなったので、--enable-add-onsに、portsのディレクトリ、nptlを指定。しかし、makeで、TLS supportのエラー発生。
--enable-add-onsに、portsのソースディレクトリを指定するのではなく、eglibc2.5/libcに、eglibc2.5/portsへのリンクを作成し、--enable-add-onsの引数なしでconfigureしたところ、makeも成功。不思議。。。 - EGLIBC, Completeで、_beginの定義がないとのエラー発生。
リンカ周りで発生したエラーの様。最新のbinutils(2.32.2)に対して、gccのバージョンが古い(4.4.5)ためと推測。gccのバージョンを変えて試す:
gcc 4.4.5 × → 4.8.1 × → 4.6.4 × → 4.6.3 ? →
(ls-qlのローダ、libcと整合がとれるか不明だが試してみる。) - gcc 4.6.4 の gcc1 の configure では、--disable-libquadmath
- gcc 4.6 or 4.8のコンパイルで、gmp, mpfr, mpcが必要になる。ソース取得のため、contribで、download_prerequisiteすると、contribにソースが展開される。gcc-4.6.4に、contribに展開されたソースへのリンクを作成したが、×。