개인 프로젝트를 진행하는데 Xilinx에서 제공하는 레퍼런스의 개발환경이 제각각이다.
우선 기본적으로 IDE 2019.2 버전이 필요한데 현재 데스크탑에 설치되어 있는 개발환경은 2022.1이다.
재 설치를 하기 보다는 Docker로 가상화 공간에 별도의 개발환경을 설치해 보자
Docker GUI
How to use a GUI on the docker
Docker에서 개발환경을 가상화 하는 것은 좋은데 Docker는 기본적으로 CLI 환경만 제공한다. 그러나 많은 임베디드 개발환경은 설치 및 실행에서 GUI를 필요로 하기에 Docker에서 GUI를 구성하는 방법은 아래와 같다.
- desktop 환경이 설치된 Docker에서 VNC 이용
- 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
사전준비
- 필요 시
/bin/sh
가 bash가 아니라면 변경한다. 하기 명령을 수행 후 no
을 선택하면 bash로 변경됨
1
|
sudo dpkg-reconfigure dash
|
- 필요 패키지들을 설치한다.
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
|
- 필요 시 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
- 설치파일을 다운로드 하고 설치를 진행한다.(sudo 권한으로 설치?)
- 필요 시 libtinfo5f를 설치한다.
1
2
3
|
chmod +x ${설치파일}
sudo ./${설치파일}
sudo apt-get install libtinfo5
|
Backup and import
- 레이어 병합을 위하여 docker의 export 명령으로 출력 시칸다.
1
|
sudo docker export --output="${파일이름}" ${컨테이너명}
|
- 백업된 파일을 입력시키고 싶다면 다음을 수행한다.
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
- ssh 설치 후 자동 실행되지 않는다면
/startup.sh
파일에 ssh 서비스 스타트 명령을 기입한다.
- 상기 파일의 마지막 줄은 헬스체크 프로세스 시작 명령이므로 이 위에 기입하면 된다.