대표 이미지콘테스트 참가 = 프로젝트 생성
이 콘테스트에 참가신청을 하시면 하나의 프로젝트가 생성됩니다. 콘테스트 프로젝트 완성단계 [3개의 Quest]를 완료하면서 점진적으로 프로젝트를 완성해 나갑니다. 완성된 프로젝트는 e4ds make platform 에서 여러분의 포트폴리오로 활용할 수 있습니다.
STM32MP1 완전 정복 퀘스트 챌린지

진행 일정
참가 접수
프로젝트 생성
Quest 1 제출
개발 환경 구축 : Ubuntu 환경 및 STM32MP1 개발 패키지
Quest 2 제출
Yocto 환경 구축 및 STM32MP157C-DK2 보드 실행
Quest 3 제출
A7/ M4 예제 데모 시현 (LED control, Button detect)
Quest 4 제출
A7/ M4 예제 응용 데모 시현
Quest 5 제출
QT Layer 추가 및 빌드
Quest 6 제출
이미지 빌드 및 QT 환경에서의 예제 실행
Quest 7 제출
[자율과제] Application 선정 및 다양한 기능 구현
결과 발표
Quest는 프로젝트를 완성하는 단계별 여정입니다
각 Quest는 독립된 제출물이 아닌, 하나의 프로젝트를 발전시키는 과정입니다. Quest 1에서 시작한 프로젝트가 Quest 2, 3를 거치며 점점 완성되어 갑니다. 모든 Quest를 완료하면 플랫폼에 등록된 완성된 프로젝트 하나가 탄생합니다.
Quest 1 · 개발 환경 구축 : Ubuntu 환경 및 STM32MP1 개발 패키지
첫번째 퀘스트는 플랫폼 보드 없이 개발환경을 구축하는 단계입니다.
Ubuntu 환경을 만들고 STM32MP1 개발 패키지인 Starter + Developer Package를 설치하고,
설치된 Developer Package에서 빌드를 성공시킨다.
0. [필수조건] Shell prompt에 사용자 식별을 위한 ‘w', ‘whoami’, ‘uname -a’를 입력하여 출력.
1. Developer Package에 포함된 리눅스 커널을 빌드한 뒤 [필수조건]과 함께 한 화면에 출력되도록 하여 Capture한 뒤 제출한다.
2. 리눅스 커널에 이어 커널 모듈과 artifact들을 빌드하고 그 내용을 ‘tree' 명령 및 'ls' 명령으로 출력하고 [필수조건]과 함께 한 화면에 출력되도록 하여 Capture한 뒤 제출한다.
3. Developer Package에 포함된 U-Boot를 빌드한 뒤 [필수조건]과 함께 한 화면에 출력되도록 하여 Capture한 뒤 제출한다.



Quest 2 · Yocto 환경 구축 및 STM32MP157C-DK2 보드 실행
STM32MP1의 Distribution Package의 Yocto 환경 구축하고 빌드 된 이미지를 STM32MP157C-DK2보드에 올립니다.
“Hello World” 유저 어플리케이션을 작성한 뒤 해당 보드 터미널에서 실행시켜보세요.
- STM32MP1 Distribution Package를 Unbuntu에 설치하여 bitbake 성공화면을 제출합니다.
- 2. bitbake 빌드 후에 생성되는 이미지들을 ‘FlashLayout_sdcard_*.tsv파일과 함께 STM32CubeProgreammer를 사용하여 기록(flashing)합니다.
호스트와 DK2 보드를 연결하여 터미널을 통해 출력되는 로그 화면을 아래 그림처럼 제출합니다.
(* 호스트에서 dd 명령을 사용한 sdcard 기록 방법을 사용해도 무방합니다) - 간단한 Hello world 유저 어플리케이션 작성하여 DK2 보드에 업로드 한 후 실행한 화면을 체출합니다.
~/STM32MPU_workspace/STM32MP15-Ecosystem-v1.2.0/Distribution-Package/openstlinux-20-02-19
1. 위 경로에 layers.tar.gz를 복사해주시고 압축 해제
tar xvf layers.tar.gz
2. 압축 풀기가 완료 되었으면 Distribution_package 중 repo sync까지 완료 된 상황입니다. 그 이후 부터 진행하시면 되겠습니다.
3. 참고로 bitbake를 통해 다운 받은 데이터의 크기가 커서, 최소 30GB 이상 여유 공간을 확보하시고 진행하시기 바랍니다.
=> 다운로드는 밤에 걸어 두면 아침에는 다 받아져 있을 것입니다.
=> 충분한 저장 공간과 시간을 염두하시기 바랍니다.



Quest 3 · A7/ M4 예제 데모 시현 (LED control, Button detect)
- SDK 추출, 생성 결과물 및 설치 결과물에 대한 디렉토리 정보와 함께 컴파일러(arch=armv7ve)의 정보(디렉토리 위치, CC 환경변수) 출력하여 제출 (* Sample screenshot 참고)
- SDK 를 사용하여 빌드 된 executable file 의 정보를 target(DK2 board) 시스템 정보를 함께 출력하여 제출 (* Sample screenshot 참고)
- MP1 터미널(tty serial, ssh, target terminal등)에서 LED blinking 어플리케이션 실행하면 LED가 깜빡이는 장면 영상 제출
- Write the A7 application 참고
- Execute the A7 application on the DK2 board.



Quest 4 · A7/ M4 예제 응용 데모 시현
STM32CubeIDE(+STM32CubeMX)를 사용하여 STM32MP1 co-processor (M4) 애플리케이션을 작성(+디버그)하고 DK2 target 보드에 설치하여 동작 시켜 보세요.
애플리케이션은 USER1 버튼을 누를 때마다 (EXTI 사용) 바로 옆의 Red LED(LD6)를 토글시키는 동작 (GPIO Output 사용)을 합니다.
주의: LD5(GREEN LED)는 동일한 라인을 공유하므로 USER1 버튼과 함께 퀘스트 프로젝트에 사용 금지, 반대의 경우(LD6 + USER2)도 마찬가지.
- STM32CubeMX와 STM32CubeIDE를 사용하여 작성하고 빌드된 M4 프로젝트의 디렉토리 구조를 출력하여 제출.
- STM32CubeIDE상에서 USER1 버튼을 누를 때 Interrupt handler 또는 HAL callback에서 브레이크 포인트를 설정하여 캐치된 상태의 화면을 캡쳐하여 제출 (code symbol 창과 stack 창은 필수로 포함되어야 함)
- M4 펌웨어를 linux 부팅시에 로딩되도록 포함한 뒤에 부팅 로그를 캡쳐하여 제출.
- DK2 target 보드를 부팅(리셋)하여 바로 USER1 버튼을 누를 때마다 LD6가 토글되는 것(M4 펌웨어가 동작하는 것)을 영상으로 캡쳐하여 제출.




Quest 5 · QT Layer 추가 및 빌드
STM32MP1의 Distribution Package에 QT Layer가 추가 된 이미지를 빌드하여 올리고 QML로 작성 된 Hello World 예제를 작성해 보세요.
- bitbake를 실행하여 성공한 결과 화면 제출
- Desktop에서 Hello world 예제 실행 화면 제출
- 보드 LCD에 출력된 Hello world 예제 실행 화면 제출
- Hello World 예제 소스코드 제출
- 1. Qt가 포함 된 이미지 만들기
- Distribution Package에서 QT meta-layer가 추가되어 있는지 확인 (참조1, 참조2)
- bitbake-layers show-layers
- st-example-image-qt 이미지 빌드(참조3)를 위해 아래 command 참고
- DISTRO=openstlinux-eglfs MACHINE=stm32mp1 source layers/meta-st/scripts/envsetup.sh
- bitbake st-example-image-qt
- Flashing the built Image
- 커널 이미지 사이즈가 맞지 않아 flashing 되지 않을 경우 참조4 확인 하여 .tsv파일 수정하여 flashing
- Distribution Package에서 QT meta-layer가 추가되어 있는지 확인 (참조1, 참조2)
- 2. Desktop Qt 환경 설정하기
- 제공받은 평가판 License를 이용해 account.qt.io에 접속
- 개발 환경에 맞는installer를 이용하여 Qt 5.11.3설치 (Ubuntu 기준 예시)

- Qt Creator를 실행하여 새 프로젝트 생성 및 Hello World 개발 및 실행 (https://doc.qt.io/qtcreator/quick-projects.html#creating-empty-qt-quick-applications)
- 3. 개발 된 Application source를 빌드할 수 있도록 1 단계의 Yocto layer 에 recipe로 추가
- 4. Application을 bitbake로 빌드
- 5. 빌드 한 결과를 target에 copy
- 6. QT Application Launching
- 예제 실행 실행 중인 splash 를 중단 해야 application 실행 가능
- # psplash-drm-quit
- Yocto layer에 configuration을 변경 해야 각 recipe 별 빌드 결과 확인 가능
- build…/conf/local.conf 내용 의 rm_work 라인 주석 처리 필요.

Quest 6 · 이미지 빌드 및 QT 환경에서의 예제 실행
퀘스트 5에서 작성된 Hello World 예제를 기반으로 아래 단계별 기능을 수행하는 시계 예제를 작성해 보세요.
- 각 화면 및 Swipe 동작 화면 영상 제출
- Executable실행 파일 제출
- 각 기능은 각자의 화면을 가지며 서로간에 이동 가능
- 현재 시간을 숫자로 표시하는 화면 1 (디지털 시계)
- 타이머 기능을 수행하는 화면 2 (타이머 현재 시간 표시, lap time 표시, 시작, 중지, lap 버튼)
- 화면1 , 화면2을 Swipe 제스처로 이동할 수 있도록 확장.
Quest 7 · [자율과제] Application 선정 및 다양한 기능 구현
마지막은 자율 과제입니다.
특정 Application을 선정하시어 해당 Application에 맞게 다양한 기능들을 구현해 보세요.
- 보드상에서 최종 결과물이 동작하는 영상 제출.
- Executable실행 파일 제출
제출하신 동영상을 검토하며 아래 항목에 해당되는 영역들의 점수를 합산하게 됩니다.
| 구성 (30%) | 다양한 H/W및 S/W 솔루션을 접목한다면 가산점이 부가됩니다. |
|---|---|
| 디자인 요소 (20%) | QT의 다양한 기능들을 활용하고 아름답게 연출된다면 가산점이 있습니다. |
| 창의성 (20%) | 창의적이고 재미있는 결과물일 수록 점수가 가산됩니다. |
| 완성도 (20%) | 그 제출물의 완성도에 따라 점수가 달라집니다. |
| 기여도 (10%) | 퀘스트들을 진행하며 다른 분들에게 도움을 주신 분들에게 드리는 점수입니다. |
