新千葉 ガーベージ・コレクション

FPGA マガジンやインターフェースで書けなかったこと等をちょぼちょぼ書いてます。@ryos36

キメラ・コンパイラと busybox OK

とりあえず、きめーら(とほほ)コンパイラ完成。
キメーラコンパイラ = カッパ(Kappa) コンパイラ =
ペタコンパイラ 3.4.1
xillinx の kernel の ヘッダ
uClibc 0.9.2 新しくコンパイルした版

ここでもう一度 uClibc のコンパイルですよ
.config は

confirm ( not change )
UCLIBC_FORMAT_FLAT=y
ARCH_BIG_ENDIAN=y
ARCH_HAS_NO_MMU=y
ARCH_HAS_NO_SHARED=y

must
KERNEL_HEADERS="FPGA_Linux/install/kernel_header/include"

change
# UCLIBC_HAS_FPU is not set
# HAVE_NO_PIC is not set
# UCLIBC_CTOR_DTOR is not set

CROSS_COMPILER_PREFIX="microblaze-uclinux-"
追加

これで make だけになった
make V=2
おーできた。

make PREFIX=$HOME/FPGA_Linux/install/temporary/ install
あいかわらず crti.o crtn.o がたりない。
なんちゃってをつくるか

uClibc からこぴして crti.o crtn.o をつくる。
crt0.o(peta gcc-3.4.1が要求。これは xilkernel の環境を
このころの peta は
まだひきずっている) は
 crt1.o(uclibcが用意する) のリンク

rem:test> file test
test: BFLT executable - version 4 ram

はいうごいた(uclinux の rdinit で動いた)
Freeing unused kernel memory: 309k freed
Hello World by rem

昨日 syscall で妙な状態になったけど、
uclibc は
どうやら kernel のインクルードを見て
いろいろ自動生成するようだ。

だから、ちゃんと clean してから make しないといけない。

                                                • -

はい busybox のコンパイル。
これは .config さえちゃんとしとけばいいはずだよ。

ところが uClinux の dist は変なことをやっていて。

busybox の場合
まず defconfig を .config にコピー
さらに config/.config から busybox 用の情報を grep して
まぜあわせている
これは mkconfig という busybox の下のシェルプロがやっている。

トップで make user/busybox_only とできるのだけど、
.config を初期化してしまうので非常に面倒。

本当は busybox
make ARCH=microblaze CROSS_COMPILE=microblaze-uclinux-
とすればいいはず
デモエラー
make: *** No rule to make target `/config/.config', needed by `.config.mkconfig'

config.mkconfig
も関連しているんだよね、、、、

これだ
Makefile 内の
.config.mkconfig: $(ROOTDIR)/config/.config
sh ./mkconfig > .config.tmp
if cmp -s .config.mkconfig .config.tmp ; \
then \
rm -f .config.tmp ; \
else \
$(MAKE) clean; \
mv -f .config.tmp .config.mkconfig ; \
fi
これはたぶんオリジナルの busybox にはなくて、かってに dist がつけている。

# Modified for uClinux-dist, we generate the .config based on our
# global application config.

はいそうでした。
けずることにしました。

Rules.mk もかきなおし kernel_header を見るようにした。
#CFLAGS+=-I$(top_builddir)/include -I$(top_srcdir)/include -I$(srcdir)
CFLAGS+=-I$(top_builddir)/include -I$(HOME)/FPGA_Linux/install/kernel_header/include -I$(srcdir)

busybox/libbb/procps.c

#define PAGE_SHIFT (12) を加える。
どうも カーネルヘッダーとうまくいっていないらしい。header の要求が循環している
/home/ryos/FPGA_Linux/install/kernel_header/include/asm-generic/getorder.h: In function 'get_order':

あれあれ、いろんなものが undefine...

しかたがない dist に従うか、、、、

                                    • -

busybox もとにもどえす
vendor/Sinby をこぴ
vendor として Sinby prodcut としえてsp605 を選択

busybox Makefile 書き換え
.config.mkconfig の自動生成を抑制
#.config.mkconfig: $(ROOTDIR)/config/.config
# sh ./mkconfig > .config.tmp
# if cmp -s .config.mkconfig .config.tmp ; \
# then \
# rm -f .config.tmp ; \
# else \
# $(MAKE) clean; \
# mv -f .config.tmp .config.mkconfig ; \
# fi

busybox
make clean
config.mkconfig のコピー
cp ../_busybox/busybox_config.mkconfig .config.mkconfig

dist のトップディレクトリは
rem:petalinux-dist> ls include/
からっぽ

make で カーネルのメイクの途中で ^Cでとめる(あるいていど環境ができる)

make user/busyboxy_only
.config が上書きされていないことを確認
あれ?なぜか insmod をコンパイルしている、、、、
だめだ、、、、

                                            • -

dist をあきらめ オリジナルの busybox_1_00_rc3 を持ってくることにする。
busybox/libbb/procps.c に
#define PAGE_SHIFT (12) を加える。
どうも カーネルヘッダーとうまくいっていないらしい。header の要求が循環している

.config 書き換え
cross compiler と prefix を設定o
nfs と ifconfig をはずす

make clean
make ARCH=microblaze

さいご
microblaze-uclinux-strip: busybox: File format not recognized
でエラーになるけど(flt だから) できた!!
動くかね?

kernel 生成
make ARCH=microblaze CROSS_COMPILE=microblaze-unknown-linux-gnu- simpleImage.ryos_sp605
あっそか、いま kernel 3.0 の環境なんだ。
おーネットワークも入ってます。
dist に kernel 環境壊された、、、

復旧して動いた。