”
”FPGA+SoC+Linux+Device Tree Overlay+FPGA Manager(PYNQ-Z1対応)”を試してみる5(デバイスツリー・オーバーレイ)”の続き。
前回は、デバイスツリー・オーバーレイを試して、成功した。今回は、FPGAをコンフィギュレーションする FPGA Manager を試してみた。
(2017/04/06:修正 デバイスツリー・オーバーレイとFPGA Manager がうまく動作した)最初に PYNQ ボードのFPGA 部分をコンフィギュレーションする。
まずは、
lsmod で、どんなモジュールが insmod されているか?を確かめた。
fpgacfg も入っている。
ls /dev/fpgacfg0 をやってみたが、すでにデバイスがあった。
pynq_led_test_wrapper.bit を WinSCP で PYNQ ボードの Debian に転送した。/home/fpga/device_tree_overlay ディレクトリに転送した。

FPGA をコンフィギュレーションした。
su
echo 1 > /sys/class/fpgacfg/fpgacfg0/data_format
echo 1 > /sys/class/fpgacfg/fpgacfg0/load_start
cp pynq_led_test_wrapper.bit /dev/fpgacfg0
するとDONEランプが点灯した。
次に、
デバイスツリー・オーバーレイを行った。
mkdir /config/device-tree/overlays/uio_gpio_0
cp uio_gpio_0.dtbo /config/device-tree/overlays/uio_gpio_0/dtbo
echo 1 > /config/device-tree/overlays/uio_gpio_0/status
ls /dev/uio0
/dev/uio0 をユーザーからもリード、ライトできるように、chmod を 666 に設定した。
ls -l /dev/uio0
chmod 666 /dev/uio0
ls -l /dev/uio0
pynq_led_test.c を作成した。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <assert.h>
#include <sys/mman.h>
#include <fcntl.h>
int main() {
int fd;
volatile unsigned int *led_gpio;
fd = open("/dev/uio0", O_RDWR);
if (fd < 1){
fprintf(stderr, "/dev/uio0 open error\n");
exit(-1);
}
led_gpio = (volatile unsigned int *)mmap(NULL, 0x10000, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
if (led_gpio == MAP_FAILED){
fprintf(stderr, "mmap error\n");
exit(-1);
}
unsigned int i = 0;
while(i<17){
led_gpio[0] = i++;
sleep(1);
}
munmap((void *)led_gpio, 0x10000);
return(0);
}
pynq_led_test.c を gcc でコンパイルした。
gcc -o pynq_led_test pynq_led_test.c
./pynq_led_test を起動すると、LD3~0が2進数で +1 されて表示された。

デバイスツリー・オーバーレイとFPGA Manager がうまく動作した。
- 2017年04月06日 06:09 |
- PYNQ
-
| トラックバック:0
-
| コメント:0