基礎からのデバイスドライバ作成講座(第4回)

組み込みLinuxシステムにおけるドライバの開発

CQ出版発行の組み込みエンジニアのための Embedded Unix の記事関連のダウンロード・コーナです。

株式会社デバイスドライバーズ

アプリケーション用クロス開発環境構築

MIPSアーキテクチャ(MIPS32)のAu1100CPUをLittle Endianで利用する組み込みLinuxボードである、E!Kit-1100用のアプリケーション・プログラムのクロス開発環境の構築手順を説明します。

インストール手順

Embeded Unix誌の本文中のカーネル用クロス開発環境を使用して、アプリケーション・プログラムをクロスコンパイルする場合には、いくつかの不具合があることが判明しています。そのためにここでは、「E!Kit-1100」用のアプリケーション用クロス開発環境を/export以下に構築する手順を示します。一旦このアプリケーション用クロス開発環境を構築してしまえば、カーネル・コンパイルもそのままできるので便利です。

インストールに必要な条件として、すでにEmbeded Unix誌の本文中に掲載のカーネル用クロス開発環境がインストールしてある事とします。適宜ディレクトリ名を変更することで、別なディレクトリにインストールする事ができますが、ここの手順ではカーネル用クロス開発環境を元にして環境を構築するため、ディレクトリはすでにインストールしてある環境と同じにする必要があります。また、必要な環境変数も(milsel-env.sh)で定義してある同じものを使用します。

ディレクトリと環境の確認

ここの説明ではまず、/exportディレクトリ以下に必要なバージョンのbinutils, gcc, glibcが展開してある事をls コマンドで確認します。以下のように見えれば大丈夫でしょう。

# ls /export/*
/export/local:
bin  include  info  lib  man  mipsel-linux  share

/export/src:
linux  linux-2.4.21-p4b1

/export/tar:
binutils-2.13.2.1.tar.bz2  busybox.tgz  ekit1100.srec  mipsel-env.sh  mk_ramdisk.sh

/export/tool:
binutils-2.13.2.1 gcc-3.2.3   lib     sbin     etc     glibc-2.3.2    usr

mipsel-env.shの中身の表示(確認)させた後で、環境変数と、PATHの設定をします(mipsel-env.sh を実行)

# cd /export
# cat tar/mipsel-env.sh
TARGET=mipsel-linux
PREFIX=/export/local
KERNELSRC=/export/src/linux
TOOLROOT=/export/tool
LANG=en_US
PATH=/export/local/bin:$PATH
export TARGET PREFIX KERNELSRC TOOLROOT PATH LANG

# . tar/mipsel-env.sh

binutilsの再インストール

binutilsを再インストールします。

# cd $TOOLROOT
# cd binutils-2.13.2.1
# cd build
# rm -rf *
# ../configure --prefix=$PREFIX --target=$TARGET --disable-nls  \
     --with-sysroot=$PREFIX/$TARGET
# make
# make install

カーネル・インクルード・ヘッダの確認

カーネルツリー以下にインクルード・ヘッダ・ファイルのシンボリックリンクとversion.hが作成されている必要があります。

/export/src/linux のシンボリックリンク
/export/src/linux/include/asm のシンボリックリンク
/export/src/linux/include/linux/version.h ファイル

のいずれかが無い場合には、カーネルのクロスコンパイル手順に従って、一度カーネルのクロスコンパイルを実行するか、以下の手順でmake depまでのステップを実行しておきます。

(/export/src/linux のシンボリックリンクが無い場合)

# cd /export/src
# ln -s linux-2.4.21-p4b1 linux

(以下の何れかが無い場合)
/export/src/linux/include/asm のシンボリックリンク
/export/src/linux/include/linux/version.h ファイル

# cd /export/src/linux
# make oldconfig
# make dep

gccの構築その1

まずCライブラリを構築するために、gcc, cppといったCクロスコンパイラ本体をコンパイル、インストールします。

# cd $TOOLROOT
# cd gcc-3.2.3
# cd build
# rm -rf *
# ../configure --prefix=$PREFIX --target=$TARGET --host=`../config.guess` \
     --with-local-prefix=$PREFIX/$TARGET  --disable-multilib --with-newlib \
     --with-headers=$PREFIX/$TARGET/include \
     --disable-nls  --enable-threads=no  --enable-symvers=gnu \
     --enable-__cxa_atexit  --enable-languages=c  --disable-shared

# make all-gcc install-gcc

glibcの構築

アプリケーション開発時にクロスコンパイラが使用してリンクするライブラリを、ソースコードから前項で作成したクロスコンパイルして作成し、インストールします。

# cd $TOOLROOT
# cd glibc-2.3.2

Patchファイルをコピーしておいてから、Patchを当ててglibcの問題点を修復します。

# cp -p /export/tar/*.patch .
# patch -p1 < glibc-2.3.2-cross.patch
# patch -p1 < glibc-2.3.2-mips.patch
# patch -p1 < glibc-2.3.2-without-fp.patch

ライブラリを再度作成します。

# cd build
# rm -rf *
# BUILD_CC=gcc CFLAGS="-O2 -finline-limit=10000" \
     CC=${TARGET}-gcc AR=${TARGET}-ar RANLIB=${TARGET}-ranlib \
     ../configure --prefix=/usr --host=${TARGET} \
     --build=`../../gcc-3.2.3/config.guess`  --without-tls --enable-add-ons \
     --without-__thread --enable-kernel=2.4.3 --without-cvs --without-gd \
     --disable-profile --disable-debug --enable-clocale=gnu \
     --with-headers=$PREFIX/$TARGET/include

# make
# make install_root=$PREFIX/$TARGET prefix= install

インストール・ライブラリの修正

glibc-fix.shを実行して、libc.so と libpthread.so 内に誤った絶対Pathが入ってしまう問題を修正します。

# cat /export/tar/glibc-fix.sh
#!/bin/sh
SYSROOT=/export/local/mipsel-linux/lib
for file in libc.so libpthread.so; do
  mv ${SYSROOT}/$lib/$file ${SYSROOT}/$lib/${file}_orig
  sed 's,/lib/,,g' < ${SYSROOT}/$lib/${file}_orig > ${SYSROOT}/$lib/$file
done

# /export/tar/fix-glibc.sh

gccの構築その2

# cd ${TOOLROOT}
# cd gcc-3.2.3
# cd build
# rm -rf *
# ../configure --target=$TARGET --prefix=$PREFIX --host=`../config.guess` \
        --with-headers=$PREFIX/$TARGET/include \
        --with-local-prefix=$PREFIX/$TARGET --disable-nls  \
        --enable-threads=posix --enable-symvers=gnu \
        --enable-__cxa_atexit --enable-languages=c,c++ \
        --enable-shared --enable-c99 --enable-long-long

# make all
# make install

以上でアプリケーション・プログラム用のクロス開発環境の作成とインストールが終了しました。試しに、busybox等のアプリケーションがコンパイルできて、正しく実行できる事を確認して下さい。

更新日:2004年2月15日

日高亜友(ひだか あとむ)
Hidaka, Atomu

戻る→

ホームへ戻る  株式会社デバイスドライバーズ
  TEL: 042-363-8294
  FAX: 042-363-8255