Skip to content

Commit d975e93

Browse files
committed
Raspberry Pi Pico 2 support
1 parent 0a2bba1 commit d975e93

File tree

4 files changed

+119
-34
lines changed

4 files changed

+119
-34
lines changed

Diff for: Dockerfile

+24-18
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,27 @@
1-
FROM alpine:3.17.0
2-
3-
# Install toolchain
4-
RUN apk update && \
5-
apk upgrade && \
6-
apk add git \
7-
python3 \
8-
py3-pip \
9-
cmake \
10-
build-base \
11-
libusb-dev \
12-
bsd-compat-headers \
13-
newlib-arm-none-eabi \
14-
gcc-arm-none-eabi
1+
FROM ubuntu:22.04 AS gcc_build
2+
3+
COPY ./install_gcc.sh /home/install_gcc.sh
4+
RUN bash /home/install_gcc.sh
5+
6+
FROM ubuntu:22.04
7+
8+
RUN apt-get update -y && \
9+
apt-get upgrade -y && \
10+
apt-get install -y git \
11+
python3 \
12+
tar \
13+
build-essential \
14+
gcc-arm-none-eabi \
15+
cmake && \
16+
apt-get clean && \
17+
rm -rf /var/lib/apt/lists/*
18+
19+
COPY --from=gcc_build /opt/riscv/gcc14-rp2350-no-zcmp /opt/riscv/gcc14-rp2350-no-zcmp
20+
ENV PATH="$PATH:/opt/riscv/gcc14-rp2350-no-zcmp/bin"
1521

1622
# Raspberry Pi Pico SDK
1723
ARG SDK_PATH=/usr/local/picosdk
18-
RUN git clone --depth 1 --branch 1.5.1 https://github.com/raspberrypi/pico-sdk $SDK_PATH && \
24+
RUN git clone --depth 1 --branch 2.0.0 https://github.com/raspberrypi/pico-sdk $SDK_PATH && \
1925
cd $SDK_PATH && \
2026
git submodule update --init
2127

@@ -30,11 +36,11 @@ RUN git clone --depth 1 --branch V11.0.1 https://github.com/FreeRTOS/FreeRTOS-Ke
3036
ENV FREERTOS_KERNEL_PATH=$FREERTOS_PATH
3137

3238
# Picotool installation
33-
RUN git clone --depth 1 --branch 1.1.2 https://github.com/raspberrypi/picotool.git /home/picotool && \
39+
RUN git clone --depth 1 --branch 2.0.0 https://github.com/raspberrypi/picotool.git /home/picotool && \
3440
cd /home/picotool && \
3541
mkdir build && \
3642
cd build && \
3743
cmake .. && \
38-
make && \
39-
cp /home/picotool/build/picotool /bin/picotool && \
44+
make -j$(nproc) && \
45+
cmake --install . && \
4046
rm -rf /home/picotool

Diff for: install_gcc.sh

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#!/bin/bash
2+
3+
RET_VALUE=$?
4+
RED='\033[0;31m'
5+
NC='\033[0m' # No Color
6+
7+
apt-get update -y && \
8+
apt-get upgrade -y && \
9+
apt-get install -y autoconf automake autotools-dev curl python3 python3-pip libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev ninja-build git cmake libglib2.0-dev libslirp-dev
10+
11+
12+
if [ $RET_VALUE != 0 ]; then
13+
echo "${RED}Instalation failed!${NC}"
14+
exit 1
15+
fi
16+
17+
mkdir -p /opt/riscv/gcc14-rp2350-no-zcmp
18+
19+
chown -R "$(whoami)" /opt/riscv/gcc14-rp2350-no-zcmp
20+
21+
git clone --depth 1 https://github.com/riscv/riscv-gnu-toolchain /home/riscv-gnu-toolchain
22+
23+
if [ $RET_VALUE != 0 ]; then
24+
echo "${RED}Cloning RISC-V repo failed!${NC}"
25+
exit 1
26+
fi
27+
28+
cd /home/riscv-gnu-toolchain || exit
29+
30+
git clone --depth 1 https://github.com/gcc-mirror/gcc gcc-14 -b releases/gcc-14
31+
32+
if [ $RET_VALUE != 0 ]; then
33+
echo "${RED}Cloning GCC repo failed!${NC}"
34+
exit 1
35+
fi
36+
37+
./configure --prefix=/opt/riscv/gcc14-rp2350-no-zcmp \
38+
--with-arch=rv32ima_zicsr_zifencei_zba_zbb_zbs_zbkb_zca_zcb --with-abi=ilp32 \
39+
--with-multilib-generator="rv32ima_zicsr_zifencei_zba_zbb_zbs_zbkb_zca_zcb-ilp32--;rv32imac_zicsr_zifencei_zba_zbb_zbs_zbkb-ilp32--" \
40+
--with-gcc-src=`pwd`/gcc-14
41+
42+
if [ $RET_VALUE != 0 ]; then
43+
echo "${RED}Configure failed!${NC}"
44+
exit 1
45+
fi
46+
47+
make -j$(nproc)
48+
49+
cd /home || exit
50+
51+
rm -rf /home/riscv-gnu-toolchain

Diff for: test_poject/CMakeLists.txt

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,8 @@
11
cmake_minimum_required(VERSION 3.13)
22

3-
include($ENV{PICO_SDK_PATH}/external/pico_sdk_import.cmake)
4-
3+
include($ENV{PICO_SDK_PATH}/pico_sdk_init.cmake)
54
project(sample C CXX ASM)
65

7-
set(CMAKE_C_COMPILER /usr/bin/arm-none-eabi-gcc CACHE PATH "" FORCE)
8-
set(CMAKE_CXX_COMPILER /usr/bin/arm-none-eabi-g++ CACHE PATH "" FORCE)
9-
106
set(CMAKE_C_STANDARD 11)
117
set(CMAKE_CXX_STANDARD 17)
128

Diff for: test_sdk.sh

100644100755
+43-11
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,47 @@
1+
#! /usr/bin/env bash
2+
3+
RED="\e[31m"
4+
GREEN="\e[32m"
5+
NC="\e[0m"
6+
17
if [[ -z $1 ]]; then
28
echo "Please provide an SDK image you want to test"
39
fi
410

5-
docker run -d -it --name pico-sdk --mount type=bind,source=${PWD}/test_poject,target=/home/dev $1
6-
docker exec pico-sdk /bin/sh -c "cd /home/dev && mkdir build && cd build && cmake .. && make -j4"
7-
docker exec pico-sdk /bin/sh -c "picotool"
8-
docker container kill pico-sdk
9-
docker container rm pico-sdk
10-
11-
docker run -d -it --name pico-sdk --mount type=bind,source=${PWD}/freertos_test_project,target=/home/dev $1
12-
docker exec pico-sdk /bin/sh -c "cd /home/dev && mkdir build && cd build && cmake .. && make -j4"
13-
docker exec pico-sdk /bin/sh -c "picotool"
14-
docker container kill pico-sdk
15-
docker container rm pico-sdk
11+
declare -a boards=("pico" "pico_w" "pico2" "pico2_riscv")
12+
13+
for board in "${boards[@]}"
14+
do
15+
echo "---- $board build test ----"
16+
docker run -d -it --name pico-sdk --mount type=bind,source="${PWD}"/test_poject,target=/home/dev "$1"
17+
docker exec pico-sdk /bin/bash -c "rm -rf /home/dev/build"
18+
if [[ $board = pico2_riscv ]] ; then
19+
docker exec -i pico-sdk /bin/bash -c "cd /home/dev && mkdir build && cd build && cmake .. -DPICO_BOARD=pico2 -DPICO_PLATFORM=rp2350-riscv && make -j4"
20+
else
21+
docker exec -i pico-sdk /bin/bash -c "cd /home/dev && mkdir build && cd build && cmake .. -DPICO_BOARD=${board} && make -j4"
22+
fi
23+
if [ $? != 0 ]; then
24+
echo -e "${RED}----- Test failed -----${NC}"
25+
exit 1
26+
fi
27+
docker container kill pico-sdk
28+
docker container rm pico-sdk
29+
echo "${GREEN}----- Test passed -----${NC}"
30+
done
31+
32+
33+
# for board in "${boards[@]}"
34+
# do
35+
# echo "FreeRTOS $board build test"
36+
# docker run -d -it --name pico-sdk --mount type=bind,source=${PWD}/freertos_test_project,target=/home/dev $1
37+
# if [[ $board -eq "pico2_riscv" ]] ; then
38+
# docker exec pico-sdk /bin/bash -c "cd /home/dev && mkdir build && cd build && cmake .. -DPICO_BOARD=pico2 -DPICO_PLATFORM=rp2350-riscv && make -j4"
39+
# else
40+
# docker exec pico-sdk /bin/bash -c "cd /home/dev && mkdir build && cd build && cmake .. -DPICO_BOARD=${board} && make -j4 && cd .. && rm -rf build"
41+
# fi
42+
# docker exec pico-sdk /bin/bash -c "rm -rf /home/dev/build"
43+
# docker container kill pico-sdk
44+
# docker container rm pico-sdk
45+
# rm -rf ./test_poject/build/
46+
# done
47+

0 commit comments

Comments
 (0)