Don't think! Just do it!

종합 IT 기술 정체성 카오스 블로그! 이... 이곳은 어디지?

임베디드 소프트웨어/Zephyr

Zephyr 새 프로젝트 만들기

방피터 2022. 8. 1. 11:48

2022.07.30 - [임베디드 소프트웨어/Zephyr] - Zephyr RTOS 시작하기 - 설치 및 기본 예제

 

Zephyr RTOS 시작하기 - 설치 및 기본 예제

사실 제퍼 공홈 getting started 문서 보면 다 있는 내용들인데.. 다만 영어일 뿐이지. 그래도 조금씩 애매한 부분들이 있는데 그런 거 위주로 설명하도록 할게. 아래는 Zephyr getting started👇👇 https://d

engschool.tistory.com

제퍼 기본 예제(Blinky)를 해봤어. 그런데 그런데 이 예제는 zephyrproject 폴더 안에 프로젝트를 생성하는 방식이라서 여러가지 새로운 프로젝트가 추가되면 뭐.. 복잡해서 보겠나? 그래서 깔끔하게 새로운 폴더 위치에 새로운 프로젝트를 생성해보자구. 우선 제퍼 문서를 조금 읽어보니 3가지 형태의 application이 있다고 해. 1. repository application과 2. workspace application은 둘 다 zephyrproject 폴더에다가 프로젝트를 만들고 유지하는 거지. 응~ 난 그렇게 안해~ 지저분해~ 별도의 workspace에다가 프로젝트 별로 새로운 폴더에 만들고 싶어. 마지막 남은 3. Zephyr freestanding application이 새로운 폴더에 프로젝트를 생성하는 방식이야.

제퍼 3가지 타입

그럼 이름도 거창한 Zephyr freestanding application을 어떻게 만들면 될까? ㅋㅋㅋㅋㅋ 그냥 니들이 원하는 위치에 새로운 폴더를 만들면 돼 ㅋ 뭐야 이게 ㅋㅋㅋ 암튼 아래 👇 를 보면 폴더 구조가 나와 있는데 단순히 zephyrproject 폴더와 별도의 위치에 새로운 프로젝트 폴더를 만드는거야. 새로운 프로젝트 폴더를 만들고 나면 내부에 기본적인 파일들을 생성해주기만 하면 끝이야.

Zephyr freestanding application

새 제퍼 프로젝트가 기본적으로 갖춰야 파일은 다음과 같아.

  1. CMakeLists.txt 파일
  2. prj.confg 파일
  3. src 폴더와 그 안에 main.c 파일

CMakeLists.txt 는 제퍼 프로젝트가 어떤 보드를 사용하고 있는지, 어떤 프로젝트 파일을 추가할지, 제퍼 패키지는 어디 있는지 등등의 설정을 담고 있어. W5500-EVB-PICO를 사용할 때는 아래 정도로 작성해면 돼. W5500-EVB-PICO 보드는 아직 제퍼에 공식적으로 지원되는 보드가 아니니까 일단 rpi_pico로 해두자고. 보통 이런 커스텀 보드들은 원작을 최대한 따라하기 때문에 기본 LED 정도는 동일하거든. 새로운 보드를 생성하는 건 천천히 하자.

# SPDX-License-Identifier: Apache-2.0

cmake_minimum_required(VERSION 3.20.0)
set(BOARD rpi_pico)

find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(myapp)

target_sources(app PRIVATE src/main.c)

그리고 prj.conf 는 Kernal에 대한 옵션 설정들이 들어 있는데 지금은 어떤 옵션들이 있는지 지금은 나도 잘 몰라. 공부를 해봐야겠지. 난 기본적으로 아래와 같이 설정했어. 첫 번째 라인은 C++ 가능하도록 하는 것고 두 번째 라인은 GPIO 드라이버를 포함시킬지 말지 하는 옵션.

CONFIG_CPLUSPLUS=y
CONFIG_GPIO=y

 

마지막으로 src 폴더에 실제로 동작할 main.c 파일을 만드는 거지. 그런데 우리는 본격적으로 제퍼 OS를 공부해본 적도 없어 ㅋㅋ 그래서 나도 어떤식으로 코드를 짜야 하는지 몰라. 이럴땐 어떻게? 그렇지 예제를 불러오는 거지. Blink를 그대로 복사해서 붙여넣어. ~/zephyrproject/zephyr/samples/basic/blinky/src/main.c 에 있어 -_-;;; ㅋㅋㅋㅋ 암튼 이걸 복사해서 우리가 새로 만든 프로젝트 폴더에 복붙. 이제 동작을 잘 하는지 빌드를 해보자구.

west build

그런데 아래처럼 뭔가 에러가 나오면 백퍼 환경변수 문제야. 난 이미 다 수정했지만 보여주려고 억지로 환경변수를 변경했어. 재현이 안되더라구.

환경변수가 정상적으로 설정안되어 있을 경우 에러

암튼 문서에서는 👇 zephyrproject/zephyr 폴더에 있는 zephyr-env.sh 파일을 이요해서 환경 변수를 설정한다고 되어 있는데 난 뭔 난리를 쳐도 설정이 잘 안되더라고.

zephyr-env.sh를 통한 환경변수 설정

그래서 ~/.zshrc 파일에서 억지로 ZEPHYR_BASE를 설정해줬어.👇

export ZEPHYR_BASE="/Users/peterbang/zephyrproject/zephyr"

설정이 끝났으면 source 명령으로 터미널에 바로 적용시켜주고 west build로 빌드를 하면 끝!

source ~/.zshrc

그러면 터미널에서 빌드 텍스트가 주르륵 떨어지면서 빌드가 잘 되었다는 메세지를 볼 수 있어.

빌드가 잘 된다.

그리고 나서 다시 플래시에 zephyr.uf2 파일을 복사하면 정상적으로 동작하는 걸 확인할 수 있어. 난 main.c에서 led 점멸 속도를 200ms 로 변경하고 빌드해서 깜빡이는 속도가 빨라 ㅎ 니들도 함 해보자~

//main.c 에서 SLEEP_TIME_MS 속도 변경

/* 1000 msec = 1 sec */
#define SLEEP_TIME_MS  200

깜빡깜빡

 

반응형

'임베디드 소프트웨어 > Zephyr' 카테고리의 다른 글

Zephyr 새 보드 만들기 #3  (0) 2022.09.24
Zephyr 새 보드 만들기 #2  (1) 2022.09.23
Zephyr 새 보드 만들기  (1) 2022.09.22
Zephyr RTOS 시작하기 - 설치 및 기본 예제  (0) 2022.07.30
Zephyr RTOS  (0) 2022.07.29