Yocto SDK를 활용하여 Linux emWin 빌드

SMJ·2026년 5월 8일

BSP development

목록 보기
18/18

emWin vs Qt

  • emWin : 임베디드 기기용 GUI 라이브러리
  • Qt : 범용 애플리케이션 프레임워크

일반적으로 emWin 은 bare-metal 또는 RTOS 환경에서 LCD/터치 UI를 직접 그리는 형태이고 Qt는 Linux/Windows/macOS 같은 운영체제 위에서 동작하는 경우가 일반적이다.

MA35D1 보드에서 리눅스를 지원하기 때문에 Qt를 써도 되지만 emWin이 가볍고 간단한 수준의 동작만을 요구한다면 강점이 있기 때문에 리눅스 기반으로 emWin 빌드를 해보았다.

(대부분은 Non-OS나 RTOS 기반이라 조금 헤맸다..)

AppWizard GUI 구성 (Windows)

  • 구성 후 File → Export & Save

PTE7A0MI-16GI

Ubuntu 실행

0단계: 빌드 패키지 준비 (HostPC - Windows)

1단계: 빌드 패키지 준비 (Host PC - Linux)

# 압축해제
$ tar -zxvf MA35_Family_Linux_emWin_64bit_Package_20241125.tar.gz -C ~/

# 예제폴더로 이동
$ cd ~/MA35_Family_Linux_emWin_64bit_Package_20241125/Sample/SimpleDemoAppWizard

2단계: Yocto SDK 환경 로드 (Host PC - Linux)

# 1. SDK 환경 변수 설정 : 설치한 경로의 environment-setup 파일 실행
$ source /usr/local/oecore-x86_64/environment-setup-aarch64-poky-linux

# 2. 컴파일러 확인: 아래명령어를 쳤을 때 경로가 길게 나오면 됌
$ which $CC
> /usr/local/oecore-x86_64/sysroots/x86_64-pokysdk-linux/usr/bin/aarch64-poky-linux/aarch64-poky-linux-gcc

3단계: Makefile 수정 (HostPC - Linux)

  • SimpleDemoAppWizard 폴더 안에 있는 Makefile을 텍스트 에디터(VS Code, vi 등)로 열고 가이드 문서대로 수정
	.SUFFIXES : .x .o .c .s
    
    # environment로 source한 
    #CC=${CC}                 <-- 기존 aarch64-linux-gnu 주석처리
    LINK=$(CC)
    #STRIP=${STRIP}           <-- 기존 aarch64-linux-gnu-strip 주석처리
    CFLAGS=-MD -O2 -std=gnu99
    LDFLAGS=-L../../Lib -lNUemWin -lm -lts -ldl -pthread
    
    APPDIR=.
    CONFHEADER=../../Config
    GUIHEADER=../../Include
    CONFDIR=$(CONFHEADER)
    TSLIBDIR=tslib
    TSLIBHEADER=$(TSLIBDIR)
    GUIX=GUI_X
    
    BINARY=SimpleDemoAppWizard
    
    APPSOURCES := $(shell find $(APPDIR) -name '*.c')
    APPOBJECTS := $(addprefix ,$(APPSOURCES:%.c=%.o))
    APPDFILES := $(addprefix ,$(APPSOURCES:%.c=%.d))
    
    RM=rm -rf
    
    all: $(BINARY)
    
    $(APPDIR)/%.o: $(APPDIR)/%.c
            $(CC) $(CFLAGS) -I. -I$(CONFHEADER) -I$(GUIHEADER) -I$(TSLIBHEADER) -c $< -o $@
    
    $(CONFDIR)/$(GUIX).o: $(CONFDIR)/$(GUIX).c
            $(CC) $(CFLAGS) -I. -I$(CONFHEADER) -I$(GUIHEADER) -c $< -o $@
    
    $(BINARY): $(APPOBJECTS) $(CONFDIR)/$(GUIX).o
            $(LINK) $(APPOBJECTS) $(CONFDIR)/$(GUIX).o $(LDFLAGS) -o $(BINARY)
            $(STRIP) $(BINARY)
    
    clean:
            $(RM) $(BINARY) $(APPOBJECTS) $(APPDFILES) $(CONFDIR)/$(GUIX).o $(CONFDIR)/$(GUIX).d
    

4단계: 빌드 및 NFS 복사 (Host PC - Linux)

# 빌드 실행
$ make

# NFS rootFs으로 복사
$ cp SimpleDemoAppWizard /opt/nfsroot/home/root
# 터치 설정 파일 복사
$ cp ../../ts.conf /opt/nfsroot/etc/

5단계: 보드 실행 및 터치 보정 (Target Board)

  • 보드 시리얼 터미널에서 작업 마무리
# 1. 터치 환경 변수 설정
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_TSDEVICE=/dev/input/event0
    
# 2. 터치 보정 (최초 1회 필수)
ts_calibrate
    
# 3. App 실행
cd /home/root
chmod +x SimpleDemoAppWizard
./SimpleDemoAppWizard

6단계: 실행

root@numaker-som-ma35d16a81:~# ./SimpleDemoAppWizard
uVideoSize = 4915200
fb_vinfo.xres = 1024
fb_vinfo.yres = 600
fb_finfo.line_length = 4096
pVideoBuffer = 0xB2599000
Touch Task thread
Touch Task start
Main Task 2 thread
### g_xres=1024 g_yres=600 g_bits_per_pixel=32
button 3 clicked!
button 3 clicked!
profile
Embedded Junior Developer

0개의 댓글