📚
Vitisに入門してみる。(3)PetaLinuxにパッケージを追加+Lチカ成功
環境
Vitis 2022.2
Vivado 2022.2
Windows 11
Ubuntu20.04 on WSL2
Arty Z7-20
System.bit
無事Petalinuxを起動することができたが、コマンドが初期のままなのでほぼ何もできない。
また、前回の最後で
DTG Settings --->[*] Remove PL from devicetree
しているため、PL側の機能を全く使えないという問題がある。
調べてみると、images下にあるsystem.bitが(PL側の?)ビットストリームということであり、これをBOOT.BINに含まればいいっぽい。
パッケージするときに
petalinux-package --boot --fpga ./images/linux/system.bit --u-boot --force
とすることで、無事PL側の機能を使うことができた。
パッケージ追加
続いて
petalinux-config -c rootfs
でrootfsにパッケージを追加する。
Filesystem Packages --> misc --> packagegroup-core-buildessential --> packagegroup-core-buildessential-dev
User Packages --> gpio-demo
gccとgpio-demoを追加して、ビルドし、SDに書き込む。
動作確認
$ ls /sys/class/gpio/
export gpiochip1020 gpiochip902 unexport
$ cat /sys/class/gpio/gpiochip1020/label
41200000.gpio
のようにして、/sys/class/gpio/以下にGPIOが存在するか確認する。
labelを表示させるとgpiochip1020がアドレス41200000のGPIOに対応していることがわかる。
devmemでLチカ
$ sudo devmem 0x41200000 32 0x1
Lチカ記念
gpio-demoでLチカ
$ sudo gpio-demo -g 1020 -i
0x00000001
$ sudo gpio-demo -g 1020 -o 3
$ sudo gpio-demo -g 1020 -i
0x00000003
PetaLinux上で作成したプログラムからLチカ
を参考にして
test.c
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
#include <errno.h>
int main(int argc, char **argv)
{
printf("Hello World!\n");
int fd;
fd = open("/sys/class/gpio/export", O_WRONLY);
write(fd, "1020", 4);
close(fd);
fd = open("/sys/class/gpio/gpio1020/direction", O_WRONLY);
write(fd, "out", 3);
close(fd);
fd = open("/sys/class/gpio/gpio1020/value", O_WRONLY);
write(fd, "1", 1);
while(1) {
write(fd, "0", 1);
usleep(1*1000*1000);
write(fd, "1", 1);
usleep(1*1000*1000);
}
close(fd);
return 0;
}
を書く。viは入っている。
gcc test.c
sudo su
./a.out
で実行するとLEDが1秒間隔で点滅する!
Discussion