[Armadillo:00015] Re: FreeBSD 開発環境 (was: MD5 チェックサム )
Kaoru Kusachi
email@hidden
2004年 5月 22日 (土) 16:28:12 JST
草地@リムネットです。
At 00:55 +0900 2004.05.22 , Yasushi SHOJI wrote:
>FreeBSD + linux エミュレータで ajの開発をするための tipとかありますか?
>私自身 FreeBSD + linuxエミュレータで aj開発をしたことがないので、もし、
>ハマリやすい場所があるなら FreeBSD userのためにまとめたいなぁ。
とりあえず、Armadillo-J を動かすのが先決でドキュメントにはまとめ
ていなかったのですが 、良い機会なのでFreeBSDユーザの方の参考に
開発環境を作成した時のメモ程度ですがまとめてみました、なおこの
時点では base.img イメージは 1.02 だったので現在では状況が変わって
いるかも知れません、FreeBSDユーザの方の参考になれば幸いです。
以下の文章は御自由に利用下さい。
++++++++++++++++++ ここから ++++++++++++++++++
Armadillo-J 開発環境 on FreeBSD
※ FreeBSD上での開発を行う際の問題点及び対策
1. 提供されている開発環境が Linux バイナリ (RedHat and debian) なので
linux エミュレータを使わないと動かない。
【対策】 FreeBSD で Linux バイナリの実行開発環境の導入
ports または freeBSDパッケージで以下のインストールを行う。
$ pkg_info | grep linux
linux_base-7.1_7 The base set of packages needed in Linux mode
linux_devtools-7.1_3 Packages needed for doing development in Linux mode
※ この時点では RedHat 7 相当のエミュレータ環境で対応、debian環境
は未確認。
2. hermit (hermit-1.3_armadillo-6.i386.rpm) 実行バイナリが Linux 環境
実行時に assert でエラーになってターゲット (Armadillo-J 本体) にダ
ウンロード出来ない。
【対策】 Linux 環境と FreeBSD の API の戻り値が異なる事が原因だった
為、hermit のソースにパッチを入れて再コンパイル。
### hermit-1.3-armadillo-6/src/host/common/target.c ###
RCS file: RCS/target.c,v
retrieving revision 1.1
diff -c -r1.1 target.c
*** target.c 2004/02/12 14:18:55 1.1
--- target.c 2004/02/13 10:31:29
***************
*** 314,321 ****
--- 314,325 ----
assert(tc);
#ifndef MSW
assert(tc->portfd >= 0);
+ #ifdef LINUX
if (tcflush(tc->portfd, TCIOFLUSH) < 0)
perror_xe("tcflush() on serial fd");
+ #else /* ! LINUX */
+ tcflush(tc->portfd, TCIOFLUSH);
+ #endif /* ! LINUX */
#else
assert(tc->portfd != INVALID_HANDLE_VALUE);
if (!FlushFileBuffers(tc->portfd))
※ FreeBSD 上の Linux エミュレーションでは tcflush() の戻り値がエ
ラーで返って来る様なので無視する様にした。
とりあえず hermit が動いたので詳細は調査せず :-)
3. Armaddillo-J での実行バイナリ (flat binary) の生成ツール elf2flt と
flthdr が実行時にエラーとなって実行バイナリの作成が行えない。
【対策】elf2flt と flthdr を FreeBSD のネイティブ実行バイナリを作成
して対応した。
elf2ftl と flthdr が static link されているのが原因なので uClinux
本家サイトからソースを探しダウンロードして FreeBSD 上 (エミュレー
タ上では無い) で FreeBSDネイティブな実行バイナリを作成して元の
Linux バイナリと置き換え (FreeBSDのエミュレータ環境では混在したバ
イナリも実行可能)。
※ binutils-2.14.tar.gz 及び elf2flt-20030816.tar.gz を使用、ただ
しそのままではコンパイル出来なかったので少しパッチを入れて
FreeBSD上でコンパイル及び実行出来る様にした。
------------------------- ここから --------------------------
begin 644 elf2flt-patch.gz
M'XL("''RKD```V5L9C)F;'0M<&%T8V@`S53;;MI`$'V&KYB0/`2:]email@hidden
M"#81E1.A0-14JH06>XU7-2;RI2E_W]FU38`0594J-2M;.SYS\\R<79\'`1`/
MR!A8%!A!E*G7#R/7KKX(398H%F"]U6KMFM6F80Y?:`R@@]:Q-`T?T#N76IT0
M<C!&;4(SN*5K,`S03:MM6&T-#$TS1?#M)9-I($413#_K`.ZD_@&.C]0YC]4T
M1-FUAV[_9M)M$%?-TT2-5AZ-U(C/&Q^!_7I:)email@hidden:*ZJWB@"_RA&&LC"8+
MEG7Q[PC^'GQ'`T*>>182=)\'?E=1U%)),%^>\2A5$5<+M4+W7/B<)=GZH-=&
M^R+MNF,\PF,ORGU&?)Z\E7K'I<3W_3:XH>BF6BI%U_!=TA\,:!35_==SOT5=
MP".F\'A_<ENJ'0YLX7*N_7P!^@6.UC),2^N(N;8/,6'?[X4/YJ5EZF_S03?/
MC)(3`*.[@?email@hidden/H0@][,RM+G6$?>HB4;=B!T6LP'DLZ"*]*%GC)$@&78@](
MFM&,>_4C<$?7A0KWGLP]F?9=5T"E*%#;&4HKL:.W/>W?WSC3V<GI8/S01+WS
MZ#B/4V%12+V"V;(HR>W_6!email@hidden>,L$AL>DI__L,8#7"MWQ=MGQD:QP[,-6IOF
M3+(,SD%K6]J%9;[-LA>OO^*8>7%email@hidden%9+.#DM6V"/[IO5H8)BM50T
M/*ZP3^)J"#\7*G2_I7B>0D9]EH#@/`2K!+*0P?70!KP-$IJL86_)B#email@hidden`
MCR<E9OYIV>?PJJUI3:FK$HI:PZOMG*5M"QQW"&G^)*_!/^0MJF#15LK9;/#M
MYNOH;C9K;E?8\-:+9QZ+RTD)&S7,-Y``Y"email@hidden*\@L%;/:TW05,F!U2TMF3Z
5NVLMTN9U8Q%\[YW]#3EY&7O$!P``
`
end
------------------------ ここまで -----------------------
4. uClinx-dist の環境設定 make menuconfig で使用される lxdialog がコン
パイル時にエラーになり、起動出来ない。
【対策】Linuxエミュレータ環境の ncurses ライブラリが不足しているの
が原因で本家 (GNUアーカイブ) よりソースをダウンロードしてライブラ
リを追加して対応。
5. その他
FreeBSD の Linux エミュレータ環境は /usr/compat/linux 以下に全て作
成される為、開発は別のアカウントを作成して先に Linux バイナリが実
行される様に PATH の設定を行った方が良い。
※ 誤って FreeBSD 側のバイナリ、ライブラリ等を壊すと悲惨な目にあ
います (^^;)
FreeBSD の ports にも ARM の開発環境が含まれているので、Linuxエミュ
レータを使わなくても Armadillo-J のクロス開発環境は構築可能と思われ
る、現在ぼちぼちとネイティブなクロス開発環境を構築中。
++++++++++++++++++ ここまで ++++++++++++++++++
--
草地 薫 (Kaoru Kusachi) E-Mail: email@hidden
Nakano, Tokyo, Japan.
armadillo メーリングリストの案内