トップ «前の日記(2009/12/08(Tue)) 最新 次の日記(2009/12/10(Thu))» 編集
【ソース+水=麦茶色の何か】

半期 四半期 全カテゴリ

今日の一言


2009/12/09(Wed) ものすごく面倒な宿題をクリア! [長年日記]

_ [雑記]マップス ネクストシート 第35話

ゲン&リプミラ懐かしすぎる!

黄金の船の出現で強さのインフレが生じたかと思いきや、やっぱりこの2人の方がすごいのね。

まあ、基本スペックだけ見てるとリプミラ号は一般的な伝承族にも負けてそうだからなぁ。初期はギタニモンにもやられてたし。

スパロボで例えると、機体的にはあまり強くないけど、回避性能だけが異様に高くて、搭乗者が「底力Lv9」&「ガッツ」持っている感じ?

<意訳>瀕死状態からが本番

それはそれとして。

ミュズの16倍発言から予想してたけど、やっぱりゲンが256倍出せるって設定出てきたか。

火事場の馬鹿力で4倍、伝承族の計算による真の潜在能力はそれの更に4倍、で、肉体と精神をシンクロさせた潜在能力はその16倍。すなわち、

4×4×16=256倍!

どんな計算だよ!けどこのノリが好きだ。

*キャプテンオーマイガーの「マジックビームはレベルをひとつ上げるごとに100倍の攻撃力になる」設定とか、最高だよね!?

いまから来月が楽しみだ。

_ [FC][Ubuntu][Linux][研究関係]クロスコンパイラの作成その1(ターゲット:h8 elf、ホスト:SunOS 5.10)

とある事情でクロス環境をいくつか構築した。

せっかくなので、そのやり方を以下にまとめる。

作業スペースを確保

$ mkdir gcc4_h8elf
$ cd gcc4_h8elf

ソースをDL&解凍。

$ wget ftp://sources.redhat.com/pub/newlib/newlib-1.11.0.tar.gz
$ wget ftp://ftp.gnu.org/gnu/binutils/binutils-2.12.1.tar.bz2
$ wget ftp://ftp.gnu.org/gnu/gcc/gcc-3.3.2.tar.gz
$ tar xvzf gcc-3.3.2.tar.gz
$ tar xvzf newlib-1.11.0.tar.gz
$ tar xvjf binutils-2.12.1.tar.bz2

binutilsのコンパイル

自分は展開場所を指定したが、デフォルトでいいなら--prefix=〜は不要。(これ以降も同様)

$ mkdir binutils-h8-elf
$ cd binutils-h8-elf
$ ../binutils-2.12.1/configure --target=h8300-elf --prefix=/home/akihiro-i/gcc4_h8elf/h8-elf
$ gmake
$ gmake install

コンパイルしたgccへのパスを通す&パスの確認

$ PATH=$PATH:/home/akihiro-i/gcc4_h8elf/h8-elf/bin/
$ export PATH
$ echo $PATH

解凍したnewlibへのパスを通す

(念のため。多分不要)

$ PATH=$PATH:/home/akihiro-i/gcc4arm/newlib-1.11.0/newlib/libc/include/
$ export PATH
$ echo $PATH

gccのコンパイル

$ cd ~/gcc4_h8elf/
$ mkdir gcc-h8-elf
$ cd gcc-h8-elf
$ ../gcc-3.3.2/configure\
 --target=h8300-elf\
 --enable-languages=c\
 --with-newlib\
 --with-headers=/home/akihiro-i/gcc4_h8elf/newlib-1.11.0/newlib/libc/include\
 --prefix=/home/akihiro-i/gcc4_h8elf/h8-elf
$ gmake
$ gmake install

newlibのコンパイル

$ cd ~/gcc4_h8elf/
$ mkdir newlib-h8-elf
$ cd newlib-h8-elf
$ ../newlib-1.11.0/configure --target=h8300-elf --prefix=/home/akihiro-i/gcc4_h8elf/h8-elf
$ gmake
$ gmake install

これで完成!・・・のはず。

テスト

とりあえず

$ h8300-elf-gcc -v

で、出来ていることを確認できたら、実際に使ってみる。

コンパイル
$ h8300-elf-gcc hoge.c
アセンブリコードの生成
$ h8300-elf-gcc -S hoge.c -o org_hoge.s
逆アセンブル
$ h8300-elf-objdump -d a.out > inv_hoge.s
セクションヘッダ情報の確認
$ h8300-elf-objdump -h a.out > section_header.txt

_ [FC][Ubuntu][Linux][研究関係]クロスコンパイラの作成その2(ターゲット:h8 hms、ホスト:SunOS 5.10)

基本的にはh8 elf用と同じ。

作業場所の確保

$ mkdir gcc4_h8hms
$ cd gcc4_h8hms

ソースのDL&解凍

$ wget ftp://sources.redhat.com/pub/newlib/newlib-1.11.0.tar.gz
$ wget ftp://ftp.gnu.org/gnu/binutils/binutils-2.12.1.tar.bz2
$ wget ftp://ftp.gnu.org/gnu/gcc/gcc-3.3.2.tar.gz
$ tar xvzf gcc-3.3.2.tar.gz
$ tar xvzf newlib-1.11.0.tar.gz
$ tar xvjf binutils-2.12.1.tar.bz2

binutilsのコンパイル

自分は展開場所を指定したが、デフォルトでいいなら--prefix=〜は不要。(これ以降も同様)

$ mkdir binutils-h8-hms
$ cd binutils-h8-hms
$ ../binutils-2.12.1/configure --target=h8300-hms --prefix=/home/akihiro-i/gcc4_h8hms/h8
$ gmake
$ gmake install

クロスコンパイラへのパス

$ PATH=$PATH:/home/akihiro-i/gcc4_h8hms/h8/bin/
$ export PATH
$ echo $PATH

解凍したnewlibへのパス

$ PATH=$PATH:/home/akihiro-i/gcc4arm/newlib-1.11.0/newlib/libc/include/
$ export PATH
$ echo $PATH

gccのコンパイル

$ cd ~/gcc4_h8hms/
$ mkdir gcc-h8-hms
$ cd gcc-h8-hms
$ ../gcc-3.3.2/configure\
 --target=h8300-hms\
 --enable-languages=c\
 --with-newlib\
 --with-headers=/home/akihiro-i/gcc4_h8hms/newlib-1.11.0/newlib/libc/include\
 --prefix=/home/akihiro-i/gcc4_h8hms/h8
$ gmake
$ gmake install

newlibのコンパイル

$ cd ~/gcc4_h8hms/
$ mkdir newlib-h8-hms
$ cd newlib-h8-hms
$ ../newlib-1.11.0/configure --target=h8300-hms --prefix=/home/akihiro-i/gcc4_h8hms/h8
$ gmake
$ gmake install

これで完成!

テスト

とりあえず

$ h8300-hms-gcc -v
実行形式の作成
$ h8300-hms-gcc hoge.c
アセンブリコードの生成
$ h8300-hms-gcc -S hoge.c -o org_hoge.s
逆アセンブル
$ h8300-hms-objdump -d a.out > inv_hoge.s
セクションヘッダ情報
$ h8300-hms-objdump -h a.out > section_header.txt

なお、今回設定したパスはログアウト等をすれば切れてしまうので、恒常的に使いたい場合には、キチンと設定すること。

_ [FC][Ubuntu][Linux][研究関係]クロスコンパイラの作成その3(ターゲット:arm-linux、ホスト:Ubuntu 9.04 (x86) )

主にココ(http://www.belbel.or.jp/~belphegor/LinuxZaurus/process/cross.shtml)を参考に作成。

事前準備

$ export TARGET=arm-linux
$ export ARCHIVE=~/gcc4arm-linux/archive
$ export SOURCE=~/gcc4arm-linux/src
$ export BUILD=~/gcc4arm-linux/build
$ export TOOLS=~/gcc4arm-linux
$ mkdir -p $ARCHIVE $SOURCE $BUILD $TOOLS/target

binutilsの作成

$ cd $ARCHIVE
$ wget http://ftp.yz.yamagata-u.ac.jp/pub/GNU/binutils/binutils-2.13.2.tar.gz
$ cd $SOURCE
$ tar zxvf $ARCHIVE/binutils-2.13.2.tar.gz
$ mkdir $BUILD/binutils
$ cd $BUILD/binutils
$ $SOURCE/binutils-2.13.2/configure --target=$TARGET --prefix=$TOOLS/$TARGET --enable-shared
$ make
$ make install
$ PATH=$PATH:$TOOLS/$TARGET/bin
$ export PATH

linux kernelのヘッダを準備

$ cd $ARCHIVE
$ wget http://support.ezaurus.com/developer/source/a300/20021224/linux-sla300-20021224-rom1_20.tar.bz2
$ cd $SOURCE
$ tar jxvf $ARCHIVE/linux-sla300-20021224-rom1_20.tar.bz2
$ cd linux
$ make menuconfig
("load an Alternate Configuration File" を選んで "arch/arm/def-configs/discovery-MV" と入力して OK を押す)
(あとはそのまま Exit で終了する。"Do you wish to save your new kernel configuration?" は Yes と答える)
$ mv Makefile Makefile.bak
$ sed "s/arm-linux-//g" < Makefile.bak | sed "s/SUBARCH = arm/# SUBARCH = arm/g" | sed "s/# SUBARCH :=/SUBARCH :=/g" > Makefile
$ make dep
(includeだけを用意する)

gccの作成(仮バージョン)

$ cd $ARCHIVE
$ wget http://ftp.yz.yamagata-u.ac.jp/pub/GNU/gcc/gcc-2.95.3/gcc-core-2.95.3.tar.gz
$ cd $SOURCE
$ tar zxvf $ARCHIVE/gcc-core-2.95.3.tar.gz
$ mkdir $BUILD/gcc
$ cd $BUILD/gcc
$ mv $SOURCE/gcc-2.95.3/gcc/config/arm/t-linux $SOURCE/gcc-2.95.3/gcc/config/arm/t-linux.bak
$ sed "s/TARGET_LIBGCC2_CFLAGS = -fomit-frame-pointer -fPIC/TARGET_LIBGCC2_CFLAGS = -fomit-frame-pointer -fPIC -Dinhibit_libc -D__gthr_posix_h/g" \
	< $SOURCE/gcc-2.95.3/gcc/config/arm/t-linux.bak > $SOURCE/gcc-2.95.3/gcc/config/arm/t-linux
$ $SOURCE/gcc-2.95.3/configure --target=$TARGET --prefix=$TOOLS/$TARGET --enable-shared --disable-threads
$ ln -sf $SOURCE/linux/include/asm-arm $SOURCE/gcc-2.95.3/include/asm
$ ln -sf $SOURCE/gcc-2.95.3/include/asm/proc-armv $SOURCE/gcc-2.95.3/include/asm/proc
$ ln -sf $SOURCE/gcc-2.95.3/include/asm/arch-arc $SOURCE/gcc-2.95.3/include/asm/arch
$ ln -sf $SOURCE/linux/include/linux $SOURCE/gcc-2.95.3/include/linux
$ make
$ make install

glibcの作成

$ cd $ARCHIVE
$ wget http://ftp.gnu.org/pub/gnu/glibc/glibc-2.2.2.tar.gz
$ wget http://ftp.gnu.org/pub/gnu/glibc/glibc-linuxthreads-2.2.2.tar.gz
$ cd $SOURCE
$ tar zxvf $ARCHIVE/glibc-2.2.2.tar.gz
$ cd $SOURCE/glibc-2.2.2
$ tar zxvf $ARCHIVE/glibc-linuxthreads-2.2.2.tar.gz
	# ftp://ftp.linux.org.uk/pub/armlinux/toolchain/src-3.2/build-toolchainに書かれているパッチを適用
$ perl -pi -e 's/i386/arm*)\n\tlibc_cv_gcc_unwind_find_fde=yes\n\tarch_minimum_kernel=2.0.10\n\t;;\n i386/' sysdeps/unix/sysv/linux/configure
$ perl -pi -e 's/weak_alias \(__old_sys_nerr/\/\/ $&/' sysdeps/unix/sysv/linux/arm/errlist.c
$ mkdir $BUILD/glibc
$ cd $BUILD/glibc
$ CC=$TARGET-gcc AR=$TARGET-ar RANLIB=$TARGET-ranlib $SOURCE/glibc-2.2.2/configure --host=$TARGET --with-headers=$SOURCE/linux/include --enable-add-ons --prefix=$TOOLS/target/$TARGET
makeinfo時にエラーになる部分の修正
$ mv $SOURCE/glibc-2.2.2/manual/stdio.texi $SOURCE/glibc-2.2.2/manual/stdio.texi.bak
$ sed "s/@ref{,/@ref{Top,/" < $SOURCE/glibc-2.2.2/manual/stdio.texi.bak > $SOURCE/glibc-2.2.2/manual/stdio.texi
$ make
make時にエラーが出た場合、該当個所を削除すれば一応コンパイルできる。正常に動作するかどうかは不明。
$ make install

gccの作成(本バージョン)

$ rm -fR $BUILD/gcc
$ mkdir $BUILD/gcc
$ cd $BUILD/gcc
t-linux を元に戻す
$ rm $SOURCE/gcc-2.95.3/gcc/config/arm/t-linux
$ mv $SOURCE/gcc-2.95.3/gcc/config/arm/t-linux.bak $SOURCE/gcc-2.95.3/gcc/config/arm/t-linux
$ $SOURCE/gcc-2.95.3/configure --target=$TARGET --prefix=$TOOLS/$TARGET --enable-shared --with-headers=$TOOLS/target/$TARGET/include --with-libs=$TOOLS/target/$TARGET/
$ make
$ make install

linux kernelのヘッダをインストール

$ cd $SOURCE
$ rm -fR linux
$ tar jxvf $ARCHIVE/linux-sla300-20021224-rom1_20.tar.bz2
$ cd linux
$ make menuconfig
("load an Alternate Configuration File" を選んで "arch/arm/def-configs/discovery-MV" と入力して OK を押す)
(あとはそのまま Exit で終了する。"Do you wish to save your new kernel configuration?" は Yes と答える)
$ make dep
$ cp -R include/linux $TOOLS/$TARGET/$TARGET/sys-include
$ cp -R include/asm-arm $TOOLS/$TARGET/$TARGET/sys-include/asm
$ cp -fR $TOOLS/target/$TARGET/include/* $TOOLS/$TARGET/$TARGET/sys-include
$ rm -fR $TOOLS/target/$TARGET/include
$ ln -sf $TOOLS/$TARGET/$TARGET/sys-include $TOOLS/target/$TARGET/include

ライブラリ群の整理

$ mv $TOOLS/$TARGET/$TARGET/lib/ldscripts $TOOLS/target/$TARGET/lib
rmdir $TOOLS/$TARGET/$TARGET/lib
$ ln -s $TOOLS/target/$TARGET/lib $TOOLS/$TARGET/$TARGET/lib

これで完成!

環境構築後の利用方法

新しくログインし直したときなどは以下のように再度環境変数を設定しなおす必要がある。

$ export TARGET=arm-linux
$ export ARCHIVE=~/gcc4arm-linux/archive
$ export SOURCE=~/gcc4arm-linux/src
$ export BUILD=~/gcc4arm-linux/build
$ export TOOLS=~/gcc4arm-linux
$ PATH=$PATH:$TOOLS/$TARGET/bin
$ export PATH

_ [FC][Ubuntu][Linux][研究関係]クロスコンパイラの作成その4(ターゲット:arm-elf、ホスト:Ubuntu 9.04 (x86) )

ホスト側のgccの切り替え

hostのgccが4.0系だとエラーを吐いたので、3.4に切り替える。

$ sudo apt-get install gcc-3.4
$ cd /usr/bin
$ sudo rm gcc
$ sudo ln -s gcc-3.4 gcc

これは別にalternativesを使ってもいい・・・はず。

作業場所の確保

$ mkdir gcc4_arm-elf
$ cd gcc4_arm-elf

ソースのDL&解凍

$ wget ftp://sources.redhat.com/pub/newlib/newlib-1.11.0.tar.gz
$ wget ftp://ftp.gnu.org/gnu/binutils/binutils-2.12.1.tar.bz2
$ wget ftp://ftp.gnu.org/gnu/gcc/gcc-3.3.2.tar.gz
$ tar xvjf binutils-2.12.1.tar.bz2
$ tar xvzf gcc-3.3.2.tar.gz
$ tar xvzf newlib-1.11.0.tar.gz

binutilsのビルド&インストール

$ cd ~/gcc4arm-elf/
$ mkdir binutils-arm-elf
$ cd binutils-arm-elf/
$ ../binutils-2.12.1/configure --with-included-gettext --enable-shared --target=arm-elf-elf --prefix=/home/akihiro-i/gcc4arm-elf/arm-elf

(閑話休題) *共有ライブラリを使いたい場合は、configure が作成したlibtoolファイルを書き換える必要がある?(configureがうまく動いていない?)

 * allow_undefined_flag の値を supported にする。
 * always_export_symbols の値を yes にする。

が、自分の環境ではこれをやっても共有ライブラリの作成が出来なかった。・・・なぜだ。もしかして元々対応していないとか?

(続き)

$ make
$ make install

ビルドしたbinutilsへのパスを通す

$ PATH=$PATH:/home/akihiro-i/gcc4arm-elf/arm-elf/bin/
$ export PATH
$ echo $PATH

解凍したnewlibへのパスを通す

$ PATH=$PATH:/home/akihiro-i/gcc4arm-elf/newlib-1.11.0/newlib/libc/include/
$ export PATH
$ echo $PATH

gccのCコンパイラだけビルド&インストール

$ cd ~/gcc4arm-elf/
$ mkdir gcc-arm-elf
$ cd gcc-arm-elf
$ ../gcc-3.3.2/configure\
 --enable-languages=c,c++\
 --with-included-gettext\
 --enable-shared\
 --enable-threads\
 --target=arm-elf-elf\
 --with-newlib\
 --with-headers=/home/akihiro-i/gcc4arm-elf/newlib-1.11.0/newlib/libc/include/\
 --prefix=/home/akihiro-i/gcc4arm-elf/arm-elf
$ make LANGUAGES=c all-gcc
$ make LANGUAGES=c install-gcc

newlibのビルド&インストール

$ cd ~/gcc4arm-elf/
$ mkdir newlib-arm-elf
$ cd newlib-arm-elf
$ ../newlib-1.11.0/configure\
 --target=arm-elf-elf\
 --prefix=/home/akihiro-i/gcc4arm-elf/arm-elf\
 --enable-shared
$ make
$ make install

パスを通す

$ PATH=$PATH:/home/akihiro-i/gcc4arm-elf/arm-elf/bin 
$ export PATH

gccの残りをビルド&インストール

$ cd ~/gcc4arm-elf/gcc-arm-elf
$ make
$ make install

これで完成!

テスト

実行形式をビルド
 $ arm-elf-gcc hoge.c
確認
 $ file a.out
結果
a.out: ELF 32-bit LSB executable, arm-elf, version 1, statically linked, not stripped
[]