前回はシェルからデバイスドライバ経由でledを操作しましたが、C言語から操作してみましょう。基本的にはチュートリアルに従うだけです
user_app
digilentディレクトリにuser_appを作成します
[shell]
mkdir user_app
cd user_app
[/shell]
led_blink.cを作ります。
[c]
#include
#include
#include
int main()
{
FILE* fp;
while(1) {
fp = fopen(“/proc/myled”, “w”);
if(fp == NULL) {
printf(“Cannot open /proc/myled for write\n”);
return -1;
}
fputs(“0x0F\n”, fp);
fclose(fp);
sleep(1);
fp = fopen(“/proc/myled”, “w”);
if(fp == NULL) {
printf(“Cannot open /proc/myled for write\n”);
return -1;
}
fputs(“0x00\n”, fp);
fclose(fp);
sleep(1);
}
return 0;
}
[/c]
そして、Makefile
[shell]
CC = arm-linux-gnueabi-gcc
CFLAGS = -g
all : led_blink
led_blink : led_blink.o
$(CC) $(CFLAGS) $^ -o $@
clean :
rm -rfv *.o
rm -rfv led_blink
.PHONY : clean
[/shell]
CC = の値がチュートリアルとは違います。vivadoの方でなくgccを使います。
Makefileは同じくタブに気をつけて下さい。$(CC)の前の空白などは全てスペースでなくタブです。
それぞれ作成できたらmakeします
led_blinkという実行ファイルが出来ると思います。
SDカードに入れて実行
早速sdカードに入れて実行しましょう。まず、sdカードにled_blinkを入れます
で、ZYBOに入れて実行してみましょう。
[shell]
mount /dev/mmcblk0p1 /mnt/
cd /mnt
insmod myled.ko
./led_blink
[/shell]
これでledが4つともチカチカするはず!
これでチュートリアルは終了です。
今後、自分の作ったIPをLinux側から使うとしてもLinuxのコンパイルはよほどのことがないかぎりもう1回ってことにはならないでしょう。あとu-bootも変更不要のはずです。なので、今後は
- Vivadoからbitstreramを作りBOOT.binを作る
- devicetreeを更新する
- デバイスドライバを書いてkoファイルを作る
- sdに書き実行
になるでしょう。