Pokusím se nainstalovat si gcc překladač pro RISC-V procesor a přeložit si příklady pro PICO verze 2. Je to trochu vyšší dívčí. Všechno jsem to dělal na Linux Mint 22.

Přípravné práce

Musí být nainstalováno pico-sdk verze 2.0.

$ sudo apt-get install 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

Stažení a instalace

$ mkdir riscv
$ cd riscv
$ git clone -b "master" --depth=1 -c advice.detachedHead=false "https://github.com/riscv/riscv-gnu-toolchain.git"
$ git clone -b "releases/gcc-14" --depth=1 -c advice.detachedHead=false "https://github.com/gcc-mirror/gcc"
Instalační skript build-riscv-gcc.sh
#!/bin/bash

set -euo pipefail

INSTALLDIR="riscv-install"
rm -rf $INSTALLDIR
mkdir -p $INSTALLDIR

BUILDDIR=$(pwd)

cd riscv-gnu-toolchain
./configure --prefix=$BUILDDIR/$INSTALLDIR --with-arch=rv32ima_zicsr_zifencei_zba_zbb_zbs_zbkb_zca_zcb --with-abi=ilp32 --with-multilib-generator="rv32ima_zicsr_zifencei_zba_zbb_zbs_zbkb_zca_zcb-ilp32--;rv32imac_zicsr_zifencei_zba_zbb_zbs_zbkb-ilp32--" --with-gcc-src=$BUILDDIR/gcc
make -j$(nproc)
$ cp build-riscv-gcc.sh /home/jirka/riscv
$ chown a+x build-riscv-gcc.sh
$ ./build-riscv-gcc.sh

Trvá to hodně dlouho.

Aktualizace .bashrc
$ cd ~
$ nano .bashrc
  export PATH="$PATH:/home/jirka/riscv/riscv-install/bin"
  export PICO_TOOLCHAIN_PATH="/home/jirka/riscv/riscv-install"
  export PICO_COMPILER=pico_riscv_gcc

Překlad příkladů

Pro ARM M33
$ cd pico-examples
$ mkdir build
$ cmake -DPICO_PLATFORM=rp2350-arm-s -DPICO_BOARD=pico2 ..
$ make -j$(nproc)
Pro RISC-V
$ cd pico-examples
$ mkdir build-riscv
$ cmake -DPICO_PLATFORM=rp2350-riscv -DPICO_BOARD=pico2 ..
$ make -j$(nproc)

Vypadá to, že to funguje.

Přeloženo pro RISC-V
jirka@jirka-Precision-T3610:~/pico/pico/pico-examples/build-riscv/blink$ ls -l
celkem 869
-rwxrwxr-x 1 jirka jirka   6496 srp 29 21:23 blink.bin
-rw-rw-r-- 1 jirka jirka 108169 srp 29 21:23 blink.dis
-rwxrwxr-x 1 jirka jirka 343004 srp 29 21:23 blink.elf
-rw-rw-r-- 1 jirka jirka 300601 srp 29 21:23 blink.elf.map
-rw-rw-r-- 1 jirka jirka  13824 srp 29 21:23 blink.uf2
drwxrwxr-x 3 jirka jirka   3452 srp 29 21:22 CMakeFiles
-rw-rw-r-- 1 jirka jirka   1169 srp 29 21:22 cmake_install.cmake
-rw-rw-r-- 1 jirka jirka  98545 srp 29 21:22 Makefile

jirka@jirka-Precision-T3610:~/pico/pico/pico-examples/build-riscv/blink$ file blink.elf
blink.elf: ELF 32-bit LSB executable, UCB RISC-V, RVC, soft-float ABI, version 1 (SYSV), statically linked, with debug_info, not stripped
jirka@jirka-Precision-T3610:~/pico/pico/pico-examples/build-riscv/blink$ file blink.uf2
blink.uf2: UF2 firmware image, family 0xe48bff57, address 0x10ffff00, 2 total blocks
jirka@jirka-Precision-T3610:~/pico/pico/pico-examples/build-riscv/blink$ cp blink.uf2 /media/jirka/RP2350/
Pro srovnání přeloženo pro ARM M33
jirka@jirka-Precision-T3610:~/pico/pico/pico-examples/build/blink$ ls -l
celkem 825
-rwxrwxr-x 1 jirka jirka   6196 srp 28 22:30 blink.bin
-rw-rw-r-- 1 jirka jirka  62689 srp 28 22:30 blink.dis
-rwxrwxr-x 1 jirka jirka 342400 srp 28 22:30 blink.elf
-rw-rw-r-- 1 jirka jirka 295401 srp 28 22:30 blink.elf.map
-rw-rw-r-- 1 jirka jirka  13312 srp 28 22:30 blink.uf2
drwxrwxr-x 3 jirka jirka   3452 srp 28 22:57 CMakeFiles
-rw-rw-r-- 1 jirka jirka   1136 srp 28 22:29 cmake_install.cmake
-rw-rw-r-- 1 jirka jirka 106425 srp 28 22:29 Makefile

jirka@jirka-Precision-T3610:~/pico/pico/pico-examples/build/blink$ file blink.elf
blink.elf: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, with debug_info, not stripped
jirka@jirka-Precision-T3610:~/pico/pico/pico-examples/build/blink$ file blink.uf2
blink.uf2: UF2 firmware image, family 0xe48bff57, address 0x10ffff00, 2 total blocks
jirka@jirka-Precision-T3610:~/pico/pico/pico-examples/build/blink$ cp blink.uf2 /media/jirka/RP2350/
jirka@jirka-Precision-T3610:~/pico/pico/pico-examples/build/blink$

V obou případech LED bliká.

Zdroje a odkazy