体験!マイコンボードで組込みLinux

第16回GNU標準パッケージを移植してみよう

SH3向けクロスコンパイラ構築の補足

最新版ディストリビューションでのエラー

前回はcrosstoolによるSH3向けクロスコンパイラ構築による構築について解説しましたが、最新のbinutilsを採用したディストリビューションでエラーが発生しますので、その対策について補足をします。

最近ではcrosstoolがメンテナンスされていないようなので、安定版ディストリビューションでは問題ないですが、最新版ディストリビューションでのエラーが発生することがあります。

原因は、glibc-2.3.6が想定したbinutilsのldとasのバージョンが2.1.xで2.2を想定していないという単純なミスマッチです。glibc-2.3.6のconfigureスクリプトでldとasの想定バージョンに2.2を追加すればいいだけなので、リスト1のパッチファイルをcrosstoolに追加すればいいだけです。パッチファイルの名称は任意で良いのでcrosstool内パッケージで、以下のフォルダにリスト1の内容のパッチファイルを追加します。

  • patches/glibc-2.3.6
リスト1 glibc-2.3.6のconfigureスクリプトに当てるパッチ
diff -Naur glibc-2.3.6.orig/configure glibc-2.3.6/configure
--- glibc-2.3.6.orig/configure	2005-11-04 09:37:15.000000000 +0900
+++ glibc-2.3.6/configure	2012-01-30 14:01:22.073000003 +0900
@@ -3917,7 +3917,7 @@
   ac_prog_version=`$AS --version 2>&1 | sed -n 's/^.*GNU assembler.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
   case $ac_prog_version in
     '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
-    2.1[3-9]*)
+    2.1[3-9]* | 2.2*)
        ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
     *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
 
@@ -3978,7 +3978,7 @@
   ac_prog_version=`$LD --version 2>&1 | sed -n 's/^.*GNU ld.* \([0-9][0-9]*\.[0-9.]*\).*$/\1/p'`
   case $ac_prog_version in
     '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
-    2.1[3-9]*)
+    2.1[3-9]* | 2.2*)
        ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
     *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;

crosstoolその他の補足

crosstoolに必要なソースパッケージに関しては前回に解説しますが、ソースパッケージのネット上でのメンテナンスは日々刻刻と変化します。ソースパッケージの名称変更だけで対応できるケースもあり、それらは以下のとおりです。

  • gdb-6.5.tar.bz2
    → gdb-6.5a.tar.bz2

  • linux-2.6.15.4.tar.bz2
    → linux-2.6.15.tar.bz2

GNU標準パッケージ

ソースパッケージのコンパイルについて

ソースコードのコンパイルは、基本的にはgccが動作する環境ならば可能です。

前回ではT-SH7706LSRボード上でgccでセルフコンパイルする環境を整備し、簡単なCソースコードをコンパイルしました。昔ならばそれでよかったのですが、現在では多くのソースパッケージが肥大化・複雑化しているので、GNU標準パッケージに準じたかたちで、configureコマンドでコンパイル環境のチェックやMakefileを環境に合わせて自動生成するようになっています。

前回の段階では、configureコマンドでコンパイル環境の自動生成ができないので、今回はそれをできるように整備をします。

何が必要か?

configureコマンドでコンパイル環境の自動生成をするには以下のパッケージを用意する必要があります。

  • make-3.82
  • libtool-2.4
  • automake-1.11
  • autoconf-2.68
  • m4-1.4.15

ソースパッケージのコンパイルに関しては、configureコマンドでコンパイル環境の自動生成をする必要があり、⁠鶏と卵」の関係になるので、PC上でのクロスコンパイルによりT-SH7706LSR上でそれらを使えるようにします。

注意しなければいけない点として、上記のパッケージには他パッケージとの依存関係があるものも存在するので、T-SH7706LSRボード向けと同時にPC上のクロスコンパイラ環境の両方にインストールする必要があるパッケージもあるということがあります。

コンパイル作業をするためにGNUの各種ミラーサイトから上記ソースパッケージをダウンロードします。

コンパイル作業の実際

前回、gccセルフコンパイラのPC上でのインストール先は ~/shlinuxでしたので、引き続きこのフォルダをインストール先にして説明をします。

makeのクロスコンパイル

makeのコンパイルはPC上で行います。

PC上の任意の作業フォルダ上に以下のようにmakeのソースパッケージを展開します。

$ tar xvjf make-3.82.tar.bz2

ソースパッケージを展開したら、以下のように作業フォルダを設定して、configureコマンドでMakefileを自動生成します。

$ cd make-3.82
$ mkdir build
$ cd build
$ ../configure --prefix=/usr --host=sh3-linux --build=i686-vine-gnu --disable-nls

Makefileが自動生成されたら、以下のようにコンパイルを行い、makeをインストールします。

$ make
$ make install prefix=~/shlinux

libtoolのクロスコンパイル

libtoolのコンパイルもPC上で行います。

PC上の任意の作業フォルダ上に以下のようにlibtoolのソースパッケージを展開します。

$ tar xvzf libtool-2.4.tar.gz

ソースパッケージを展開したら、以下のように作業フォルダを設定して、configureコマンドでMakefileを自動生成します。

$ cd libtool-2.4
$ mkdir build
$ cd build
$ ../configure --prefix=/usr --host=sh3-linux --build=i686-vine-gnu

Makefileが自動生成されたら、以下のようにコンパイルを行い、makeをインストールします。

$ make
$ make install prefix=~/shlinux

libtoolはクロスコンパイル環境に対してもインストールする必要がありますので、再度、configureコマンドでMakefileを自動生成します。

$ rm -rf *
$ ../configure --prefix=/ --host=sh3-linux --build=i686-vine-gnu

Makefileが自動生成されたら、以下のようにコンパイルを行い、makeをクロスコンパイル環境に対してインストールします。

$ make
# sudo make install prefix=/usr/sh3-linux/sh3-linux

automakeのクロスコンパイル

automakeのコンパイルもPC上で行います。

PC上の任意の作業フォルダ上に以下のようにautomakeのソースパッケージを展開します。

$ tar xvjf automake-1.11.tar.bz2

ソースパッケージを展開したら、以下のように作業フォルダを設定して、configureコマンドでMakefileを自動生成します。

$ cd automake-1.11
$ mkdir build
$ cd build
$ ../configure --prefix=/usr --host=sh3-linux --build=i686-vine-gnu

Makefileが自動生成されたら、以下のようにコンパイルを行い、makeをインストールします。

$ make
$ make install prefix=~/shlinux

automakeはクロスコンパイル環境に対してもインストールする必要がありますので、再度、configureコマンドでMakefileを自動生成します。

$ rm -rf *
$ ../configure --prefix=/ --host=sh3-linux --build=i686-vine-gnu

Makefileが自動生成されたら、以下のようにコンパイルを行い、makeをクロスコンパイル環境に対してインストールします。

$ make
# sudo make install prefix=/usr/sh3-linux/sh3-linux

autoconfのクロスコンパイル

autoconfのコンパイル、これもPC上で行います。

PC上の任意の作業フォルダ上に以下のようにautoconfのソースパッケージを展開します。

$ tar xvjf autoconf-2.68.tar.bz2

ソースパッケージを展開したら、以下のように作業フォルダを設定して、configureコマンドでMakefileを自動生成します。

$ cd autoconf-2.68
$ mkdir build
$ cd build
$ ../configure --prefix=/usr --host=sh3-linux --build=i686-vine-gnu

Makefileが自動生成されたら、以下のようにコンパイルを行い、autoconfをインストールします。

$ make
$ make install prefix=~/shlinux

m4のクロスコンパイル

m4のコンパイルもPC上で行います。

PC上の任意の作業フォルダ上に以下のようにm4のソースパッケージを展開します。

$ tar xvjf m4-1.4.15.tar.bz2

ソースパッケージを展開したら、以下のように作業フォルダを設定して、configureコマンドでMakefileを自動生成します。

$ cd m4-1.4.15
$ mkdir build
$ cd build
$ ../configure --prefix=/usr --host=sh3-linux --build=i686-vine-gnu

Makefileが自動生成されたら、以下のようにコンパイルを行い、m4をインストールします。

$ make
$ make install prefix=~/shlinux

GNU標準パッケージのセルフコンパイル

セルフコンパイル

libtoolを例に、GNU標準パッケージのコンパイルをT-SH7706LSR上で行う方法を紹介します。

T-SH7706LSRボード上でのconfigureコマンド実行やコンパイルは時間がかかるので忍耐強く待ちます。T-SH7706LSRボード上の任意の作業フォルダ上に以下のようにlibtoolのソースパッケージを展開します。

$ tar xvzf libtool-2.4.tar.gz

ソースパッケージを展開したら、以下のように作業フォルダを設定して、configureコマンドでMakefileを自動生成します。

$ cd libtool-2.4
$ mkdir build
$ cd build
$ ../configure --prefix=/usr

Makefileが自動生成されたら、以下のようにコンパイルを行い、bisonをインストールします。

$ make
$ make install

次回は

次回はT-SH7706LSRボード上にSH3アーキテクチャーのrpmパッケージのインストールについて解説します。

おすすめ記事

記事・ニュース一覧