카테고리

asm (27) bootloader_x86_grub (1) C (92) compile (11) config (76) CPP (13) CSS (1) debugging (7) gimp (1) Go (1) html (1) Java (1) JavaScript (1) kernel (19) LibreOffice (3) Linux system progamming (21) MFC (1) opencv (4) OpenGL (1) PHP (1) Python (4) qemu (29) shell (3) socket (7) troubleshooting (2) ubuntu18.04 (2) windows (1)

2019/01/01

Zink 프로젝트

Zink 프로젝트
https://gitlab.freedesktop.org/kusma/mesa/tree/zink

OpenGL 공식 사이트
https://www.opengl.org/

메사 - 3D 그래픽 라이브러리
https://www.mesa3d.org/

차세데 컴퓨터 그래픽 API
https://www.khronos.org/vulkan/

차세대 컴퓨터 그래픽 API 사용해, OpenGL을 구현함.
더 구체적으로 Zink는 Mesa의 기존 OpenGL을 활용하여 Vulkan 드라이버를 사용할 수 있다면 하드웨어 가속을 위해 OpenGL을 제공 하는  Mesa Gallium 드라이버임.

Mesa 아키텍처 개요
Application
-----------
Mesa
-----------
GalliumOpenGL State Tracker
-----------+-----------------------
Zink       | Other Gallium drivers
-----------+-----------------------
Vulkan

Vulkan 기반 OpenGL 특징

- 그래픽 스택 단순화
- 향후 GPU 드라이버 작업 부하
- 통합 사용
- Vulkan 응용프로그램 포팅

1. 그래픽 스택 단순화
OpenGL의 방대한 API를 개발자가 사용하기 편하게 제 정의 및 기능 추가

2. 향후 GPU 드라이버 작업 부하 줄임
하드웨어 vulkan을 지원한다면 Vulkan은 기본적으로 Zink를 지원하고 OpenGL을 통해 수행한다.

3. 통합
Zink는 Mesa의 Gallium 드라이버로 구현.

무료 제공.

Gallium Nice나 Colver와 같은 프로젝트는 Zink를 통해 이론적으로 i965 Vulkan 드라이버 상단에서 동작 할 수 있다.아직 테스트 하지 않는 상태임.

클로즈드 소스 Vulkan 드라이버 위에 Zink를 실행하고 적절한 윈도우 메니지먼트 통합 시스템을 확인 할 수 있다.

4. Vulkan 응용 프로그램 포팅 지원
Zink 애플리케이션에서 OpenGL과 Vulkan 코드 협력 사이의 계층 역할을 할 수 있는 방법으로 확장 할 수 있다.

5. Zink 요구 사항
Zink는 현재 Vulkan 1.0 구현이 필요하며 다음과 같은 확장을 제공한다.
확장 기능이 더 있지만 여기서는 크게 두가지 형태로 분리한다.

VK_KHR_maintenance1: 뷰포트를 뒤집기
VK_KHR_external_memory_fd: 렌더링 된 결과를 화면에 표시하는 방법

5.1 Zink 지원
OpenGL 2.1 과  OpenGL ES 1.1과 2.0

6. zink 미지원
glPointSize() 현재 지원하지 않음.
gl_PointSize 버텍스 쉐이더에서  쓰기 가능.

텍스처 테두리는 현재 항상 검은 색.
Vulkan이 임의의 테두리 색상을 지원하지 않기 때문에 일부 에뮬레이션 코드도 필요핟.

이더에서는 제어 흐름이 지원되지 않음. opcode에 대한 구현 부족.

GL_ALPHA_TEST 지원되지 않음.

glShadeModel(GL_FLAT) 지원하지 않음.


7. 빌드
프로젝트 사이트: https://gitlab.freedesktop.org/kusma/mesa

빌드 시스템 프로젝트 사이트: https://mesonbuild.com/
                             https://ninja-build.org/

meson 빌드 시스템만 지원한다.
zink gallium-driver(-Dgallium-drivers=zink) 활성화

$MESA_LOADER_DRIVER_OVERRIDE 환경 변수 사용해 드라이버 zink 지정.

$ git clone https://gitlab.freedesktop.org/kusma/mesa.git mesa-zink
Cloning into 'mesa-zink'...
...
Checking out files: 100% (5982/5982), done.

$ cd mesa-zink
$ git checkout zink
Branch 'zink' set up to track remote branch 'zink' from 'origin'.
Switched to a new branch 'zink'

$ meson --prefix=/tmp/zink -Dgallium-drivers=zink build-zink
The Meson build system
...
Found ninja-X.Y.Z at /usr/bin/ninja

$ ninja -C build-zink install
ninja: Entering directory `build-zink'
...
installing /home/kusma/temp/mesa-zink/build-zink/src/gallium/targets/dri/libgallium_dri.so to /tmp/zink/lib64/dri/zink_dri.so
$ LIBGL_DRIVERS_PATH=/tmp/zink/lib64/dri/ MESA_LOADER_DRIVER_OVERRIDE=zink glxgears -info
GL_RENDERER   = zink (Intel(R) UHD Graphics 620 (Kabylake GT2))
GL_VERSION    = 2.1 Mesa 18.3.0-devel (git-395b12c2d7)
GL_VENDOR     = Collabora Ltd
GL_EXTENSIONS = GL_ARB_multisample GL_EXT_abgr

GitLab CI 속도 향상

GitLab CI 속도 향상

GNOME GitLab은 AWS rnuners를 가지고 있지만, 개인이 포크해 푸시할 때가 아니라, 업스트림(작업 단계) 저장소 코드를 푸시하는 경우에만 사용된다.
개인 포크의 경우, 공유 관련 문제로 몇 시간 기다릴 수 있음.

그래서 이 기다림 때문에 CI를 구축해 사용한다.

1. 도커 설치
apt install docker.io

2. gitlab-runner 설치
2.1 저장소 추가

프로젝트 사이트:
https://gitlab.com/gitlab-org/gitlab-runner/blob/master/docs/install/linux-repository.md#installing-the-runner

2.1 gitlab 공식 저장소 추가.
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash

추가
sudo cat > /etc/apt/preferences.d/pin-gitlab-runner.pref <<EOF
Explanation: Prefer GitLab provided packages over the Debian native ones
Package: gitlab-runner
Pin: origin packages.gitlab.com
Pin-Priority: 1001
EOF

참고: 우분투 18.04 패키지 동작안함.

2.2 저장소 최신 버전 설치
sudo apt-get update
sudo apt-get install gitlab-runner

2.3 특정 버전 설치
apt-cache madison gitlab-runner
sudo apt-get install gitlab-runner=10.0.0

---> 설치 했다면 4. gitlab-runner 서비스 시작부터 진행.
2.4 최신 버전 업데이트
sudo apt-get update && sudo apt-get install gitlab-runner

3. 저장소 업그레이드
GitLab Runner를 10.0 이전 버전에서 업그레이드

3.1 기존 저장소 삭제.
sudo rm /etc/apt/sources.list.d/runner_gitlab-ci-multi-runner.list
2.1 gitlab 공식 자장소 추가 부터 다시 진행.

4. gitlab-runner 서비시 시작
sudo gitlab-runner start

5. 등록
현 개발 서버 구축한 gitlab 프로젝트 패이지 이동.
settings -> CI/CD -> expand "runners"

6. 사용할 도코 기반 이미지 등록
sudo gitlab-runner register --non-interactive --url https://gitlab.gnome.org --executor docker --docker-image //운영체제버전fedora:27 --registration-token ****

7. .bashrc 등록
vi ~/.bashrc

function gitlab-register {
  host=$1
  token=$2

  case "$host" in
    gnome)
      host=https://gitlab.gnome.org
      ;;
    fdo)
      host=https://gitlab.freedesktop.org
      ;;
    collabora)
      host=https://gitlab.collabora.com
      ;;
    mylocal_service)
      host=https://local.gitlab.nautilus
      ;;
    *)
      host=https://gitlab.gnome.org
      token=$1
  esac

  cmd="sudo gitlab-runner register --non-interactive --url $host --executor docker --docker-image fedora:27 --registration-token $token"

  #$cmd

  ssh builder.local -t "$cmd"
}

그놈 빌더 사용

그놈 빌더.

https://wiki.gnome.org/Apps/Builder

GNOME 환경을 위해 설계된 통합 개발 환경
git 버전 제어 가능.
GNU 디버거 사용 응용 프로그램 디버깅.
GTK-DOC을 사용하여 인라인 문서보기 가능.

임베디드 환경 구축
플러그인 추가 sysroot로 지정, 내부 컴파일이 필요한 크로스 컴파일러 지원 추가.

1. 시스템 루트지정
Autotools, CMake 또는 Meson 인 빌드 시스템은 시스템의 표준 디렉토리에서 종속성을 제공함.
--sysroot 옵션을 사용해 한다.
이 옵션을 사용하면 구성 요소를 찾을때 다른 시스템 루트 디렉토리에 찾는다.

요즘 라이브러리는 pkg-config를 지원한다.
루트 디렉토리를 확인하고 있는지 검토해야 함.

그놈 빌더는 이러한 작업을 자동화 해 주는 "Sysroot" 모듈을 만들어다.

일단 프로젝트 구성 생성되면 런타임 섹션에서 sysroot를 사용할 수 있다.
빌드 버튼을 클릭하면 sysroot를 사용하여 응용 프로그램을 빌드 할 수 있음.


2. 크로스 컴파일 사용
그놈 빌더 3.29.2 개발 버전에서 Toolchain 개념 도입 함.

시스템 표준 위치에 설치된 크로스 컴파일 자동 확인 기능.
시스템에 잘 정의한 디렉토리의 Meson에 대한 크로스 컴파일 구문 분석 기능.
Meson 및 CMake 프로젝트 디렉토리 구문 분석 기능.
Yocto 루트 디렉토리 연결 정의 된 sysroot는 SDK와 함께 설치 툴체인 제공.

그놈 빌더는 QEMU에 동작 하는 응용프로그램을 지원하므로 GUI 환경에서 크로스 컴파일 된 GTK + 응용 프로그램을 직접 빌드하고 실행 할 수 있음.

1. ODROID XU3
2. 그놈 빌더 다운로드 및 설치
apt-get install flatpack
(flatpak install https://gitlab.gnome.org/GNOME/gnome-apps-nightly/raw/master/gnome-builder.flatpakref)
사용하고 있는 패키지 관리자를 통해 크로스 컴파일로 설치
sudo apt install gcc-arm-linux-gnueabihf

3. 루트 파일 시스템 복사(https://odroid.in/?directory=.%2Fubuntu_18.04lts%2F) ~/sysroot
오드로이드에서 제공하는 이미지를 사용해 /home/user/sysroot 복사

4. 그놈 빌더를 시작($ flatpak run org.gnome.Builder) 하고 Preferences -> SDKs 버튼 클릭 sysroot 추가하고 sysrootfs 구성에 따라 팝업을 채워준다.
패키지 컨피그 경로: pkg-config 파일 설정이다.

5. 그놈 빌더 시작 화면, git 소스코드 다운로드
복제 클릭
git 다운로드 사이트 경로 지정 gitlab.collabora.com/tintou/gnome-builder-sample-app.git
복제 클릭 하면 지정한 저장소로 소스 코드를 다운로드 한다.

6. 크로스 컴파일 설정 및 루트 파일시스템 경로 지정
Preferences -> SDKs 버튼 클릭 -> 툴체인 추가에서 크로스 컴파일러 지정

7. headerbar의 omnibar를 클릭 clean 한 다음 build 실행 버튼을 사용해 컴파일 한 후 테스트 할 수 있음.