10. Zynq デバイスドライバを使うC言語のプログラムからLEDを操作してみる

前回はシェルからデバイスドライバ経由で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します

Screen Shot 2015-01-12 at 16.14.23

led_blinkという実行ファイルが出来ると思います。

SDカードに入れて実行

早速sdカードに入れて実行しましょう。まず、sdカードにled_blinkを入れます

Screen Shot 2015-01-12 at 16.19.25

で、ZYBOに入れて実行してみましょう。

[shell]
mount /dev/mmcblk0p1 /mnt/
cd /mnt
insmod myled.ko
./led_blink

[/shell]

これでledが4つともチカチカするはず!

これでチュートリアルは終了です。
今後、自分の作ったIPをLinux側から使うとしてもLinuxのコンパイルはよほどのことがないかぎりもう1回ってことにはならないでしょう。あとu-bootも変更不要のはずです。なので、今後は

  1. Vivadoからbitstreramを作りBOOT.binを作る
  2. devicetreeを更新する
  3. デバイスドライバを書いてkoファイルを作る
  4. sdに書き実行

になるでしょう。