안경잡이개발자

728x90
반응형

Zephyr Project의 소스코드를 받아서 보드(Board)에 올리기 위해서는, 기본적으로 Zephyr Project 개발 환경을 구축해야 합니다. "Getting Started" 페이지로 이동하면 상세한 설명이 나와 있습니다. 또한 Zephyr Project는 다양한 운영체제에서 구동시킬 수 있다는 점이 장점입니다. 저자의 경우 윈도우에서 개발환경을 구축하고자 하여, 윈도우에서의 진행 방법을 포스팅하고자 합니다.

 

▶ 프로젝트 시작 가이드: https://docs.zephyrproject.org/latest/getting_started/

 

기본적으로 프로젝트 시작을 위한 종속성 패키지를 설치하기 위하여 Chocolatey를 설치할 필요가 있습니다. Chocolatey는 Windows 운영체제 전용 패키지 매니저로, 다양한 소프트웨어를 검색하고 손쉽게 설치 및 업그레이드할 수 있도록 해줍니다. 파이썬에서의 패키지 관리 도구(PIP)나 리눅스에서의 다양한 패키지 관리 도구를 떠올리시면 Chocolatey가 어떤 역할을 하는지 이해되실 겁니다. 설치 이후에는 choco라는 커맨드를 이용해 명령을 날릴 수 있습니다.

 

 

일단 Choco를 설치하기 위하여 가장 먼저 PowerShell을 우클릭한 뒤에 [관리자 권한으로 실행] 버튼을 눌러 관리자 권한으로 실행합니다.

Chocolatey 설치 페이지에서 나와 있듯이 아래와 같은 명령어(Command)를 복사하여 PowerShell에 붙여넣기 해줍시다.

Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

아래 그림에서 설명으로 나와있듯이, 설치 과정에서 참고해야하는 다양한 사항들이 적혀 있습니다.

아무튼 명령어를 입력하면 다음과 같이 설치가 완료됩니다. 저는 경고 메시지가 등장했지만, 일단 귀찮으니까 넘어가겠습니다. (큰 문제 없이 진행되므로 일단 무시했습니다.)

아무튼 설치 이후에, PowerShell에서 choco 명령을 입력했을 때 다음과 같이 버전이 출력이 된다면 정상적으로 설치가 된 것입니다.

이후에 설치된 choco 패키지 매니저를 이용하여, 명령어들을 하나씩 입력하여 설치를 진행합니다. 총 4개의 명령어를 입력하게 되면 차례대로 git, python, ninja와 같은 도구(Tools)들이 설치가 됩니다. 이후에 최종적으로 west를 설치하도록 유도하고 있습니다. 한 번 따라가 보겠습니다.

저자의 경우 모든 도구가 이미 설치가 되어 있는 상태라서 다음과 같이 출력이 되는 것을 알 수 있는데, 처음 설치하는 경우 모든 패키지를 설치하는 과정에서 몇 분 가량이 소요됩니다.

또한 저자는 다음과 같이 파이썬(Python) 3.8 버전이 설치가 되었으나, Python 3.8 버전의 사용을 원치 않았습니다. 또한 Python 3.8 버전 설치 이후에 pip 명령이 정상적으로 동작하지 않아서 다음의 명령어를 통해 Python 3.8 버전을 제거한 뒤에 Python 3.7 버전을 설치했습니다.

choco uninstall python 
choco install python --version=3.7.2 

이후에 시스템 변수에서 path 변수에 있는 Python 3.8 버전의 경로를 제거한 뒤에, 새롭게 설치된 Python 3.7 버전의 설치 경로를 넣어주었습니다. 아무튼 설치가 잘 되었는지를 확인하기 위해 python 및 git 명령을 실행해보고, 정상적으로 설치가 되었는지를 추가적으로 확인해주세요.

그리고 아무튼 west까지 잘 설치되었다면 성공입니다.

저자의 경우 위 과정에서 설치한 Python 및 Git이 이상하게도 정상적으로 동작하지 않아서 고생했습니다. 잘 안 되면 그냥 Python이나 Git을 따로 설치해서 시스템 변수에 잘 넣어주기만 해도 동작하는 것 같습니다.

 

※ Zephyr Project 소스코드 불러오기

 

이제 다음 그림에서 나오는 명령어들을 이용하여 Zephyr Project의 소스코드를 불러올 수 있습니다. 이 때 git을 포함하여 아까 설치했던 도구들 중에서 제대로 설치가 안 된 것이 있다면 오류가 발생할 수 있습니다. 애초에 west 명령을 이용해도, 실제로는 git clone 명령을 이용해서 Zephyr Project 소스코드를 받아오는 것이기 때문입니다.

실제로 아래 명령어 중에서 west init zephyrproject 부분을 통해, 전체 Zephyr Project 소스코드를 원하는 폴더에 다운로드 받게 됩니다.

cd '원하는 폴더'
west init zephyrproject
cd zephyrproject
west update

※ 필요한 파이썬 패키지 설치 

 

이후에 zephyr 소스코드 폴더의 scripts 폴더로 이동하여 필요한 패키지를 모두 설치하시면 됩니다.

따라서 저는 웹 사이트에서 소개하고 있는대로 scripts 폴더로 이동하여 모든 관련 패키지를 설치해주었습니다.

※ 소프트웨어 개발 툴 체인 설치

 

또한 소프트웨어 개발 툴 체인(Tool Chain)을 설치해야 합니다.  Tool Chain이 설치되어 있어야 정상적으로 컴파일러, 어셈블러, 링커 및 종속성 라이브러리들을 포함하여 Zephyr 애플리케이션을 빌드할 수 있습니다. 다만 기본적으로 Zephyr SDK는 윈도우 운영체제를 지원하지 않기 때문에 윈도우에서 이러한 기능을 이용하기 위해서는 3rd-party toolchain을 설치해야 합니다.

제가 대상으로 하는 보드(Board)는 Arm Cortex-M7 core 기반이기 때문에, 저는 GNU ARM Embedded 툴 체인을 설치했습니다. 

공식 GNU ARM Embedded 설치 경로로 이동하여 설치합니다.

[Downloads] 버튼을 눌러 설치를 진행할 수 있었습니다.

Zephyr Project 커뮤니티에 의하면 7-2018-q2-update 버전이 오류 없이 정상적으로 동작한다고 합니다. 따라서 저는 Windows 10을 이용하고 있으므로 다음과 같은 Windows 32-bit 버전을 다운로드 하였습니다.

다음과 같이 설치를 완료했습니다. 참고로 설치할 때는 설치 폴더에 공백이 들어가지 않도록 그냥 C 드라이브와 같은 곳에 그대로 설치를 진행해주세요.

이후에 환경 변수 설정을 해줍니다. 웹 사이트에서는 두 개의 환경 변수(Environment Variables)들을 넣어주어야 한다고 하네요.

ZEPHYR_TOOLCHAIN_VARIANT: gnuarmemb
GNUARMEMB_TOOLCHAIN_PATH: 툴 체인이 설치된 경로

따라서 저는 문서에서 요구하는 대로 다음과 같이 추가해주었습니다. 

※ Blinky Application 빌드하기 ※

 

이제 Blinky Application을 빌드할 수 있습니다.

제가 쓰고 있는 보드는 STM32 Nucleo F767ZI 보드이기 때문에 다음과 같이 명령어를 입력했습니다.

cd '해당 폴더'/zephyrproject/zephyr
./zephyr-env.cmd
west --zephyr-base ./ build -p auto -b nucleo_f767zi samples/basic/blinky

▶ 가능한 오류 상황 1) GCC 관련 오류

 

저는 다음과 같이 C Compiler와 CXX Compiler를 찾지 못하는 오류가 발생했습니다.

따라서 GCC 경로 설정을 해주면 됩니다. 만약에 윈도우(Windows) 사용자 중에서 GCC가 설치되어 있지 않으신 분이라면 MinGW를 설치하신 뒤에 시스템 변수로 등록해주시면 됩니다. 저자의 경우 처음에 Visual Studio가 설치되어 있었기 때문에 Visual Studio와 연동된 GCC를 사용하려고 했는데, 결국 그냥 MinGW로 설치한 GCC를 이용해서 진행했습니다.

 

▶ 가능한 오류 상황 2) ZEPHYR_BASE 설정 오류

 

또한 zepyer-env.cmd를 실행했다고 하더라도, 다음과 같이 ZEPHYR_BASE가 설정되어 있지 않다는 오류가 나올 수 있습니다. 이 경우에는 수동으로 ZEPHYR_BASE의 위치를 설정해주어야 합니다. 따라서 west 명령어를 실행할 때 --zephyr-base 옵션을 주어야 합니다. 제가 넣어 준 명령에서는 --zephyr-base ./라는 부분이 들어가 있습니다. 이것은 현재 폴더를 ZEPHYR_BASE 폴더로 설정하겠다는 것입니다.

▶ 가능한 오류 상황 3) 보드 모델명 오류

 

또한 보드(Board) 모델 이름을 잘못 기입하면 다음과 같이 보드 이름을 찾을 수 없다는 메시지가 나올 수 있습니다.

이 경우에는 가능한 보드 모델 이름들이 쭉 나열되기 때문에, 자신의 보드 이름과 동일한 것을 찾아서 잘 기입해주시면 됩니다.

 

▶ 가능한 오류 상황 4) CMake 불가능 오류

 

또한 다음과 같이 /cmake/app/boilerplate.cmake 파일을 찾을 수 없다는 메시지가 나올 수 있습니다. 이 경우 ZEPHYR_BASE를 설정했는지 확인해주시고, CMake를 CMake 공식 홈페이지를 통해 다시 설치하셔야 할 수도 있습니다. 이러한 오류 메시지는 'Cannot specify sources for target "app" which is not built by this project' 라는 메시지와 함께 등장할 수 있습니다.

▶ 가능한 오류 상황 5) 기타 오류

 

이외에도 기타 오류로 의해 실행이 안 될 수도 있습니다. ninja: error: loading 'build.ninja'라는 ninja 관련 설정 파일을 찾을 수 없다는 오류 메시지가 나올 수도 있습니다. 저는 그럴 때 그냥 jephyrproject 프로젝트 파일을 통째로 삭제한 뒤에 다시 'Zephyr Project 소스코드 불러오기' 단계부터 다시 시작했더니 오류 없이 동작했습니다.

 

이를 포함해 다양한 이유로 Configuring incomplete, errors occurred! 와 같은 메시지가 나올 수 있습니다. 나는 분명히 하라는 대로 거의 완벽하게 잘 한 것 같은데, 빌드가 안 되는 경우 마찬가지로 jephyrproject 프로젝트 파일을 통째로 삭제한 뒤에 다시 'Zephyr Project 소스코드 불러오기' 단계부터 다시 시작해보는 것이 도움이 될 수 있습니다. (저자의 경우 도움이 되었습니다.)

 

▶ 정상적으로 빌드(Build)가 되었을 때

 

정상적으로 빌드가 완료되었을 때는 다음과 같이 행복한 문구만 등장합니다.

※ 플래시(Flash) 및 애플리케이션 실행 

 

이제 빌드가 완료되어 .elf 파일을 얻게 되었습니다. 따라서 이렇게 만들어진 펌웨어(Firmware) 파일을 플래시(Flash)하여 보드에 업로드하면 됩니다. 다만 윈도우 사용자의 경우 플래시 과정에서 OpenOCD가 필요할 수 있습니다.

 

▶ OpenOCD 설치 경로: https://gnutoolchains.com/arm-eabi/openocd/

 

Download OpenOCD for Windows

Download pre-built OpenOCD for Windows OpenOCD is an open-source tool that allows debugging various ARM devices with GDB using a wide variety of JTAG programmers. You can download the pre-built OpenOCD for windows from this page: Each build above includes

gnutoolchains.com

최신 버전의 OpenOCD를 다운로드 받아줍니다.

압축을 푼 이후에 bin 폴더와 share 폴더를 C:\Program Files\OpenOCD 경로의 안으로 옮긴 뒤에, C:\Program Files\OpenOCD\bin을 시스템 변수의 Path에 등록합니다.

그리고 위와 같이 환경 변수를 하나 추가합니다. OPENOCD_DEFAULT_PATH의 값으로 C:\Program Files\OpenOCD\share\openocd\scripts를 넣습니다. 이제 한 번 나와 있는 대로 west flash 명령을 이용하여 플래시(Flash)를 진행해보도록 합시다.

다만 저자의 경우 OPENOCD-NOTFOUND not found; install it or add its location to PATH 라는 메시지가 등장했습니다. 하지만 분명히 OpenOCD는 설치를 마친 상태였으므로, 안 되는 이유가 잘 납득이 안 되어 컴퓨터를 재부팅해보았습니다. 그랬더니 다음과 같이 오류 없이 잘 동작하게 되었습니다.

플래시를 진행하는 과정에서 Windows 컴퓨터와 보드(Board)가 연결된 상태라면, 이제 정상적으로 보드가 플래시 된 겁니다. 실제로 보드를 확인해 보시면 보드에 내장된 LED가 반짝반짝 빛나게 됩니다. 별 거 아닌 예제일 텐데, 자꾸 오류가 발생해서 오랜 시간이 소요되었네요.

728x90
반응형