티스토리 뷰

반응형

지난 번에 secure bootloader 샘플 프로젝트 빌드하기 위한 것들을 진행해봣는데요, 못 보신 분은 아래 글을 잠시 훑어보시고 오시면되겠습니다.

https://hero-space.tistory.com/99

 

OTA 로 nRF 칩 소프트웨어 업데이트하기 1

임베디드 기기에 개발을 하다보면 작성한 코드를 업데이트 해야합니다. 업데이트 한다는 개념은 임베디드 기기의 Rom 과 같은 비휘발성 메모리에 코드를 적재하고, 부팅시 Ram에 로드 시키고, 스

hero-space.tistory.com

micro-ecc를 빌드해서 .a 파일은 나왔지만 그다음 어떻게 해서 나만의 key를 만들까요? 사실 dfu_public_key.c는 샘플폴더에 들어 있던 것인지라 micro-ecc 라이브러를 이용해 나만의 키를 생성해야합니다. 왜냐면 micro-ecc 가 빌드 된 상태에서 secure bootlaoder 샘플을 빌드하면 아래와 같은 에러가 발생합니다.

dfu_public_key.c 안에 있는 파일에서 #NRF_DEF_DEBUG_VERSION 이 선언되어 있지 않아서 문제가 나는 것이나 아래의 경로 github의 md 파일을 확인하라고 나옵니다.

https://github.com/NordicSemiconductor/pc-nrfutil/blob/master/README.md

nrfutil 이라는 파이썬 패키지를 커맨드라인 유틸을 이용해서 Device Firmware Updates를 가능하게 만들어 주는 것인데요 따라서 만들어 보도록 하겠습니다. nrfutil의 경우 nRF Connect for Desktop을 설치하고 그안에 Progrmmer를 설치하면 피시에 자동으로 설치되니 다운받으시면 되고 시큐어 부트로더까지 모두 빌드되어지고 나면 이 Programmer로 칩에 바이너리를 올려야하기 때문에 미리 받아두는게 좋습니다.

nrf connect for desktop 다운로드 링크 : https://www.nordicsemi.com/Products/Development-tools/nrf-connect-for-desktop

사용하는 개발 PC의 OS 환경에 맞게 설치파일을 받아서 설치하고 나서 실행 해줍니다.

실행하면 아래와 같은 창이 뜨고 그 안에 Programmer를 찾아서 한번 더 Install 해줍니다.

정상적으로 설치되었으면 다시 돌아가서 command 창에서 nrfutil을 실행해봅니다. 저는 맥을 사용중이며 private.pem을 만들기 위해 아래와 같이 커맨드를 작성해서 실행합니다.

$ nrfutil keys generate private.pem

Generated private key and stored it in: private.pem

정상적으로 pem 파일이 생성되어졌기때문에, 이제 아래 커맨드를 통해서 값을 뽑아내봅니다.

$ nrfutil keys display --key pk --format code private.pem

아래와 같이 출력 됨을 확일 수 있다. 단 제 값 과는 다르며 전체적인 구성은 동일할 것입니다.

/* This file was automatically generated by nrfutil on 2022-11-21 (YY-MM-DD) at 22:36:44 */



#include "stdint.h"

#include "compiler_abstraction.h"



/** @brief Public key used to verify DFU images */

__ALIGN(4) const uint8_t pk[64] =

{

    0x73, 0x16, 0xb3, 0x6a, 0xc2, 0xa3, 0x9a, 0xe1, 0x15, 0x56, 0x5a, 0x2b, 0x59, 0xe8, 0xc3, 0x46, 0xae, 0x52, 0x9f, 0x76, 0xee, 0x88, 0x9a, 0xbf, 0x9a, 0x73, 0x0f, 0x52, 0x6d, 0x59, 0xc1, 0x74,

    0x4f, 0x73, 0x7b, 0xf1, 0xe1, 0x83, 0x22, 0x2b, 0x86, 0xcf, 0x1b, 0xaa, 0x0c, 0x4b, 0xb1, 0xc7, 0xdd, 0xf1, 0xba, 0xd0, 0xd4, 0x3e, 0xfb, 0xa1, 0x7a, 0xc2, 0x39, 0x22, 0x4d, 0xb5, 0x05, 0x95

};

위 코드를 dfu_public_key.c 의 내용을 모두 지우고 대체 한 뒤 다시 컴파일 진행하면 정상적으로 빌드 됨을 확인할 수 있습니다.

시큐어 부트로더의 경우는 한 번 잘 만들고 나서는 계속 사용하면 되기때문에 더 할일은 없고, 앞으로는 Application 코드 작성하는데만 집중을 하면 됩니다. 실제 다운로드 한 뒤 무선으로 다운로드 하는 내용은 다음편에서 이어서 다루도록 하겠습니다.!

반응형
댓글