재잼재잼의 티스토리

[Petalinux] Zybo Z7-20(Zynq-7000 SoC) 리눅스 부팅하기(1) 본문

MCU/Xilinx ZynQ

[Petalinux] Zybo Z7-20(Zynq-7000 SoC) 리눅스 부팅하기(1)

재잼재잼 2020. 2. 2. 18:07

나는 지금까지 AVR, ARM, Arduino와 같은 MCU에 non-OS 펌웨어만 개발해 왔었다.

Xilinx FPGA에 대해서는 들어본적도 없었고, Zynq라는게 있는지도 몰랐다. "임베디드 리눅스"에 관해서는 굉장히 필요한 기술이라 생각은 했지만, 혼자서 접근하기에는 어려움이 있어 계속 미뤄왔었다.

 

드디어 이 임베디드 리눅스를 하지않고는 안되는 상황이 와버렸다. 그것도 한번도 들어본적도 없는 ZynQ라는 SoC로 말이다. 한국자료도 많이 없고, Xilinx에서 제공하는 매뉴얼이나 유저가이드, 포럼을 참조하면서 할 수밖에 없어서 작은 것 하나 하는데도 시간이 많이 걸리고 어려운 부분이 많다.

보드에 리눅스를 올려서 부팅하는 것만해도 꽤 오랜시간이 걸린 것 같다.

 

아직 개념이나 동작 원리 같은 것도 자세히 모르지만, 정리를 하고싶어서 남긴다. 누군가에게 도움이되면 더 좋고 ㅎㅎ


1. 개발환경

   - OS : Windows 10 64bit, Ubuntu 16.04 64bit

   - Tools : Vivado 2019.1, Xilinx SDK 2019.1, Petalinux 2019.1, Teraterm

   - Target board : Zybo Z7-20(xc7z020clg-400-1)

Zynq 하드웨어 디자인을 위한 vivado, 소프트웨어 개발을 위한 XSDK, 리눅스 이미지 생성을 위한 petalinux, 시리얼모니터용 Teraterm을 사용했다. petalinux를 사용하면서 느낀건데, 버전을 일치 시켜주는게 굉장히 중요한 것 같다.

zybo에서 배포하는 BSP파일은 17.4인데, petalinux 2019.1에서 configbuild 수행 시 에러가 발생했었다...

 

2. Petalinux 설치

https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/embedded-design-tools.html

 

Downloads

Vivado - Embedded Development - SDx Development Environments - ISE - Device Models - CAE Vendor Libraries

www.xilinx.com

위 링크에서 Petalinux 설치파일을 다운로드 받을 수 있다. 크기가 8GB정도 되서 좀 부담스러웠다ㅋㅋ

Petalinux는 Linux OS에서 사용해야 하기 때문에 가상머신으로 Ubuntu를 만들어 줬다.

"UG1144"를 보면 요구사양이 있다. 최소 요구사양이 터무니없다.

내 노트북 램이 12GB인데 8GB는 무리다. 저렇게 많이 필요할까? 싶어서 기본설정(2GB)로 사용했었는데, 빌드나 config 동작 중에 계속 멈추더라.

그래서 4GB로 설정하니 멈추지않고 동작했다.

CPU core : 2개,

RAM : 4GB

HDD : 100GB

리눅스 버전 : Ubuntu 16.04.6 64bit

 

로 가상머신을 사용하고 있다.

 

파일을 받았다면, 리눅스에서 설치를 해야한다.

이런 종류의 메시지가 뜬다면 필수 패키지가 설치되지 않아서 나오는 메시지이므로, 아래의 명령을 사용하자.

sudo apt-get install -y python gawk gcc git make net-tools libncurses5-dev tftpd zlib1g:i386 libssl-dev flex bison libselinux1 gnupg wget diffstat chrpath socat xterm autoconf libtool tar unzip texinfo zlib1g-dev gcc-multilib build-essential libsdl1.2-dev libglib2.0-dev screen pax gzip

중간중간 약관읽고 동의해줘야 한다. q와 y키를 사용해보자.

UG1144에서는 Petalinux의 설치폴더를 "/opt/pkg/petalinux/2019.1"에 설치를 하는데, 나는 여기 설치하니까 권한에러가 자꾸 나오더라. root계정으로는 설치하면 안되고, 폴더권한을 777로 줘도 계속 문제가 생겨서 그냥 홈디렉터리에 설치했다.

 

자, 어찌어찌 설치에 성공했다면 Petalinux를 실행시켜보자. petalinux관련 명령어를 실행시키려면 설치폴더에 있는 settings.sh 파일을 적용해줘야 한다.

source ~/petalinux/2019.1/settings.sh

No tftp server found 경고가 나왔다. 에러가 아니라 상관없긴한데, 찝찝하니 해결해보자.

UG1144에는 아래와 같이 설명한다.

Without a TFTP service, you cannot download Linux system images to the target system using the U-Boot network/TFTP capabilities.

어차피 이미지를 network로 다운로드할게 아니라 상관없긴하지만...

 

더보기

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

이렇게 하고 다시 source 명령어를 실행시키면 정상적으로 실행됨을 볼 수 있다.

 

3. Hardware Description File(.hdf)를 만들기 --> 하드웨어 디자인 작성

여기서 사용하는 Zybo Z7-20의 BSP파일은 Digilent Github에서 제공하고 있다.

https://github.com/Digilent/vivado-boards

 

Digilent/vivado-boards

Contribute to Digilent/vivado-boards development by creating an account on GitHub.

github.com

다운로드해서 <Vivado설치폴더>\data\boards\board_files 에 넣어주자.

Vivado에서 board를 zybo z7-20으로 선택해서 프로젝트를 만들자.

프로젝트를 생성한 다음에는 Block Design을 만들어야한다.

아래와 같은 상태로 만들어주자. zynq_processing_system IP를 추가하고, run connection automation을 실행.

이후에 Create HDL Wrapper로 system wrapper를 만들어주고 Bitstream을 생성해주자.

 

성공적으로 생성했다면, File -> Export -> Export Hardware를 누르자. 그러면 프로젝트 폴더의 ~~.sdk폴더안에 방금 디자인한 하드웨어를 .hdf파일로 생성해준다. 이 파일은 petalinux 프로젝트를 만들때 필요하기 때문에 Ubuntu 가상머신에 옮겨두자.

 

4. Petalinux 프로젝트 생성

지금부터 Ubuntu환경에서 작업을 해야한다.

원하는 위치에서 petalinux 프로젝트를 생성해보자.

petalinux-create --type project --template zynq --name <project-name>

type 옵션은 프로젝트를 생성하겠다는 것을 의미하고, template는 사용하는 SoC종류를 입력한다. Zybo는 zynq-7000이기때문에 zynq를 사용했다. name은 프로젝트 이름을 적어주면 된다.

각 옵션에 대한 자세한 내용은 UG1144를 참고하자.

 

프로젝트를 만들고 나면, 우리가 디자인한 하드웨어에 대한 정보를 추가해줘야한다. 아래의 명령어를 입력하자.

petalinux-config --get-hw-descripton=<path-to-HDFfile>

vivado에서 생성한 hdf파일 경로를 입력해주면 된다.

petalinux Tool에서 hdf파일을 참조해서 "Device Tree", "u-boot config", "kernel config"를 자동으로 수행해준다.

위의 작업이 끝나갈 때 쯤, Petalinux-config 화면이 나온다.....

 

여기서부터는 다음 글에 이어서 쓰도록 하겠다.