2022.08.01 - [임베디드 소프트웨어/Zephyr] - Zephyr 새 프로젝트 만들기
저번에 W5100S-EVB-PICO 보드에서 동작하는 새 프로젝트를 만들어 봤어. 요약하자면 getting started에 나와 있는데로 zephyr랑 zephyr sdk 그리고 python dependency를 모두 설치. zephyr 경로를 환경 변수에 추가하는 것으로 설치는 끝.
새로운 프로젝트 만들기는 그냥 아무데나 아래와 같은 구조의 폴더를 생성하고 각 파일에 적절히 내용을 채워주면 끝.
/ProjectName
├── CMakeLists.txt
├── prj.conf
└── src
└── main.c
그리고 west build 명령으로 빌드하고 uf2 바이너리 파일을 W5100S-EVB-PICO에 복사해주는 것으로 마무리~ 여기까지 저번시간에 했었어. 그런데 굉장히 찝찝한 부분이 있지. CMakeLists.txt 파일 안에 rpi-pico를 보드 이름으로 입력했어. w5100s-evb-pico는 zephyr에 등록되어 있지 않거든 ㅎㅎ 그래서 뭐랄까 반쪽짜리인 것이지!!~ 그래서 zephyr에 등록까지는 아니더라도 zephyr 환경 내에서 새로운 커스텀 보드 생성하는 방법을 같이 한번 해보자구.
https://docs.zephyrproject.org/latest/hardware/porting/board_porting.html#board-porting-guide
위에 있는 링크처럼 사실 이 내용도 Zephyr document 웹페이지에 Board Porting Guide라는 챕터로 잘 나와 있어. 그냥 읽는 것도 싫은데 영어라서 더 싫지 ㅋㅋㅋ 자 같이 함 보자구.
zephyr configuration 구조가 저렇게 되어 있데. 아래쪽을 보면 이해가 쉬울 듯. 더 이상 설명은 하지 않겠다 ㅋ
우리가 새로 만들 w5100s-evb-pico는 Architecture는 Arm이고 CPU core는 Arm Cortex M0, Soc family, Series는 모르겠고 SoC는 RP2040이 되겠네. 보드는 당연히 w5100s-evb-pico 음... 이걸 왜 알아야 하는지는 잘 모르겠다만 ㅋ getting started에 있는 내용이라 함 봤어.
그럼 새 보드를 만들어 보자구. 우선 새 보드를 위한 폴더 -> zephyr/boards/arm/w5100s_evb_pico/ 를 생성. 그 안의 내용은 다음과 같아야 함.
boards/arm/w5100s_evb_pico
├── board.cmake
├── CMakeLists.txt
├── doc
│ ├── w5100s_evb_pico.png
│ └── index.rst
├── Kconfig.board (⭐️필수)
├── Kconfig.defconfig (⭐️필수)
├── w5100s_evb_pico_defconfig (⭐️필수)
├── w5100s_evb_pico.dts (⭐️필수)
└── w5100s_evb_pico.yaml
이 중에서 특히 w5100s_evb_pico.dts 파일이 매우 중요해. device tree 파일인데 여기에 보드에 붙은 다른 하드웨어 컴포넌트가 정의되거든. 여기에 w5100s과 통신하기 위한 spi 정의가 있어야겠지. 그런데 다행인 건 w5100s_evb_pico의 하드웨어와 rpi_pico 하드웨어가 거의 같다는 거야. 으흐흐흐 그래 니가 생각하는 그거야. ㅋ 처음부터 작성하지 말고 rpi_pico에서 복사해서 수정할거야. 하지만!
디바이스 트리는 리눅스 시스템에서 매우 중요하니까 자세히 봐두는 것도 나쁘지 않을 거야.👇👇👇
https://docs.zephyrproject.org/latest/build/dts/intro.html#devicetree-intro
zephyr/board/arm/rpi_pico 폴더를 통째로 복사해서 w5100s_evb_pico라는 이름으로 변경.
내부에 파일 이름도 보드 이름에 맞추어 변경.
파일 내부도 조금 변경해줘야 해. w5100s에 대한 설정은 나중에 할거임. w5100s_evb_pico.dts에서 include 파일을 변경해주고
Kconfig.board 파일 수정
config BOARD_W5100S_EVB_PICO
bool "WIZnet W5100S EVB PICO Board"
depends on SOC_RP2040
Kconfig.defconfig 파일 수정
if BOARD_W5100S_EVB_PICO
config BOARD
default "w5100s_evb_pico"
config RP2_FLASH_W25Q080
default y
if I2C_DW
config I2C_DW_CLOCK_SPEED
default 100
endif #I2C_DW
endif # BOARD_W5100S_EVB_PICO
음~ 자! 이정도 수정했으면 된 것 같아. 이제 우리가 만들어뒀던 프로젝트 폴더로 돌아가서 CMakeLists.txt 파일에서 보드 이름을 수정
#CMakeLists.txt 👇👇👇
cmake_minimum_required(VERSION 3.20.0)
set(BOARD w5100s_evb_pico) #요기 rpi_pico를 w5100s_evb_pico로 변경
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(myapp)
target_sources(app PRIVATE src/main.c)
west build를 때려 빌드!
% west build
자 이제 바이너리 플레시에 넣어서 잘 동작하나 테스트!
......
...
...
.
응 보드가 없어. 퇴근하고 집에 와서 애 분유주고 글 쓰는 거거든 ㅋㅋㅋㅋ 뭐 빌드 잘 됐으니까 ㅋ 잘되겠지 ㅋㅋ
내일 디바이스 트리에 w5100s 추가하면서 같이 해보자구 ㅋㅋㅋ 안녕!
(소곤소곤 비밀인데 zephyr에 w5100s 라이브러리 없어 ㅋ w5500으로 해볼거야~ 동작 안해도 난 몰라~ 🤪)
다음날-> LED도 잘 깜빡거리고 printf("hello world")도 넣어봤더니 serial로 잘 나오네.
자 이제 그럼 w5100s 관련된 내용을 디바이스 트리에 넣어보자구. 다음글에서! ㅋㅋㅋ 우리 애기 병원 데려가야함 ㅋ 안녕!
'임베디드 소프트웨어 > Zephyr' 카테고리의 다른 글
Zephyr 새 보드 만들기 #3 (0) | 2022.09.24 |
---|---|
Zephyr 새 보드 만들기 #2 (1) | 2022.09.23 |
Zephyr 새 프로젝트 만들기 (0) | 2022.08.01 |
Zephyr RTOS 시작하기 - 설치 및 기본 예제 (0) | 2022.07.30 |
Zephyr RTOS (0) | 2022.07.29 |