FrontPage
2014/10/12からのアクセス回数
FM3上のuCLinuxの動作確認しながら、どうやってユーザ用のプログラムをビルドしたら良いのかとはたっと気づいた。
UserAppsディレクトリを作成し、その中にアプリケーション用のディレクトリを作成します。
$ mkdir UserApps $ mkdir UserApps/hello $ cd UserApps/hello }}
uClinuxのコンパイルに使ったuclinuxeabiのToolchainを使い、インクルードファイル、ライブラリパスを 正しくセットすれば、uClinux上で動作することが分かりました。
export CFLAGS="-mcpu=cortex-m3 -march=armv7-m -mthumb -elf2flt -I/home/take/local/arm-2011.03/arm-uclinuxeabi/include -L/home/take/local/arm-2011.03/arm-uclinuxeabi/libc/thumb2/usr/lib -lc" arm-uclinuxeabi-gcc $CFLAGS -o hello hello.c }}
そこで、以下のMakefileを使ってhello.cをビルドすることにします。
CC = arm-uclinuxeabi-gcc TOOL_DIR = /home/take/local/arm-2011.03 CFLAGS = -mcpu=cortex-m3 -march=armv7-m -mthumb \
LDFLAGS = -elf2flt -lc -L$(TOOL_DIR)/arm-uclinuxeabi/libc/thumb2/usr/lib
EXEC = hello OBJS = hello.o
all: $(EXEC)
$(EXEC): $(OBJS)
clean:
}}
initramfs_lfcq1_min.txtに以下の一行を追加してmake uImageをやり直します。
file /bin/hello UserApps/hello/hello 755 0 0 }}
bootmで起動して、helloを動かして何とかHello Worldが出力できました。
/ # hello Hello World / #
}}
Hello Worldのコンパイルができたので、今度はCプログラムからLEDを点滅させる Lチカ(blink)を試してみます。
lbedのDigitalOutをuClinuxで実装してみます。
DigitalOut.hは、以下の様にしました。
typedefint PinName;
class DigitalOut { public:
protected:
};
}}
DigitalOut.cppは、/sys/class/gpioを使った実装になっています。
static char buf[64]; static int len;
DigitalOut::DigitalOut() : _pin(NC), _fd(NC), _val(0) { }
DigitalOut::DigitalOut(PinName pin) : _pin(NC), _fd(NC), _val(0) {
}
void DigitalOut::setup(PinName pin) {
}
void DigitalOut::write(int value) {
}
DigitalOut::~DigitalOut() {
}
}}
そしてこれらを使うblink.cppは、以下の様にします。
main() {
}
}}
アップロードしてブートした後、/sysにsysfsをマウントしてblinkを実行して LEDが点滅することを確認しました。
Freeing init memory: 204K Welcome to
Fujitsu FM3/FM4 port. For further information check:
/ # mount -t sysfs sysfs /sys / # blink
}}
皆様のご意見、ご希望をお待ちしております。勉強会で分からなかったこと等、お気軽に問い合わせて下さい。
スパム防止に画像の文字列も入力してください。