Ubuntu下配置raspberry pico开发环境
欢迎访问我的小站:www.bytetoy.cn
一、需要的工具
官方提供了在ubuntu下一键安装环境的脚本,但是有些东西,可能暂时不需要使用,可以自己安装需要的工具和git相应的代码库。
- cmake
- git
- gcc-arm-none-eabi
- minicom
注:
- 以上三个工具是必备了,像编辑器之类的,自己可以选择安装自己喜欢的,如:vim。
- 以上四个工具的安装,可以直接使用aptitude进行安装,无需自己编译源代码折腾。
- 通过api安装有个好处,就是无需再设置
gcc-arm-none-eabi
的路径,同时自动安装依赖,方便很多。
二、测试交叉编译链工具
arm-gcc交叉编译链工具安装成功后,可以通过-v查看安装的版本,显示如下说明安装成功。
~ arm-none-eabi-gcc -v ✔ 07:35:43
Using built-in specs.
COLLECT_GCC=arm-none-eabi-gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/arm-none-eabi/9.2.1/lto-wrapper
Target: arm-none-eabi
Configured with: ../configure --build=x86_64-linux-gnu --prefix=/usr --includedir='/usr/lib/include' --mandir='/usr/lib/share/man' --infodir='/usr/lib/share/info' --sysconfdir=/etc --localstatedir=/var --disable-silent-rules --libdir='/usr/lib/lib/x86_64-linux-gnu' --libexecdir='/usr/lib/lib/x86_64-linux-gnu' --disable-maintainer-mode --disable-dependency-tracking --mandir=/usr/share/man --enable-languages=c,c++,lto --enable-multilib --disable-decimal-float --disable-libffi --disable-libgomp --disable-libmudflap --disable-libquadmath --disable-libssp --disable-libstdcxx-pch --disable-nls --disable-shared --disable-threads --enable-tls --build=x86_64-linux-gnu --target=arm-none-eabi --with-system-zlib --with-gnu-as --with-gnu-ld --with-pkgversion=15:9-2019-q4-0ubuntu1 --without-included-gettext --prefix=/usr/lib --infodir=/usr/share/doc/gcc-arm-none-eabi/info --htmldir=/usr/share/doc/gcc-arm-none-eabi/html --pdfdir=/usr/share/doc/gcc-arm-none-eabi/pdf --bindir=/usr/bin --libexecdir=/usr/lib --libdir=/usr/lib --disable-libstdc++-v3 --host=x86_64-linux-gnu --with-headers=no --without-newlib --with-multilib-list=rmprofile CFLAGS='-g -O2 -fdebug-prefix-map=/build/gcc-arm-none-eabi-Gl9kT9/gcc-arm-none-eabi-9-2019-q4=. -fstack-protector-strong' CPPFLAGS='-Wdate-time -D_FORTIFY_SOURCE=2' CXXFLAGS='-g -O2 -fdebug-prefix-map=/build/gcc-arm-none-eabi-Gl9kT9/gcc-arm-none-eabi-9-2019-q4=. -fstack-protector-strong' FCFLAGS='-g -O2 -fdebug-prefix-map=/build/gcc-arm-none-eabi-Gl9kT9/gcc-arm-none-eabi-9-2019-q4=. -fstack-protector-strong' FFLAGS='-g -O2 -fdebug-prefix-map=/build/gcc-arm-none-eabi-Gl9kT9/gcc-arm-none-eabi-9-2019-q4=. -fstack-protector-strong' GCJFLAGS='-g -O2 -fdebug-prefix-map=/build/gcc-arm-none-eabi-Gl9kT9/gcc-arm-none-eabi-9-2019-q4=. -fstack-protector-strong' LDFLAGS='-Wl,-Bsymbolic-functions -Wl,-z,relro' OBJCFLAGS='-g -O2 -fdebug-prefix-map=/build/gcc-arm-none-eabi-Gl9kT9/gcc-arm-none-eabi-9-2019-q4=. -fstack-protector-strong' OBJCXXFLAGS='-g -O2 -fdebug-prefix-map=/build/gcc-arm-none-eabi-Gl9kT9/gcc-arm-none-eabi-9-2019-q4=. -fstack-protector-strong' INHIBIT_LIBC_CFLAGS=-DUSE_TM_CLONE_REGISTRY=0 AR_FOR_TARGET=arm-none-eabi-ar AS_FOR_TARGET=arm-none-eabi-as LD_FOR_TARGET=arm-none-eabi-ld NM_FOR_TARGET=arm-none-eabi-nm OBJDUMP_FOR_TARGET=arm-none-eabi-objdump RANLIB_FOR_TARGET=arm-none-eabi-ranlib READELF_FOR_TARGET=arm-none-eabi-readelf STRIP_FOR_TARGET=arm-none-eabi-strip
Thread model: single
gcc version 9.2.1 20191025 (release) [ARM/arm-9-branch revision 277599] (15:9-2019-q4-0ubuntu1)
三、安装pico sdk
1. 拉取pico sdk库
git submodule update --init:是要拉取tinyusb库,必备步骤,注意操作目录是在sdk目录下。
mkdir rasp-pico
cd rasp-pico
git clone -b master https://github.com/raspberrypi/pico-sdk.git
cd pico-sdk
git submodule update --init
2. 设置pico-sdk路径
在后面编译官方example时,需要用到官方的sdk头文件,需要在系统环境中配置sdk目录
vim .bashrc
在末尾添加一行:
export PICO_SDK_PATH=/home/neal/rasp-pico/pico-sdk
sdk路径配置成功后,验证下是否配置成功
env | grep PICO ✔ 08:05:06
PICO_SDK_PATH=/home/neal/rasp-pico/pico-sdk
三、拉取其他官方git库
官方还有其他几个库,尤其是examples库,非常有帮助。另外还有extra、playground属于高级用法的库,可以拉取下来,拉取的目录实在rasp-pico下。
git clone https://github.com/raspberrypi/pico-examples.git
git clone https://github.com/raspberrypi/pico-extras.git
git clone https://github.com/raspberrypi/pico-playground.git
四、编译官方example
官方示例代码的编译,分为两个步骤
1. 编译项目
- 进入pico-examples目录
- 新建一个build目录,进入此目录
- 在build目录下,运行
cmake ..
命令 成功后会输出一下信息:
~/rasp-pico cd pico-examples ✔ 08:39:28
~/rasp-pico/pico-examples master mkdir build ✔ 08:39:52
~/rasp-pico/pico-examples master cd build ✔ 08:39:55
~/rasp-pico/pico-examples/build master cmake .. ✔ 08:39:59
Using PICO_SDK_PATH from environment ('/home/neal/rasp-pico/pico-sdk')
PICO_SDK_PATH is /home/neal/rasp-pico/pico-sdk
Defaulting PICO_PLATFORM to rp2040 since not specified.
Defaulting PICO platform compiler to pico_arm_gcc since not specified.
-- Defaulting build type to 'Release' since not specified.
PICO compiler is pico_arm_gcc
-- The C compiler identification is GNU 9.2.1
-- The CXX compiler identification is GNU 9.2.1
-- The ASM compiler identification is GNU
-- Found assembler: /usr/bin/arm-none-eabi-gcc
Defaulting PICO target board to pico since not specified.
Using board configuration from /home/neal/rasp-pico/pico-sdk/src/boards/include/boards/pico.h
-- Found Python3: /usr/bin/python3.8 (found version "3.8.10") found components: Interpreter
TinyUSB available at /home/neal/rasp-pico/pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040; enabling build support for USB.
-- Configuring done
-- Generating done
-- Build files have been written to: /home/neal/rasp-pico/pico-examples/build
2. 编译blink代码
- 进入build目录下的blink目录
- 运行
make
编译命令- 成功后会输出以下信息
- 然后可以在此目录下,可以看到编译输入的二进制文件:blink.bin,blink.elf,blink.uf2,这三个文件都是编译成功的文件,uf2用于通过USB模式拷入pico,bin用于通过
~/rasp-pico/pico-examples/build master cd blink ✔ 08:42:10
~/rasp-pico/pico-examples/build/blink master ls ✔ 08:42:13
CMakeFiles cmake_install.cmake elf2uf2 Makefile
~/rasp-pico/pico-examples/build/blink master make ✔ 08:42:14
Scanning dependencies of target ELF2UF2Build
Creating directories for 'ELF2UF2Build'
No download step for 'ELF2UF2Build'
No patch step for 'ELF2UF2Build'
No update step for 'ELF2UF2Build'
Performing configure step for 'ELF2UF2Build'
-- The C compiler identification is GNU 9.4.0
-- The CXX compiler identification is GNU 9.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/neal/rasp-pico/pico-examples/build/elf2uf2
Performing build step for 'ELF2UF2Build'
Scanning dependencies of target elf2uf2
[ 50%] Building CXX object CMakeFiles/elf2uf2.dir/main.cpp.o
[100%] Linking CXX executable elf2uf2
[100%] Built target elf2uf2
No install step for 'ELF2UF2Build'
Completed 'ELF2UF2Build'
Built target ELF2UF2Build
Scanning dependencies of target bs2_default
Building ASM object pico-sdk/src/rp2_common/boot_stage2/CMakeFiles/bs2_default.dir/compile_time_choice.S.obj
Linking ASM executable bs2_default.elf
Built target bs2_default
Scanning dependencies of target bs2_default_padded_checksummed_asm
Generating bs2_default.bin
Generating bs2_default_padded_checksummed.S
Built target bs2_default_padded_checksummed_asm
Scanning dependencies of target blink
Building C object blink/CMakeFiles/blink.dir/blink.c.obj
Building C object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/rp2_common/pico_stdlib/stdlib.c.obj
Building C object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/rp2_common/hardware_gpio/gpio.c.obj
Building C object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/rp2_common/hardware_claim/claim.c.obj
Building C object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/rp2_common/pico_platform/platform.c.obj
Building C object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/rp2_common/hardware_sync/sync.c.obj
Building C object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/rp2_common/hardware_uart/uart.c.obj
Building ASM object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/rp2_common/hardware_divider/divider.S.obj
Building C object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/common/pico_time/time.c.obj
Building C object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/common/pico_time/timeout_helper.c.obj
Building C object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/rp2_common/hardware_timer/timer.c.obj
Building C object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/common/pico_sync/sem.c.obj
Building C object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/common/pico_sync/lock_core.c.obj
Building C object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/common/pico_sync/mutex.c.obj
Building C object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/common/pico_sync/critical_section.c.obj
Building C object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/common/pico_util/datetime.c.obj
Building C object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/common/pico_util/pheap.c.obj
Building C object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/common/pico_util/queue.c.obj
Building C object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/rp2_common/pico_runtime/runtime.c.obj
Building C object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/rp2_common/hardware_clocks/clocks.c.obj
Building C object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/rp2_common/hardware_irq/irq.c.obj
Building ASM object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/rp2_common/hardware_irq/irq_handler_chain.S.obj
Building C object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/rp2_common/hardware_pll/pll.c.obj
Building C object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/rp2_common/hardware_vreg/vreg.c.obj
Building C object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/rp2_common/hardware_watchdog/watchdog.c.obj
Building C object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/rp2_common/hardware_xosc/xosc.c.obj
Building C object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/rp2_common/pico_printf/printf.c.obj
Building ASM object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/rp2_common/pico_bit_ops/bit_ops_aeabi.S.obj
Building C object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/rp2_common/pico_bootrom/bootrom.c.obj
Building ASM object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/rp2_common/pico_divider/divider.S.obj
Building ASM object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/rp2_common/pico_double/double_aeabi.S.obj
Building C object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/rp2_common/pico_double/double_init_rom.c.obj
Building C object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/rp2_common/pico_double/double_math.c.obj
Building ASM object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/rp2_common/pico_double/double_v1_rom_shim.S.obj
Building ASM object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/rp2_common/pico_int64_ops/pico_int64_ops_aeabi.S.obj
Building ASM object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/rp2_common/pico_float/float_aeabi.S.obj
Building C object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/rp2_common/pico_float/float_init_rom.c.obj
Building C object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/rp2_common/pico_float/float_math.c.obj
Building ASM object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/rp2_common/pico_float/float_v1_rom_shim.S.obj
Building C object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/rp2_common/pico_malloc/pico_malloc.c.obj
Building ASM object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/rp2_common/pico_mem_ops/mem_ops_aeabi.S.obj
Building ASM object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/rp2_common/pico_standard_link/crt0.S.obj
Building CXX object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/rp2_common/pico_standard_link/new_delete.cpp.obj
Building C object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/rp2_common/pico_standard_link/binary_info.c.obj
Building C object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/rp2_common/pico_stdio/stdio.c.obj
Building C object blink/CMakeFiles/blink.dir/home/neal/rasp-pico/pico-sdk/src/rp2_common/pico_stdio_uart/stdio_uart.c.obj
Linking CXX executable blink.elf
Built target blink
五、载入和运行blink
通过上面编译blink项目,可以将生成的blink.uf2文件,通过USB方式考入pico然后运行。
载入blink文件
- 将pico的USB接口插上usb线
- 按住pico开发板上的BOOTSEL按钮,然后插上usb的接口
- 系统会提示加载了一个U盘,将blink.uf2文件拷入这个u盘,系统立马就会加载这个blink程序,同时u盘模式会自动退出
- 系统加载u盘后,pico里面会有两个自动生成的文件,不用管他就行。
- pico运行blink后,开发板生的led灯会闪烁。
欢迎访问我的小站:www.bytetoy.cn