Xilinx IDE installation based on Docker

GUI가 제공되는 Docker에 Xilinx 개발환경 설치

개인 프로젝트를 진행하는데 Xilinx에서 제공하는 레퍼런스의 개발환경이 제각각이다. 우선 기본적으로 IDE 2019.2 버전이 필요한데 현재 데스크탑에 설치되어 있는 개발환경은 2022.1이다. 재 설치를 하기 보다는 Docker로 가상화 공간에 별도의 개발환경을 설치해 보자

Docker GUI

How to use a GUI on the docker

Docker에서 개발환경을 가상화 하는 것은 좋은데 Docker는 기본적으로 CLI 환경만 제공한다. 그러나 많은 임베디드 개발환경은 설치 및 실행에서 GUI를 필요로 하기에 Docker에서 GUI를 구성하는 방법은 아래와 같다.

  1. desktop 환경이 설치된 Docker에서 VNC 이용
  2. SSH 기반에서 X11 Forwarding을 이용해 HOST에서 GUI를 띄운다.

1번째 방법은 GUI docker image를 다운받아 설정하고 여기에 ssh의 ForwardX11 옵션을 활성화 하면 2번째 방법도 지원이 된다.

Docker image 빌드 및 실행

선구자가 LXDE 환경의 Docker를 개발하였다. 하기 사이트에서 사용법을 읽어보자.

위의 이미지를 그대로 사용해도 되지만 시간 설정 등 몇가지 설정이 다르므로 이미지를 빌드하자. 아래는 필자의 개발환경 구성을 위한 dockerfile이다. 필자는 기본쉘로 zsh를 사용하지만 petalinux는 bash 환경에서 실행해야 함을 주의하자.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#from ubuntu20.04-vnc-dockerfile
FROM dorowu/ubuntu-desktop-lxde-vnc:latest

# timezone setup
ARG DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Seoul

# package add
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add - \
    && apt-get update \
    && apt-get install -y vim git openssh-server zsh fonts-powerline tzdata tio byobu language-pack-en language-pack-ko \
    && update-locale \
    && apt autoclean -y \
    && apt autoremove -y

# xilinx user add and password setup, and usb dev group add
RUN useradd -m -s /bin/zsh xilinx \
    && echo 'xilinx:xilinx' | chpasswd \
    && echo "xilinx ALL=(ALL:ALL) ALL" >> /etc/sudoers \
    && usermod -a -G dialout xilinx \
    && usermod -a -G plugdev xilinx

EXPOSE 80
WORKDIR /home/xilinx
ENV HOME=/home/xilinx \
    SHELL=/bin/zsh
HEALTHCHECK --interval=30s --timeout=5s CMD curl --fail http://127.0.0.1:6079/api/health
ENTRYPOINT ["/startup.sh"]
~

도커를 실행해보자. 하기 파일은 필자의 실행 스크립트이다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#!/bin/bash

CON_UBUNTU_VER="20.04"
CON_NAME="xilinx-dev"
CON_TAG="2023-3"
CON_USR_NAME="xilinx"
CON_USR_PWD="xilinx"
MAP_PORT_SSH="8091"
MAP_PORT_VNC="8092"
MAP_PORT_HTTP="8093"
VNC_PWD="xilinx"

echo ""
echo "######################################################"
echo "ubuntu $CON_UBUNTU_VER LXDE Base Docker"
echo "$CON_NAME platform : xilinx-ide "
echo "Port SSH: $MAP_PORT_SSH, VNC: $MAP_PORT_VNC, HTTP: $MAP_PORT_HTTP"
echo "######################################################"
echo ""

echo -n "Select Command 1)Run-Docker 2)Attach-Bash 3)Remove-Docker : "
read selCmd
if [ $selCmd = "1" ]; then

        echo -n "Select Resolution 1)FHD 2)QHD 3)UHD 4)Manual : "
        read selRes

        if [ $selRes = "1" ]; then
                resVal="1920x1080"
        elif [ $selRes = "2" ]; then
                resVal="2560x1440"
        elif [ $selRes = "3" ]; then
                resVal="3840x2160"
        elif [ $selRes = "4" ]; then
                echo -n "Input Resolution ex)1920x1080 : "
                read resVal
        else
                resVal="1920x1980"
                echo "Undefined Num, Set resolution FHD"
        fi

        sudo docker run -d --privileged \
                -p $MAP_PORT_HTTP:80 -p $MAP_PORT_VNC:5900 -p $MAP_PORT_SSH:22 \
                -e VNC_PASSWORD=$VNC_PWD -e RESOLUTION=$resVal -e USER=$CON_USR_NAME -e PASSWORD=$CON_USR_PWD \
                -v /dev/shm:/dev/shm -v /dev/bus/usb:/dev/bus/usb  -v $HOME/Workspace:/home/$CON_USR_NAME/Workspace \
                --name $CON_NAME $CON_NAME:$CON_TAG

elif [ $selCmd = "2" ]; then
        sudo docker exec -it $CON_NAME /bin/zsh -c "su - $CON_USR_NAME"

elif [ $selCmd = "3" ]; then
        sudo docker stop $CON_NAME
        sudo docker rm $CON_NAME
else
        echo "Input the collect decimal number"
fi

이후 Docker의 VNC에 연결하여 진행한다. 기본적으로 필요한 패키지들을 설치하고 만약 .bashrc가 없어서 터미널의 색깔이 이상하다면 해당파일을 복사한다.

1
cp /etc/skel/.bashrc $HOME

Petalinux Install

사전준비

  1. 필요 시 /bin/sh가 bash가 아니라면 변경한다. 하기 명령을 수행 후 no을 선택하면 bash로 변경됨
1
sudo dpkg-reconfigure dash
  1. 필요 패키지들을 설치한다.
1
2
3
sudo dpkg --add-architecture i386
sudo apt update
gawk 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 screen pax gzip python2.7 cpio
  1. 필요 시 locale에 en_US.utf8을 추가한다.
1
2
sudo apt-get install -y locales
sudo locale-gen en_US.utf8

Install

Petalinux 설치파일을 다운로드 하고 설치한다. sudo 권한 없이 설치해야하므로 설치폴더의 소유자는 현재 user로 한다.

1
2
3
4
sudo mkdir /tools/Xilinx/Petalinux/2019.2
sudo chown -R xilinx:xilinx /tools/Xilinx/Petalinux
chmod +x ${설치파일}
./${설치파일} /tools/Xilinx/Petalinux/2019.2

Vivado Install

  1. 설치파일을 다운로드 하고 설치를 진행한다.(sudo 권한으로 설치?)
  2. 필요 시 libtinfo5f를 설치한다.
1
2
3
chmod +x ${설치파일}
sudo ./${설치파일}
sudo apt-get install libtinfo5

Backup and import

  1. 레이어 병합을 위하여 docker의 export 명령으로 출력 시칸다.
1
sudo docker export --output="${파일이름}" ${컨테이너명}
  1. 백업된 파일을 입력시키고 싶다면 다음을 수행한다.
1
sudo docker import -c 'EXPOSE 80'  -c 'WORKDIR /root' -c 'ENV HOME=/home/ubuntu SHELL=/bin/bash' -c 'HEALTHCHECK --interval=30s --timeout=5s CMD curl --fail http://127.0.0.1:6079/api/health' -c 'ENTRYPOINT ["/startup.sh"]' 아카이브.tar 이미지이름:tag

Etc

  1. ssh 설치 후 자동 실행되지 않는다면 /startup.sh 파일에 ssh 서비스 스타트 명령을 기입한다.
    • 상기 파일의 마지막 줄은 헬스체크 프로세스 시작 명령이므로 이 위에 기입하면 된다.
comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy