ようこそゲストさん

無能日記

メッセージ欄

2006年6月の日記

一覧で表示する

2006/06/20(火) zaurusで遊ぶ

はてブ 2007/04/09 13:47 R&D (zaurus)poti
sl-C3200で遊んでみるメモ。

<カーネルを入れ替える>
スペシャルカーネルというものがあるようなので、入れ替えてみる
bzimageとupdate.shをSDにいれて、zaurusでアップデートするだけ

<ソフトウェアのインストール>
いろんなサイトに落ちている、hogehoge,ipkをとってきて
SDのdocumentsの中のInstall_Filesのなかに放り込んで、あとは
設定->アプリケーションの追加と削除でインストール
ターミナルは必須なので入れました。

<クロス開発環境を作ってみる。>
以下のサイトを参考にして、gccのクロスコンパイル環境を作る。
http://www.t12.jp/~ryuta/rwiki/rw-cgi.rb?cmd=view;name=XScale+%A4%CA%A5%B3%A1%BC%A5%C9%A4%F2%C5%C7%A4%AF%A5%B3%A5%F3%A5%D1%A5%A4%A5%E9%A4%F2%BC%EA%A4%CB%C6%FE%A4%EC%A4%EB
http://www.paipai.org/~humorum/pukiwiki/pukiwiki.php?ZaurusSelf2

環境 CENTOS
/usr/zaurusの以下に作成する

以下のRPMを持ってくる
glibc-arm-2.2.2-0.i386.rpm
linux-headers-arm-sa1100-2.4.6-3.i386.rpm

# cd /usr/zaurus
# mkdir download
# rpm2cpio glibc-arm-2.2.2-0.i386.rpm | cpio -id
# rpm2cpio linux-headers-arm-sa1100-2.4.6-3.i386.rpm | cpio -id

optディレクトリができているはず。

次にgccとbinutilsを持ってくる
ring あたりから ftp://ftp.t.ring.gr.jp/pub/
gcc-3.4.6をげっとしてきました。
とってきたら展開

binutilsのインストール
# cd binutils-(version)
# mkdir build-arm-linux
# cd build-arm-linux
# ../configure --prefix=/usr/zaurus --enable-shared --target=arm-linux --enable-targets=xscale-linux-elf --enable-targets=strongarm-linux-elf
# make all
# make install

libc, headersのコピー
# cp -r /usr/zaurus/download/opt/Embedix/tools/arm-linux を /usr/zaurus に置くだけです

gccのインストール
# cd gcc-(version)

# vi gcc/config/arm/elf.h
61行目に-mfpu=fpa\を追加
%mthumb-interwork:-mthumb-interwork-mfpu=fpa \ ←これ
%(subtarget_extra_asm_spec)"
#endif
その上のほうにある
  • msoftfloat=softfpaになってるのもfpaにした
また$ZAURUS_CROSS/arm-linux/include/bits/sigthread.h 36行目のthreadが型と衝突して止まるので変数名を変更
extern int pthread_kill (pthread_t __thread, int__signo) __THROW;

extern int pthread_kill (pthread_t __thr, int__signo) __THROW;
とする。同じ理由で$ZAURUS_CROSS/arm-linux/include/pthread.hの163行目,586行目の __threadを__thrに変更。

/usr/zaurus/binをPATHに追加
export PATH=$PATH:/usr/zaurus/bin

# mkdir build-arm-linux
# cd build-arm-linux
# CC=gcc CFLAGS="-O2" CFLAGS_FOR_TARGET="-O2 -mcpu=xscale -Wa,-mfpu=fpa"../configure --target=arm-linux --with-cpu=xscale --enable-shared --enable-languages=c,c++
# make CC=gcc CFLAGS="-O2" CFLAGS_FOR_TARGET="-O2 -mcpu=xscale -Wa,-mfpu=fpa"
# make install

テスト
# arm-linux-gcc -static hello.c

a.outをsdかなにかにコピーして実行で動くことを確認。

<セルフ開発環境にしてみる>
クロスコンパイルなgccで再度binutilsとgccをコンパイルして
/usr/zaurus/localの下にインストール

tar zxvf binutils-(version).tar.gz
mkdir build-binutils
cd build-binutils
CC=arm-linux-gcc CFLAGS="-s -O2 -mcpu=xscale" CXX=arm-linux-g++ CXXFLAGS="-s -O2 -mcpu=xscale" CC_FOR_BUILD=gcc CFLAGS_FOR_BUILD="-s -O2 -march=pentium4" CC_FOR_TARGET=arm-linux-gcc CFLAGS_FOR_TARGET="-s -O2 -mcpu=xscale" CXX_FOR_BUILD=g++ CXXFLAGS_FOR_BUILD="-s -O2 -march=pentium4" CXX_FOR_TARGET=arm-linux-g++ CXXFLAGS_FOR_TARGET="-s -O2 -mcpu=xscale -D_GNU_SOURCE" ../configure --build=i686-pc-linux --host=arm-linux --prefix=/usr/zaurus/local --enable-targets=xscale-linux-elf --enable-shared
$ make CFLAGS_FOR_BUILD="-s -O2 -march=pentium4"CFLAGS_FOR_TARGET="-s -O2 -mcpu=xscale"CXXFLAGS_FOR_BUILD="-s -O2 -march=pentium4"CXXFLAGS_FOR_TARGET="-s -O2 -mcpu=xscale"
$ make CFLAGS_FOR_BUILD="-s -O2 -march=pentium4"CFLAGS_FOR_TARGET="-s -O2 -mcpu=xscale"CXXFLAGS_FOR_BUILD="-s -O2 -march=pentium4"CXXFLAGS_FOR_TARGET="-s -O2 -mcpu=xscale" install

libc, headersのコピー
# cp -r /usr/zaurus/download/opt/Embedix/tools/arm-linux を /usr/zaurus/local に置くだけです

以下のヘッダを追加。
@@ -25,6 +25,8 @@
#include
#include "hosthooks.h"
#include "hosthooks-def.h"
  1. #include
CC=arm-linux-gcc CFLAGS="-s -O2 -mcpu=xscale"CXX=arm-linux-g++ CXXFLAGS="-s -O2 -mcpu=xscale"CC_FOR_BUILD=gcc CFLAGS_FOR_BUILD="-s -O2 -march=pentium4"CC_FOR_TARGET=arm-linux-gcc CFLAGS_FOR_TARGET="-s -O2 -mcpu=xscale"CXX_FOR_BUILD=g++ CXXFLAGS_FOR_BUILD="-s -O3 -march=pentium2"CXX_FOR_TARGET=arm-linux-g++ CXXFLAGS_FOR_TARGET="-s -O2 -mcpu=xscale -D_GNU_SOURCE"../configure --build=i686-pc-linux --host=arm-linux --prefix=/usr/zaurus/local --with-cpu=xscale --enable-shared --enable-languages=c,c++

make CFLAGS_FOR_BUILD="-s -O2 -march=pentium4"CFLAGS_FOR_TARGET="-s -O2 -mcpu=xscale"CXXFLAGS_FOR_BUILD="-s -O2 -march=pentium4"CXXFLAGS_FOR_TARGET="-s -O2 -mcpu=xscale"

make CFLAGS_FOR_BUILD="-s -O2 -march=pentium4"CFLAGS_FOR_TARGET="-s -O2 -mcpu=xscale"CXXFLAGS_FOR_BUILD="-s -O2 -march=pentium4"CXXFLAGS_FOR_TARGET="-s -O2 -mcpu=xscale" install

これで、/usr/zaurus/local以下をzaurusにコピーすれば、gccが使えるようになるはず。

tarで固めて、SDにコピー
# cd /usr/zaurus
# tar -zcvf local.tar.gz local

SDカードにコピーする前に一仕事
vfatがシンボリック張れないため
SDカードもしくは/hdd3のどちらかをext3ファイルフォーマットにする必要が出てくる。
(100Mを超えるデータの保存場所としては、デフォルトだとhdd3かSDしかない)
/hdd3にはデータがすでにあるのでSDを使う。
SDカードを2つのパーティションに分ける。
ちなみにSDは2G
# umount /mnt/card
# fdisk /dev/mmcda
> n
> p
> 1
> (default)
> +1000M
> n
> p
> 2
> (default)
> (default)
# mkfs.vfat /dev/mmcda1
# mke2fs -j /dev/mmcda2

この状態で、SDを一度挿しなおす。
/etc/fstabにエントリを追加
/dev/mmcda2 /usr/custom ext3 rw,noatime 0 0
/usr/customはなんでもいいや

# mount -a
# df
できちんと /usr/customのエントリが出てるのを確認

セルフコンパイル環境のtarファイルをSDにコピー
その後、/usr/customの下に展開
# cd /usr/custom
# tar -zxvf /mnt/card/local.tar.gz

環境変数を追加
PATH に /usr/custom/local/bin を追加
LD_LIBRARY_PATH に /usr/custom/local/lib /usr/custom/local/arm-linux/lib を追加
C_LIBRARY_PATH に /usr/custom/local/lib /usr/custom/local/arm-linux/li を追加
C_INCLUDE_PATH に /usr/custom/local/include /usr/custom/local/arm-linux/include を追加

gcc hello.c とやるとなにやらエラー
ld が -lgcc_sを解決できない
http://armadillo.atmark-techno.com/armadillo-9/faq/gpp
ばぐなのかなー?
とりあえず以下で解決
ln -s /usr/custom/lib/libgcc_s.so.1 /usr/custom/lib/gcc/arm-linux/(version)/libgcc_s.so


gcc hello.c できちんとコンパイルでき動くことを確認

なぜか、すべての作業がroot。。。


うぁ、コンパイルおそすっ!!