Zephyr OS - Partition Manager (아래 그림에는 나오지 않지만, CMake 설정 입력으로 사용), Devicetree, KConfig, CMake, Ninja, GCC를 아우르는 설정 단계와 빌드 단계 -를 배우려는 분들께,
디지키에서 경제적으로 구입 가능한 라즈베리 파이 피코 2 또는 라즈베리 파이 피코 2 W가 좋은 대안이 될 수 있습니다. 이들은 Espressif Systems의 Xtensa® 듀얼 코어 32 비트 LX6 마이크로프로세서인 ESP32-WROOM-32E-N4와 같은 잘 알려진 플랫폼을 대체하여 사용할 수 있습니다.
다음은 리눅스 환경에서 라즈베리 파이 피코 2용 Zephyr OS 개발 환경을 설치하는 절차입니다. 먼저, 파이썬 가상 환경을 생성합니다.
$ python3 -m venv venv
$ source venv/bin/activate
west를 설치한 다음,
$ (venv) pip3 install west
아래와 같이 west를 사용하여 Zephyr를 초기화합니다.
$ (venv) west init zephyrproject
$ (venv) cd zephyrproject/
$ (venv) west update
다음 Infineon HAL (Hardware Abstraction Layer, 하드웨어 추상화 계층) 소프트웨어 항목도 설치해야 합니다.
$ (venv) west blobs fetch hal_infineon
그런 다음, 정석대로 zephyr-export를 수행합니다.
$ (venv) west zephyr-export
$ (venv) west packages pip --install
$ (venv) cd zephyr/
Zephyr OS SDK (Software Development Kit, 소프트웨어 개발 키트)를 설치합니다.
$ (venv) west sdk install
여기까지 왔다면 Zephyr OS 개발 환경 설치는 완료되었습니다. 다음 위치에 있는 LED를 깜빡이는 고전적인 애플리케이션의 main.c를 빌드하기 위해
zephyrproject/zephyr/samples/basic/blinky/src
라즈베리 파이 피코 2의 Zephyr OS 애플리케이션에서 west를 사용하여 아래와 같이 빌드합니다 (빌드 디렉터리는 이미 존재한다고 가정).
$ (venv) cd build
$ (venv) west build -p always -b rpi_pico2/rp2350a/m33 -S cdc-acm-console ../samples/basic/blinky -DCONFIG_USB_DEVICE_INITIALIZE_AT_BOOT=y
-- west build: making build dir /home/digikey/Projects/Workspace/zephyr-picow/zephyrproject/zephyr/build/build pristine
-- west build: generating a build system
Loading Zephyr default modules (Zephyr base).
-- Application: /home/digikey/Projects/Workspace/zephyr-picow/zephyrproject/zephyr/samples/basic/blinky
-- CMake version: 3.25.1
-- Found Python3: /home/digikey/Projects/Workspace/zephyr-picow/venv/bin/python3 (found suitable version "3.11.2", minimum required is "3.10") found components: Interpreter
-- Cache files will be written to: /home/digikey/.cache/zephyr
-- Zephyr version: 4.2.99 (/home/digikey/Projects/Workspace/zephyr-picow/zephyrproject/zephyr)
-- Found west (found suitable version "1.5.0", minimum required is "0.14.0")
-- Board: rpi_pico2, qualifiers: rp2350a/m33
-- Snippet(s): cdc-acm-console
-- ZEPHYR_TOOLCHAIN_VARIANT not set, trying to locate Zephyr SDK
-- Found host-tools: zephyr 0.17.4 (/home/digikey/zephyr-sdk-0.17.4)
-- Found toolchain: zephyr 0.17.4 (/home/digikey/zephyr-sdk-0.17.4)
-- Found Dtc: /home/digikey/zephyr-sdk-0.17.4/sysroots/aarch64-pokysdk-linux/usr/bin/dtc (found suitable version "1.7.0", minimum required is "1.4.6")
-- Found BOARD.dts: /home/digikey/Projects/Workspace/zephyr-picow/zephyrproject/zephyr/boards/raspberrypi/rpi_pico2/rpi_pico2_rp2350a_m33.dts
-- Found devicetree overlay: /home/digikey/Projects/Workspace/zephyr-picow/zephyrproject/zephyr/snippets/cdc-acm-console/cdc-acm-console.overlay
-- Generated zephyr.dts: /home/digikey/Projects/Workspace/zephyr-picow/zephyrproject/zephyr/build/build/zephyr/zephyr.dts
-- Generated pickled edt: /home/digikey/Projects/Workspace/zephyr-picow/zephyrproject/zephyr/build/build/zephyr/edt.pickle
-- Generated devicetree_generated.h: /home/digikey/Projects/Workspace/zephyr-picow/zephyrproject/zephyr/build/build/zephyr/include/generated/zephyr/devicetree_generated.h
Parsing /home/digikey/Projects/Workspace/zephyr-picow/zephyrproject/zephyr/Kconfig
Loaded configuration '/home/digikey/Projects/Workspace/zephyr-picow/zephyrproject/zephyr/boards/raspberrypi/rpi_pico2/rpi_pico2_rp2350a_m33_defconfig'
Merged configuration '/home/digikey/Projects/Workspace/zephyr-picow/zephyrproject/zephyr/samples/basic/blinky/prj.conf'
Merged configuration '/home/digikey/Projects/Workspace/zephyr-picow/zephyrproject/zephyr/snippets/cdc-acm-console/cdc-acm-console.conf'
Merged configuration '/home/digikey/Projects/Workspace/zephyr-picow/zephyrproject/zephyr/build/build/zephyr/misc/generated/extra_kconfig_options.conf'
Configuration saved to '/home/digikey/Projects/Workspace/zephyr-picow/zephyrproject/zephyr/build/build/zephyr/.config'
Kconfig header saved to '/home/digikey/Projects/Workspace/zephyr-picow/zephyrproject/zephyr/build/build/zephyr/include/generated/zephyr/autoconf.h'
-- Found GnuLd: /home/digikey/zephyr-sdk-0.17.4/arm-zephyr-eabi/arm-zephyr-eabi/bin/ld.bfd (found version "2.38")
-- The C compiler identification is GNU 12.2.0
-- The CXX compiler identification is GNU 12.2.0
-- The ASM compiler identification is GNU
-- Found assembler: /home/digikey/zephyr-sdk-0.17.4/arm-zephyr-eabi/bin/arm-zephyr-eabi-gcc
-- Using ccache: /usr/bin/ccache
-- Found gen_kobject_list: /home/digikey/Projects/Workspace/zephyr-picow/zephyrproject/zephyr/scripts/build/gen_kobject_list.py
-- Configuring done
-- Generating done
-- Build files have been written to: /home/digikey/Projects/Workspace/zephyr-picow/zephyrproject/zephyr/build/build
-- west build: building application
[1/168] Preparing syscall dependency handling
[3/168] Generating include/generated/zephyr/version.h
-- Zephyr version: 4.2.99 (/home/digikey/Projects/Workspace/zephyr-picow/zephyrproject/zephyr), build: v4.2.0-5176-ge5838ffc2176
[168/168] Linking C executable zephyr/zephyr.elf
Memory region Used Size Region Size %age Used
FLASH: 42088 B 4 MB 1.00%
RAM: 14120 B 520 KB 2.65%
IDT_LIST: 0 GB 32 KB 0.00%
Generating files from /home/digikey/Projects/Workspace/zephyr-picow/zephyrproject/zephyr/build/build/zephyr/zephyr.elf for board: rpi_pico2
Converted to uf2, output size: 84480, start address: 0x10000000
Wrote 84480 bytes to zephyr.uf2
빌드가 완료되었다면, 다음으로 라즈베리 파이 피코 2의 BOOT 버튼을 누른 상태로 USB 케이블을 다시 연결합니다. .
$ (venv) west flash --runner uf2
-- west flash: rebuilding
ninja: no work to do.
-- west flash: using runner uf2
-- runners.uf2: Copying UF2 file to '/media/digikey/RP2350'
또는 picotool을 사용할 수도 있습니다.
$ (venv) picotool load build/zephyr/zephyr.uf2
Family ID 'absolute' can be downloaded in absolute space:
00000000->02000000
Loading into Flash: [==============================] 100%
이제 라즈베리 파이 피코 2에서 USB 케이블을 분리했다가 다시 연결하면, 온보드 LED가 깜빡이기 시작할 것입니다.
[wrap=“justify”]
minicom을 사용하면 사용자는 프린트 출력에 접근할 수 있습니다.
$ minicom -D /dev/ttyACM0
Welcome to minicom 2.8
OPTIONS: I18n
Port /dev/ttyACM0, 12:41:43
Press CTRL-A Z for help on special keys
LED state: ON
LED state: OFF
LED state: ON
LED state: OFF
LED state: ON
....
main.c에서 LED 점멸 속도의 기본 지연 시간을 다른 값으로 수정할 수도 있습니다. 다른 값으로 수정하고 다시 빌드한 후 플래시 과정을 반복하면 정상적으로 동작하는지 확인할 수 있습니다.
/* 1000 msec = 1 sec */
#define SLEEP_TIME_MS 1000
또 다른 대표적인 예제는 Zephyr CPU 동기화입니다.
(venv) $ west build -p always -b rpi_pico2/rp2350a/m33 -S cdc-acm-console ../samples/synchronization/ -DCONFIG_USB_DEVICE_INITIALIZE_AT_BOOT=y
-- west build: making build dir /home/digikey/Projects/Workspace/zephyr-picow/zephyrproject/zephyr/build/build pristine
-- west build: generating a build system
Loading Zephyr default modules (Zephyr base).
-- Application: /home/digikey/Projects/Workspace/zephyr-picow/zephyrproject/zephyr/samples/synchronization
-- CMake version: 3.25.1
-- Found Python3: /home/digikey/Projects/Workspace/zephyr-picow/venv/bin/python3 (found suitable version "3.11.2", minimum required is "3.10") found components: Interpreter
-- Cache files will be written to: /home/digikey/.cache/zephyr
-- Zephyr version: 4.2.99 (/home/digikey/Projects/Workspace/zephyr-picow/zephyrproject/zephyr)
-- Found west (found suitable version "1.5.0", minimum required is "0.14.0")
-- Board: rpi_pico2, qualifiers: rp2350a/m33
-- Snippet(s): cdc-acm-console
-- ZEPHYR_TOOLCHAIN_VARIANT not set, trying to locate Zephyr SDK
-- Found host-tools: zephyr 0.17.4 (/home/digikey/zephyr-sdk-0.17.4)
-- Found toolchain: zephyr 0.17.4 (/home/digikey/zephyr-sdk-0.17.4)
-- Found Dtc: /home/digikey/zephyr-sdk-0.17.4/sysroots/aarch64-pokysdk-linux/usr/bin/dtc (found suitable version "1.7.0", minimum required is "1.4.6")
-- Found BOARD.dts: /home/digikey/Projects/Workspace/zephyr-picow/zephyrproject/zephyr/boards/raspberrypi/rpi_pico2/rpi_pico2_rp2350a_m33.dts
-- Found devicetree overlay: /home/digikey/Projects/Workspace/zephyr-picow/zephyrproject/zephyr/snippets/cdc-acm-console/cdc-acm-console.overlay
-- Generated zephyr.dts: /home/digikey/Projects/Workspace/zephyr-picow/zephyrproject/zephyr/build/build/zephyr/zephyr.dts
-- Generated pickled edt: /home/digikey/Projects/Workspace/zephyr-picow/zephyrproject/zephyr/build/build/zephyr/edt.pickle
-- Generated devicetree_generated.h: /home/digikey/Projects/Workspace/zephyr-picow/zephyrproject/zephyr/build/build/zephyr/include/generated/zephyr/devicetree_generated.h
Parsing /home/digikey/Projects/Workspace/zephyr-picow/zephyrproject/zephyr/Kconfig
Loaded configuration '/home/digikey/Projects/Workspace/zephyr-picow/zephyrproject/zephyr/boards/raspberrypi/rpi_pico2/rpi_pico2_rp2350a_m33_defconfig'
Merged configuration '/home/digikey/Projects/Workspace/zephyr-picow/zephyrproject/zephyr/samples/synchronization/prj.conf'
Merged configuration '/home/digikey/Projects/Workspace/zephyr-picow/zephyrproject/zephyr/snippets/cdc-acm-console/cdc-acm-console.conf'
Merged configuration '/home/digikey/Projects/Workspace/zephyr-picow/zephyrproject/zephyr/build/build/zephyr/misc/generated/extra_kconfig_options.conf'
Configuration saved to '/home/digikey/Projects/Workspace/zephyr-picow/zephyrproject/zephyr/build/build/zephyr/.config'
Kconfig header saved to '/home/digikey/Projects/Workspace/zephyr-picow/zephyrproject/zephyr/build/build/zephyr/include/generated/zephyr/autoconf.h'
-- Found GnuLd: /home/digikey/zephyr-sdk-0.17.4/arm-zephyr-eabi/arm-zephyr-eabi/bin/ld.bfd (found version "2.38")
-- The C compiler identification is GNU 12.2.0
-- The CXX compiler identification is GNU 12.2.0
-- The ASM compiler identification is GNU
-- Found assembler: /home/digikey/zephyr-sdk-0.17.4/arm-zephyr-eabi/bin/arm-zephyr-eabi-gcc
-- Using ccache: /usr/bin/ccache
-- Found gen_kobject_list: /home/digikey/Projects/Workspace/zephyr-picow/zephyrproject/zephyr/scripts/build/gen_kobject_list.py
-- Configuring done
-- Generating done
-- Build files have been written to: /home/digikey/Projects/Workspace/zephyr-picow/zephyrproject/zephyr/build/build
-- west build: building application
[1/169] Preparing syscall dependency handling
[3/169] Generating include/generated/zephyr/version.h
-- Zephyr version: 4.2.99 (/home/digikey/Projects/Workspace/zephyr-picow/zephyrproject/zephyr), build: v4.2.0-5176-ge5838ffc2176
[169/169] Linking C executable zephyr/zephyr.elf
Memory region Used Size Region Size %age Used
FLASH: 42832 B 4 MB 1.02%
RAM: 16712 B 520 KB 3.14%
IDT_LIST: 0 GB 32 KB 0.00%
Generating files from /home/digikey/Projects/Workspace/zephyr-picow/zephyrproject/zephyr/build/build/zephyr/zephyr.elf for board: rpi_pico2
Converted to uf2, output size: 86016, start address: 0x10000000
Wrote 86016 bytes to zephyr.uf2
$ west flash --runner uf2
-- west flash: rebuilding
ninja: no work to do.
-- west flash: using runner uf2
-- runners.uf2: Copying UF2 file to '/media/digikey/RP2350'
minicom 창에서 출력 결과를 확인할 수 있습니다.
$ minicom -D /dev/ttyACM0
Welcome to minicom 2.8
OPTIONS: I18n
Port /dev/ttyACM0, 12:41:43
Press CTRL-A Z for help on special keys
Welcome to minicom 2.8
thread_a: Hello World from cpu 0 on rpi_pico2!
thread_b: Hello World from cpu 0 on rpi_pico2!
thread_a: Hello World from cpu 0 on rpi_pico2!
thread_b: Hello World from cpu 0 on rpi_pico2!
thread_a: Hello World from cpu 0 on rpi_pico2!
thread_b: Hello World from cpu 0 on rpi_pico2!
thread_a: Hello World from cpu 0 on rpi_pico2!
thread_b: Hello World from cpu 0 on rpi_pico2!
thread_a: Hello World from cpu 0 on rpi_pico2!
thread_b: Hello World from cpu 0 on rpi_pico2!
thread_a: Hello World from cpu 0 on rpi_pico2!
thread_b: Hello World from cpu 0 on rpi_pico2!
thread_a: Hello World from cpu 0 on rpi_pico2!
이 동기화 데모는 두 개의 스레드로 구성되어 있으며, 세마포어와 슬립을 사용해 서로 번갈아 가며 USB를 통해 메시지를 지정된 속도로 출력합니다.
라즈베리 파이 피코 2는 듀얼 코어, 듀얼 아키텍처를 지원하는 RP2350을 기반으로 하기에, 사용자는 업계 표준인 Arm Cortex‑M33 코어 2개 또는 오픈 하드웨어인 Hazard3 RISC‑V 코어 2개 중에서 선택할 수 있습니다.
이는 Zephyr OS(Devicetree, Kconfig, CMake, Ninja, GCC)를 학습하기 위한 대안으로 적합합니다. 또한, Qualcomm® Dragonwing™ QRB2210 (쿼드 코어 Arm® Cortex®‑A53, Debian Linux 실행)과 STMicroelectronics® STM32U585 (Arm® Cortex®‑M33, Zephyr OS 기반 Arduino Core 실행)를 탑재한 최신 아두이노 우노 플랫폼과의 연계 학습에도 도움이 됩니다.

