FPGA/petalinux

[Petalinux] Zybo-z7-20 보드에 petalinux 부팅하기 (SD카드)

섭섭입니다 2021. 3. 30. 15:23

저의 환경구성은 Windows 10, Ubuntu 18.04 64bit(vmware) 입니다.

 

 

 

기본적으로 github.com/Digilent/Petalinux-Zybo-Z7-20내용을 참고하며 따라했습니다.

 

Digilent/Petalinux-Zybo-Z7-20

Contribute to Digilent/Petalinux-Zybo-Z7-20 development by creating an account on GitHub.

github.com

 

 

위 내용에서는 Ubuntu 16.04.x LTS를 사용할 것을 적극 권장한다고 합니다.

 

하지만 저는 18.04 로 진행하였습니다.

 

 

이것 저것 찾아본 결과 bsp 파일과 petalinux 의 버전일치가 중요하다고 합니다.

 

아래에서 bsp 파일을 2017.4-3 을 사용하였고, petalinux도 2017.4 버전을 다운로드했습니다.

 

 


 

기본적으로 다운로드는 Ubuntu 환경에서 진행했습니다.

 

 

 

Downloads

Vivado, Vitis, Vitis Embedded Platform, PetaLinux, Device models

www.xilinx.com

 

 

Release Petalinux Project for Zybo Z7-20 v2017.4-3 · Digilent/Petalinux-Zybo-Z7-20

Changed I2C0 frequency to 100kHz for HDMI out

github.com

 

다운로드를 하게 되면 아래와 같은 파일이 생기게 됩니다.

 

 

 

이제 터미널 창에서 명령들을 입력하면 됩니다.

 

종속성 설치

 

sudo -s
apt-get install tofrodos gawk xvfb git libncurses5-dev tftpd zlib1g-dev zlib1g-dev:i386  \
                libssl-dev flex bison chrpath socat autoconf libtool texinfo gcc-multilib \
                libsdl1.2-dev libglib2.0-dev screen pax 
reboot

 

설치 시작

 

cd ~/Downloads ./petalinux-v2017.4-final-installer.run

 

 

마지막 두줄이 이렇게 나오면 설치 정상 완료

INFO: PetaLinux Yocto SDK for microblaze has been successfully installed.
INFO: PetaLinux SDK has been installed to /home/junseop/Downloads/petalinux/.

 

 

settings.sh

 

마지막 tftp 워닝이 뜨는데 무시해도 된다고 한다. 

 

 

아래와 같이 해결할 수도 있다고 하는데... 저는 해결이 안돼서 무시했습니다.

 

tftp 경고 해결하기


~$ sudo apt-get install xinetd tftp tftpd


~$ sudo vi /etc/xinetd.d/tftp


service tftp
{
    socket_type     = dgram
    protocol        = udp
    wait            = yes
    user            = root
    server          = /usr/sbin/in.tftpd
    server_args     = -s /tftpboot
    disable         = no
    per_source      = 11
    cps             = 100 2
    flags           = IPv4
}
 
-       tftp에서 파일을 제공할 때 사용하는 디렉토리 생성.
~$ sudo mkdir /tftpboot
~$ sudo chmod 777 /tftpboot
 
-       tftp서버 재기동.
~$ sudo /etc/init.d/xinetd restart

프로젝트 생성

 

petalinux-create -t project -s ~/Downloads/petalinux/Petalinux-Zybo-Z7-20-2017.4-3.bsp

 

 

 

프로젝트를 생성하게 되면 사진 정보와 같이 Zybo-Z7-20 이라는 폴더로 해당경로에 프로젝트가 생성되게 됩니다.

 

 

프로젝트 빌드

 

petalinux-build

 

 

빌드를 하려했지만 위와 같은 오류가 떠서... 구글링 을 통해서 해결방법을 알아내었다.

 

 

~/Downloads/petalinux/components/yocto/source/arm/layers/core/meta/classes/sanity.bbclass 의 코드의 내용을 아래와 같이 수정 해주면 됩니다.

 

 

파일을 열고 찾다보면 def sanity_check_locale(d) : 부분이 있다.

 

해당 부분에서 아래의 내용을 해당 위치에 맞게 추가합니다.

 

return # disabled by user due to problems with Ubuntu/testing

 

 

다시 빌드 시도

 

petalinux-build

 

 

 

동일 에러는 사라졌으나 다른 에러가 떴습니다. 하지만 프로젝트 빌드는 성공적으로 되어서 일단은 무시하고 진행했습니다.

 

 

petalinux-package --boot --force --fsbl zynq_fsbl.elf --fpga system_wrapper.bit --u-boot

 

워닝이 떴으나 아까 TFTP 워닝을 해결하지 못해서 또 뜨는것 같습니다.  이 또한 무시하고 넘어갔습니다.

 

 

 

 

petalinux-config

 

다음 옵션을 SD로 설정

 

 -> Image Packaging Configuration -> Root filesystem type

 

 system-user.dtsi 내용 수정

 

~/Downloads/petalinux/Petalinux-Zybo-Z7-20/Zybo-Z7-20/project-spec/meta-user/recipes-bsp/device-tree/files$ vi system-user.dtsi

 

 

bootargs = "console=ttyPS0,115200 earlyprintk uio_pdrv_genirq.of_id=generic-uio";

 

위의 내용을 아래와 같이 수정하고 저장 종료.

 

bootargs = "console=ttyPS0,115200 earlyprintk uio_pdrv_genirq.of_id=generic-uio root=/dev/mmcblk0p2 rw rootwait";

 

 

SD 카드 파티션 나누기

 

첫 번째 파티션에는 최소 500MB 이며 FAT 포맷 형식이어야 합니다. 

 

두 번째 파티션에는 최소 1.5GB (3GB 권장) 여야하며 EXT4 포맷 형식이어야 합니다.

 

(여기서 ext4 형식으로 포맷하는게 윈도우에서는 조금 기본적으로 제공하지 않아서 우분투 내에서 포맷하는 방법을 찾아서 포맷해보았습니다.)

 

 

포맷형식이 다르니 부팅자체가 안 됐습니다

 

 

우선 lsblk 를 통해서 자신의 SD 카드 용량을 찾아 NAME을 확인합니다.

 

 

lsblk

 

 

저는 sdb입니다. 2G가 첫 번째 파티션, 27.8G가 두 번째 파티션입니다.

 

 

fdisk -l

을 통해서 포맷 형식을 확인합니다.

 

 

첫 번째는 FAT로 잘 되어있구 두 번째는 exFAT 입니다.

 

두 번째인 sdb2를 아래와 같이 ext4로 바꾸어야합니다.

 

mkfs.ext4 /dev/sdb2

 

 

하지만 제대로 되질 않습니다.

 

 

umount -l /dev/sdb2
mkfs.ext4 /dev/sdb2

 

잘 된 것 같습니다..

 

 

 

이제 포맷완료한 SD카드에 아까 만든 부팅 이미지를 넣어줍니다.

 

첫 번째 파티션에는 pre-built에 있는 BOOT.bin image.ub를 복사 붙여 넣기 합니다.

 

두 번째 파티션에는 다음과 같이 진행합니다.

 

sudo umount /dev/sdX2

sudo dd if=images/linux/rootfs.ext4 of=/dev/sdX2

sync

 

그럼 두 번째 파티션에 무언가 생깁니다.. 그리고 

 

 

SD 카드의 추가 공간을 사용할 수 있도록 파일 시스템 확장. 한답니다

 

sudo resize2fs /dev/sdX2

sync

 

 

전부 완료 되었다면 SD카드를 분리하고 zybo 보드에 장착합니다. HDMI를 연결하고 usb로 전원을 인가하면 petalinux가 부팅이 됩니다!