早速、NetBSD-RPI で Volumio 計画を始めます。
まずは開発環境を整えないと話になりません。
NetBSD のいいところは、何と言っても OS 思想に組み込まれたマルチプラットホーム。Raspberry PI Port も当然のようにあります。いや、誰かが作ってくださったからあるので、当然なんかじゃないんですけどね。
なので、この恩恵にあずかるべく、x64 環境で ARM-7 をクロスコンパイルします。
NetBSD の設計思想に従うのであれば、Build.sh を使ってコンパイルするんですが、実は私、これがあまり好きではありません。コンパイルするときに、いちいちオプション引数を大量に渡さないといけないので、面倒なんです・・・・
なもんで、統合 Makefile を使います。
work/ | +---- Makefile | +---- src | +--- bin | +--- sys . . .
こんな感じに Source を展開して、work ディレクトリで make コマンドを実行すれば、クロスコンパイルツールをつかってコンパイルしてくれるという仕組みです。NetBSD は 7-Release
※ src ディレクトリの下に、NetBSD の全 Source を展開するという意味ですよ。
んでまって、その Makefile がこれ
今のところ、これでコンパイルできるのは、
make tools
make sys
のみです。言わずもがな、ビルドツールのコンパイルと、Kernel のコンパイルです。
なお、この Makefile は作業中のものなので、要らないターゲットとか、ゴミがごっそり入ってます。使いこなしたい方は、再利用するなり、消すなり好きにしてください。
んでまって、大切な注意が一つ、コマンドサーチ path に ./ が含まれていると、ビルドツールのコンパイルに失敗します。
/bin/sh /usr/work/NetBSD-RPI/src/tools/gcc/../../external/gpl3/gcc/dist/gcc/mkconfig.sh bconfig.h
c++ -c -O -DIN_GCC -DCROSS_DIRECTORY_STRUCTURE -fno-exceptions -fno-rtti -fasynchronous-unwind-tables -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wmissing-format-attribute -pedantic -Wno-long-long -Wno-variadic-macros -Wno-overlength-strings -DHAVE_CONFIG_H -DGENERATOR_FILE -I. -Ibuild -I/usr/work/NetBSD-RPI/src/tools/gcc/../../external/gpl3/gcc/dist/gcc -I/usr/work/NetBSD-RPI/src/tools/gcc/../../external/gpl3/gcc/dist/gcc/build -I/usr/work/NetBSD-RPI/src/tools/gcc/../../external/gpl3/gcc/dist/gcc/../include -I/usr/work/NetBSD-RPI/src/tools/gcc/../../external/gpl3/gcc/dist/gcc/../libcpp/include -I/usr/work/NetBSD-RPI/src/tools/gcc/../../external/gpl3/gcc/dist/gcc/../libdecnumber -I/usr/work/NetBSD-RPI/src/tools/gcc/../../external/gpl3/gcc/dist/gcc/../libdecnumber/dpd -I../libdecnumber -I/usr/work/NetBSD-RPI/src/tools/gcc/../../external/gpl3/gcc/dist/gcc/../libbacktrace -DNETBSD_TOOLS -DTARGET_SYSTEM_ROOT=0 -DTARGET_SYSTEM_ROOT_RELOCATABLE \
-o build/genconstants.o /usr/work/NetBSD-RPI/src/tools/gcc/../../external/gpl3/gcc/dist/gcc/genconstants.c
/var/tmp//ccIeCbYA.s: Assembler messages:
/var/tmp//ccIeCbYA.s:6: Error: unrecognized symbol type ""
/var/tmp//ccIeCbYA.s:10: Error: bad instruction `movq (%rdi),%rax'
/var/tmp//ccIeCbYA.s:11: Error: bad instruction `cmpq $0,16(%rax)'
/var/tmp//ccIeCbYA.s:12: Error: bad instruction `jne .L4'
/var/tmp//ccIeCbYA.s:13: Error: bad instruction `subq $8,%rsp'
/var/tmp//ccIeCbYA.s:15: Error: bad instruction `movq 8(%rax),%rdx'
/var/tmp//ccIeCbYA.s:16: Error: bad instruction `movq (%rax),%rsi'
/var/tmp//ccIeCbYA.s:17: Error: bad instruction `movl $.LC0,%edi'
/var/tmp//ccIeCbYA.s:18: Error: bad instruction `movl $0,%eax'
/var/tmp//ccIeCbYA.s:19: Error: bad instruction `call printf'
/var/tmp//ccIeCbYA.s:20: Error: bad instruction `movl $1,%eax'
/var/tmp//ccIeCbYA.s:21: Error: bad instruction `addq $8,%rsp'
/var/tmp//ccIeCbYA.s:23: Error: bad instruction `ret'
/var/tmp//ccIeCbYA.s:25: Error: bad instruction `movl $1,%eax'
/var/tmp//ccIeCbYA.s:26: Error: bad instruction `ret'
<後略>
こんなのが出たら、コマンド Path に ./ が含まれてます。
クロス用の gcc をコンパイルしている途中に、Host 用の cc でコンパイルしないといけないのに、クロス用 cc を使ってコンパイルした結果、アセンブラが意味わかんねーよ!とエラーになるみたいですね
コメントする