Published on

PetaLinux 포팅 기록

Authors
  • avatar
    Name
    JaeHyeok CHOI
    Twitter
    none

Petalinux 튜토리얼

개발 환경

OS: Windows 10 / WSL2 Ubuntu 18.04.05 LTS
CPU: i5-8400
RAM: 16GB
Vivado: 2022.01
Vitis: 2022.01
Petalinux: 2022.01

Part 18. Customizing Linux with PetaLinux

SW Section

PL 부분은 이미 구성되어 있는 .XSA 파일로 대체한다. ALINX 공식 Github에서 제공받은 Source 파일에 들어있는 파일 중, 0107 과정에 있는 linux_base 파일을 활용한다.

1. Petalinux Configuration

  1. petalinux-config
petalinux-config --get-hw-description ../linux_base.sdk

위 명령어에서 두 번째 파라미터 (디렉토리 부분) linux_base 파일 내에 있는 .xsa 경로로 입력한다.

  1. Linux Components Selection uboot와 Linux kernel은 이 선택화면에서 설정해줄 수 있으나, 이번 튜토리얼에서는 default 값으로 셋팅한다.

  2. Subsystem AUTO Hardware Settings 주변부와 startup 모드 설정은 위 설정에서 해줄 수 있다.

  3. Advanced bootable images storage Settings 부트 모드는 이 옵션에서 세팅할 수 있다. 기본 모드는 SD 카드로 부팅하는 것이고, 디버깅을 위해 SD카드의 기본 부팅을 유지한다.

QSPI Flash에 부팅된 임베디드 Linux를 생성해야 하는 경우에 여기서 세팅을 해주어야 한다.

  1. Default Settings 나머지 모드 디폴트로 세팅해준다.

2. Linux kernel Configuration

  1. petalinux-config -c kernel

리눅스 커널 관련 설정 창이다. 이번 튜토리얼에서는 default로 진행한다.

3. root file system Configuration

  1. petalinux-config -c rootfs

루트 파일 시스템을 설정하는 창이다. 이번 튜토리얼에서는 default로 진행한다.

2. Compile

uboot, kernel, root fs, device tree 등등을 설정한 후에는 빌드를 진행한다.

petalinux-build

ERROR Log

ERROR: mtd-utils-2.1.3-r0 do_package_qa_setscene: Fetcher failure: Unable to find file file://57/90/sstate:      mtd-utils:cortexa9t2hf-neon-xilinx-linux-gnueabi:2.1.3:r0:cortexa9t2hf-neon:7:5790a9be13ffc0e81dbd39b4dc3b6      e0cf54b3f343bab096dd9e16d7780fc12f5_package_qa.tgz.siginfo;downloadfilename=57/90/sstate:mtd-utils:cortexa9      t2hf-neon-xilinx-linux-gnueabi:2.1.3:r0:cortexa9t2hf-neon:7:5790a9be13ffc0e81dbd39b4dc3b6e0cf54b3f343bab096      dd9e16d7780fc12f5_package_qa.tgz.siginfo anywhere. The paths that were searched were:
    /home/digi24/vivado/petalinux/workspace/ax_peta/build/sstate-cache
    /home/digi24/vivado/petalinux/workspace/ax_peta/build/sstate-cache

petalinux 빌드 도중 위와 같은 에러가 났었는데, component 폴더 내부를 삭제한 후에 다시 빌드하여 보니 빌드에 성공하였다.

3. Generate BOOT file

BOOT 파일을 생성해 준다.

petalinux-package --boot --fsbl ./images/linux/zynq_fsbl.elf --fpga --u-boot --force

4. Testing Linux

이제 Petalinux를 테스트해볼 차례이다. ~/images/linux 디렉토리 내부의 BOOT.bin 파일과 image.ub 파일을 SD 카드에 복사하여 준다.

결과

실패

U-Boot 관련된 문제 혹은 SD 카드 문제인 것 같다. UG1144[petalinux-tools-reference-guide]를 참고하여 보자.

UG1144 참고 후

UG1144를 참고해보니, 튜토리얼과 다른 부분이 많았다. 역시 정식 문서를 봐야한다.. UG1144의 내용대로 petalinux 2022.1은 총 네개의 파일을 옮겨주어야 하며,

SD 카드의 파티션을 두 개로 나누어 줘야 한다.

  1. FAT32 (부팅 관련 파일들) 300MB 정도
  2. EXT4 (rootfs 리눅스 파일시스템 디렉토리) 나머지

그 이후 FAT32 파티션에

  • BOOT.BIN
  • image.ub
  • boot.scr 세 개의 파일을 옮겨준 후

EXT4 파티션에 rootfs.tar.gz을 풀어주어야 한다.

PetaLinux 부팅 성공?

드디어 PetaLinux 부팅에 성공했다.

원인은 SD 카드의 파티션 문제였던 것. Sd카드로 PetaLinux 부팅을 위해서는 Boot영역은 FAT32로, 루트 파일시스템은 Ext4으로 파티션을 구분하여 주어야 한다.

그리고 위에서 이야기했던 BOOT.BIN, image.ub, boot.src의 세 파일들은 FAT32 파일시스템에 넣어주고, rootfs.tar.gz 로 압축된 루트 파일 시스템은 EXT4 파일 시스템에 추출하여 넣어주어야 한다.

애석하게도 윈도우에서는 EXT4 파일 시스템으로의 포맷을 지원하지 않기 때문에 외부의 프로그램을 이용해야 하나, 비용이 발생하였다. 빨리 해결하고자 2만원 정도의 현금을 내면 되었으나, 해당 프로그램이 구독제기 때문에 해당 달에만 이용할 수 있다는 점에서 가지고 있던 컴퓨터에 우분투를 설치해버리기로 하였다.

우분투 설치 이후에 SD 카드를 FAT32, EXT4 파일 시스템으로 파티션을 구분하여 나누어 주었고, 빌드한 PetaLinux를 UG1144 내용대로 넣어주었다.

-PetaLinux 부팅 1- -PetaLinux 부팅 2-

드디어 성공...?

하였으나, root 계정에 접속되지 않는다... 분명 UG1144에는 default 계정이 root/root 이라고 되어있으나, 어찌된 영문인지 접속되지 않았다.

PetaLinux 2022.1

애석하게도 PetaLinux 2022.1 버전 부터는 root 계정으로의 접속을 기본적으로 disable 한다고 한다.

자세한 이유는 아래 링크..

AMD 공식 질문 링크

AMD 공식 해결 링크

이유

이유는 Yocto 에서 root 로그인을 기본적으로 막아두었고 이에따라 petalinux 또한 완전히 막아두었다고 한다. sudo 사용자 때문에 root로 로그인하는 것이 결국에는 아무 의미가 없다고 보기 때문이라고 한다. 또한 과거의 리눅스 배포판에서는 암호 없는 ssh 키를 사용하여 루트로 로그인해버려 네트워크 상에 암호가 그냥 돌아다닐 수 있다고 한다. (그래서인지, petalinux 부팅 중 ssh-rsa public key를 생성하는 과정이 존재한다.)

해결

완전한 해결책은 아니겠으나 보안을 무시하고 그냥 root 사용자를 사용하기 위해서는 petalinux 빌드 시에 debug-teaks라는 옵션을 켜서 사용할 수 있다.

해당 부분에서 space 키를 누르면 * 마킹이 된다.

이렇게 해준 뒤에 빌드해주고 실행하면?

PetaLinux 접속 성공

드디어..! 접속까지 성공하여 원하였던 Embedded PetaLinux 부팅에 성공하였다. 이제 이 보드의 하드웨어를 마음껏 수정하여 디바이스 드라이버 및 임베디드 리눅스 개발을 시작할 예정이다.