Published on

AMD Xilinx Petalinux Wiki 정리

Authors
  • avatar
    Name
    JaeHyeok CHOI
    Twitter
    none

AMD Xilinx

AMD PetaLinux Tools (host)

PetaLinux tools eases the development of Linux-based products; all the way from system boot to execution with the following tools:

  • Command-line interfaces
  • Application, Device Driver & Library generators and development templates
  • Bootable system Image builder
  • Debug agents
  • GCC tools
  • Integrated QEMU Full system simulator
  • Automated tools
  • Support for AMD system debugger

이런 툴들을 사용하여 개발자들은 부트로더, 리눅스 커널, 리눅스 앱들을 커스텀할 수 있다. 새로운 커널, 디바이스 드라이버, 앱, 라이브러리, 부트 / 테스트 소프트웨어 스택들 또한 system simulator (QEMU) 혹은 JTAG/네트워크를 통한 물리적 하드웨어 위에 추가할 수 있다.

PetaLinux Tools Overview

Xilinx PetaLinux Tools are available at no-charge, make it easy for developers to configure, build and deploy essential open source and systems software to Xilinx silicon, including:

  • FSBL
  • U-BOOT
  • ARM Trusted Firmware
  • Linux
  • Libraries and applications
  • Xen Hypervisor

UG1144 PetaLinux Tools Installation Requirements

Introduction

PetaLinux는 FPGA를 기반으로하는 SoC 혹은 FPGA를 위한 임베디드 리눅스 SDK이다. Yocto의 기본 개념과 같은 OS 및 호스트 시스템 기능도 알아야 한다.

PetaLinux 도구 포함 내용

  • Yocto 확장 가능 SDK (eSDK)
  • XSCT 및 툴체인
  • PetaLinux CLI 도구

PetaLinux SDK는 임베디드 Linux 시스템을 빌드, 개발, 테스트, 배포하는데 필요한 모든 것을 포함하는 AMD 개발 도구이다.

PetaLinux 이미지 빌드 방법 두 가지 -> 2024.2 버전부터 사용가능하다.

  1. XSCT flow .xsa 파일을 입력으로 제공하여 xsct flow를 사용한다. petalinux-config
  2. system device tree system-device-tree를 사용하여 xsct에 의존하지 않고 이미지를 빌드할 수도 있다. 입력은 petalinux-config xsa 대신 system-device-tree 이다.

PetaLinux CLI 도구

  • petalinux-create
  • petalinux-config
  • petalinux-build
  • petalinux-util
  • petalinux-package
  • petalinux-upgrade
  • petalinux-devtool
  • petalinux-boot

환경 설정하기

내 작업 환경

OS: Windows 10 / WSL 2.0 Ubuntu 18.04.5 LTS
CPU: i5-8400
RAM: 16 GB

설치 요구사항

  1. 루트 액세스 권한
  2. Linux 호스트 워크스테이션에 여러 표준 개발 도구와 라이브러리 설치 필요. (릴리즈 노트에 나열된 라이브러리와 도구를 호스트 Linux에 설치)
  3. /bin/sh 가 dash 인 경우 -> bash 로 변경해야 함. sudo dpkg-reconfigure dash 를 사용할 것.

패키지 버전: 여기서 찾아볼 것

PetaLinux 도구 설치

PetaLinux를 위한 도구들을 설치해야 한다.

  • netstat => net-tools로 설치
  • xterm
  • autoconf
  • libtool
  • texinfo
  • zlib1g-dev
  • gcc-multilib
  • build-essential
  • ncurses-dev
  • libncurses5-dev

*zlib1g-dev:i386 설치 문제

sudo dpkg --add-architechture i386
sudo apt-get update
sudo apt-get install -y zlib1g:i386

이 명령어 실행해서 설치 완료.

PetaLinux 설치

chmod 755 ./petalinux-v<petalinux-version>-final-installer.run
./petalinux-v<petalinux-version>-final-installer.run 

필요한 도구들을 설치완료했으면 위와 같이 PetaLinux를 설치해 준다. 환경 세팅을 위하여 settings.sh를 실행해 준다.

디자인 흐름 개요

일반적으로 Petalinux 도구는 순차적 워크플로우 모델을 따른다.

  1. 하드웨어 플랫폼 생성
  2. Petalinux 프로젝트 만들기
  3. Petalinux 프로젝트 초기화
  4. 시스템 수준 옵션 구성
  5. 사용자 구성 요소 생성
  6. U-Boot 구성
  7. Linux 커널 구성
  8. 루트 파일 시스템 구성
  9. 시스템 구축
  10. 시스템 배포를 위한 패키지
  11. 테스트를 위한 시스템 부팅
  12. 작업 공간 업그레이드
  13. Yocto devtools 명령 사용
  14. 디버그 유틸리티 사용 하단 표 참고
디자인 흐름

프로젝트 생성

Petalinux BSP를 사용한 프로젝트 생성

Petalinux bsp는 지원되는 보드에서 참조 설계로, 이를 통해 작업을 시작하고 자신의 프로젝트를 사용자 정의할 수 있다. 또한, 이러한 설계는 지원되는 보드에서 자신의 프로젝트를 만드는 기반으로 사용할 수 있다. Petalinux BSP는 설치 가능한 BSP 파일 형태로 제공되며, 모든 필수 설계 및 구성 파일, 사전 빌드 및 테스트된 하드웨어, 보드에 다운로드 하거나 QEMU 시스템 에뮬레이션 환경에서 부팅할 준비가 된 소프트웨어 이미지가 포함된다. 원하는 위치에 BSP를 다운로드할 수 있다.

3일 간의 뻘짓 로그

  1. petalinux-create 이후
  2. petalinux-config 을 해주는 와중에 계속해서 오류가 발생했다.
petalinux-config --get-hw-description ../../../workspace/course_1/petalinux_01/design_1_wrapper.xsa

이 명령을 실행하면, Failed to Connect sever.. 라면서 yocto 빌드가 실패한다.

네트워크 문제 인가 싶어서 다음의 블로그를 참고했다.

https://shaun289.blogspot.com/2020/06/wsl2-ubuntu-2004.html

우선 네트워크의 TFTP를 설치하고자 WSL1 을 WSL2 로 변경, WSL의 네트워크 연결을 위하여 NAT로 연결된 네트워크 스위치를 브릿지 모드로 변경해주면서 WSL2의 가상 스위치를 조작할 수 있도록 하였다. 그 이후 TFTP를 설치 하려고 했으나, 인터넷이 안되어 버렸다.

원인

3일 간의 고통 끝에 드디어 해결했다. 후..

우선, WSL2에 대해서 먼저 알아야 한다. 내가 이전에 설치해두었던 WSL은 Windows의 Subsystem 으로써, VM 내에서 실제 Linux 커널을 사용하지 않고 마이크로소프트가 개발한 리눅스 호환 커널 인터페이스를 제공하며 그 위에 리눅스 유저랜드를 실행시킬 수 있도록 한다. 유저랜드란 배시 셸과 명령언어를 포함할 수 있는 네이티브 리눅스 명령 줄 도구들과 프로그래밍 언어 인터프리터가 내장된 사용자 영역에서 실행하는 모든 응용 프로그램을 의미한다. (일반적으로는 OS가 커널과 상호 작용하기 위해 사용하는 여러 프로그램과 라이브러리를 가리킨다.)

반면, WSL2 는 관리되는 VM 내에서 실제 Linux 커널을 사용하고, 전체 시스템 호출 호환성이 증가된 WSL 이다. 최신의 가장 뛰어난 Hyper-V 가상화 기술을 사용, 경량 유틸리티 VM 내에서 Linux 커널을 실행한다. WSL2는 관리되는 Vm 내에서 격리된 컨테이너로 Linux 배포를 실행한다.

출처: 위키, MS docs

결국, WSL2는 가상화 기술을 사용해 컨테이너에 Linux를 실행시킨다. 따라서, 내부 네트워크 장치 또한 존재하게 되며, 하나의 NIC를 Windows 내부의 VM과 공유하여 사용하여야 한다.

WSL2로 활성화/업데이트를 시키면, Hyper-V 기능이 On 되게 되는데, Windows의 Hyper-V 관리자에 들어가 보면 가상화 스위치 기능이 있다.

이 가상화 스위치 기능을 활용하여 네트워크를 VM에 연결해주어야 한다. 일반적으로 이 가상화 스위치를 활성화하게 되면 NAT 모드로 동작하기 때문에 만약 VM을 통하여 서비스를 하거나 VM 외부로부터 VM에 접속 가능하게 하려면 가상 스위치 속성에서 연결 형식을 외부 네트워크로 변경해주어야 한다. 지금 당장은 이걸 사용할 것은 아니므로 내부 네트워크(NAT 모드)로 사용하도록 한다.

사실 이것을 설정하는데에 많은 시간이 걸렸는데, WSL --shutdown을 통해서 설정해준 Hyper-V의 가상 스위치가 동작할 것으로 생각하였다. 하지만, 메인 호스트인 Windows 컴퓨터를 재부팅하니 정상 동작하였다. Hyper-V 설정을 마친 후에는 재시작하여 제대로 동작할 수 있도록 해주자.

이후, 제어판 - 네트워크 및 인터넷 - 네트워크 연결 설정에 들어가서 WAN으로 연결된 이더넷의 속성에 들어가서 공유 탭에서 다른 네트워크 사용자가 연결할 수 있도록 허용 -> 홈 네트워킹 연결을 vEthernet (WSL) 을 추가해주도록 한다.

이 과정을 통해서 드디어 정상적으로 동작한다.

Petalinux-build

이제는 build를 해야 한다. Yocto를 통해서 config한 설정 파일의 레시피 대로 필요한 파일들을 다운로드 받아서 빌드를 진행하게 될 것이다.

[INFO] Sourcing buildtools
[INFO] Building project
[INFO] Sourcing build environment
[INFO] Generating workspace directory
INFO: bitbake petalinux-image-minimal
NOTE: Started PRServer with DBfile: ~/vivado/petalinux/workspace/ax7010/build/cache/prserv.sqlite3, Address: 127.0.0.1:44017, PID: 20248
Loading cache: 100% |#############################################################################| Time: 0:00:01
Loaded 5392 entries from dependency cache.
Parsing recipes: 100% |###########################################################################| Time: 0:00:00
Parsing of 3592 .bb files complete (3590 cached, 2 parsed). 5394 targets, 554 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies
Initialising tasks: 100% |########################################################################| Time: 0:00:04
Checking sstate mirror object availability: 100% |################################################| Time: 0:00:19
Sstate summary: Wanted 462 Local 16 Network 298 Missed 148 Current 1115 (67% match, 90% complete)
NOTE: Executing Tasks
NOTE: Tasks Summary: Attempted 4216 tasks of which 4200 didn't need to be rerun and all succeeded.
INFO: Failed to copy built images to tftp dir: /tftpboot
[INFO] Successfully built project

tftp가 없어서 에러는 떴으나 project 빌드에 성공하였다.

Boot 이미지 생성

petalinux-package --force --boot --fpga <.bit 파일> --u-boot --kernel

SD 카드에 넣을 부팅 이미지를 생성해 준다.

이렇게 하면 FSBL, FPGA 비트스트림, u-boot, 커널 이미지 등이 BOOT.BIN 파일로 생성된다.

오류 발생

Boot 이미지를 생성한 후에 Boot.bin, image.ub, boot.scr 파일들을 SD카드에 넣고 AX7010 보드 전원을 켜 본 결과 아무 것도 실행되지 않는다...

다시 Boot 이미지 생성 부분을 확인해 보니,

[INFO] Sourcing buildtools
INFO: Getting system flash information...
INFO: File in BOOT BIN: "/home/digi24/vivado/petalinux/workspace/ax7010_2/ax7010/images/linux/zynq_fsbl.elf"
INFO: File in BOOT BIN: "/home/digi24/vivado/workspace/course_1/petalinux_01/petalinux_01.runs/impl_1/design_1_wrapper.bit"
INFO: File in BOOT BIN: "/home/digi24/vivado/petalinux/workspace/ax7010_2/ax7010/images/linux/u-boot.elf"
INFO: File in BOOT BIN: "/home/digi24/vivado/petalinux/workspace/ax7010_2/ax7010/images/linux/system.dtb"
INFO: File in BOOT BIN: "/home/digi24/vivado/petalinux/workspace/ax7010_2/ax7010/images/linux/boot.scr"
INFO: File in BOOT BIN: "/home/digi24/vivado/petalinux/workspace/ax7010_2/ax7010/images/linux/image.ub"
INFO: Generating zynq binary package BOOT.BIN...


****** Xilinx Bootgen v2022.1
  **** Build date : Mar 30 2022-09:29:13
    ** Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.

[WARNING]: Partition zynq_fsbl.elf.0 range is overlapped with partition design_1_wrapper.bit.0 memory range
[WARNING]: Partition zynq_fsbl.elf.0 range is overlapped with partition boot.scr.0 memory range
[WARNING]: Partition zynq_fsbl.elf.0 range is overlapped with partition image.ub.0 memory range
[WARNING]: Partition design_1_wrapper.bit.0 range is overlapped with partition boot.scr.0 memory range
[WARNING]: Partition design_1_wrapper.bit.0 range is overlapped with partition image.ub.0 memory range
[WARNING]: Partition system.dtb.0 range is overlapped with partition image.ub.0 memory range
[WARNING]: Partition boot.scr.0 range is overlapped with partition image.ub.0 memory range

[INFO]   : Bootimage generated successfully

INFO: Binary is ready.
WARNING: Unable to access the TFTPBOOT folder /tftpboot!!!
WARNING: Skip file copy to TFTPBOOT folder!!!

이런 Warning이 떠 있었다. 읽어보면 메모리 영역이 Overlapped 되어 있다는 것인데, 아무래도 Flash 부팅을 했는데, 메모리 영역의 주소 값이 잘못 세팅되어 있는 것 같다.

오늘은 이쯤 해두고 Youtube를 참고하여 Flash 메모리 재설정해주는 방법을 조사해봐야 겠다.

오류

digi24@DESKTOP-99TJSIQ:~/vivado/petalinux/workspace/ax7010$ petalinux-package --boot --force --fsbl images/linux/zynq_fsbl.elf --fpga images/linux/system.bit --u-boot [INFO] Sourcing buildtools INFO: Getting system flash information... INFO: File in BOOT BIN: "/home/digi24/vivado/petalinux/workspace/ax7010/images/linux/zynq_fsbl.elf" INFO: File in BOOT BIN: "/home/digi24/vivado/petalinux/workspace/ax7010/images/linux/system.bit" INFO: File in BOOT BIN: "/home/digi24/vivado/petalinux/workspace/ax7010/images/linux/u-boot.elf" INFO: File in BOOT BIN: "/home/digi24/vivado/petalinux/workspace/ax7010/images/linux/system.dtb" INFO: Generating zynq binary package BOOT.BIN...

****** Xilinx Bootgen v2022.1 **** Build date : Mar 30 2022-09:29:13 ** Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.

[WARNING]: Partition zynq_fsbl.elf.0 range is overlapped with partition system.bit.0 memory range

[INFO] : Bootimage generated successfully

INFO: Binary is ready. WARNING: Unable to access the TFTPBOOT folder /tftpboot!!! WARNING: Skip file copy to TFTPBOOT folder!!!