Программирование ARM Сборка программ чипов Bouffalo в Linux Sat, May 04 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

Сборка программ чипов Bouffalo в Linux Печать
Добавил(а) microsin   

В этом разделе в основном рассказывается, как использовать командную строку для программ с SoC-чипами разработки под управлением Linux или WSL. Как установить WSL под Windows и как использовать последовательный порт под WSL1/WSL2, см. [6, 7].

[Установка необходимого инструментария]

Настройка инструментария сборки:

$ cd ~
$ sudo apt install git make ninja-build -y

Установка инструментов RISC-V. Включает закачку помощью git, копирование в каталог пользователя /usr/bin и добавление путей запуска в ~/.bashrc:

$ cd ~
$ git clone https://gitee.com/bouffalolab/toolchain_gcc_t-head_linux.git
$ sudo cp -rf toolchain_gcc_t-head_linux/ /usr/bin
$ echo "export PATH=\"$PATH:/usr/bin/toolchain_gcc_t-head_linux/bin\"" >> ~/.bashrc
$ source ~/.bashrc

После выполнения вышеперечисленных действий нужно проверить, действительно ли установка прошла успешно, для этого введите следующую команду:

$ make -v

В случае успешной установки будет выведено:

GNU Make 4.1
Built for x86_64-pc-linux-gnu
Copyright (C) 1988-2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later < http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Проверка компилятора:

$ riscv64-unknown-elf-gcc -v
Using built-in specs.
COLLECT_GCC=riscv64-unknown-elf-gcc
COLLECT_LTO_WRAPPER=/mnt/d/EmbeddedSoftware/Xuantie-900-gcc-elf-newlib-x86_64-V2.2.5/bin/
 libexec/gcc/riscv64-unknown-elf/10.2.0/lto-wrapper
Target: riscv64-unknown-elf
Configured with: /lhome/software/toolsbuild/slave2/workspace/Toolchain/build-gnu-riscv_4/
 ./source/riscv/riscv-gcc/configure --target=riscv64-unknown-elf
 --with-gmp=/lhome/software/toolsbuild/slave2/workspace/Toolchain/build-gnu-riscv_4/
 build-riscv-gcc-riscv64-unknown-elf/build-Xuantie-900-gcc-elf-newlib-x86_64-V2.2.5/
 lib-for-gcc-x86_64-linux--with-mpfr=/lhome/software/toolsbuild/slave2/workspace/
 Toolchain/build-gnu-riscv_4/build-riscv-gcc-riscv64-unknown-elf/build-Xuantie-900
 -gcc-elf-newlib-x86_64-V2.2.5/lib-for-gcc-x86_64-linux --with-mpc=/lhome/software/
 toolsbuild/slave2/workspace/Toolchain/ build-gnu-riscv_4/build-riscv-gcc-riscv64-unknown-elf/
 build-Xuantie-900-gcc-elf-newlib-x86_64-V2.2.5/lib-for-gcc-x86_64-linux --with-libexpat-prefix=/
 lhome/software/toolsbuild/slave2/workspace/Toolchain/build-gnu-riscv_4/build-riscv-gcc-riscv64
 -unknown-elf/build-Xuantie-900-gcc-elf-newlib-x86_64-V2.2.5/lib-for-gcc-x86_64-linux
 --with-libmpfr-prefix=/lhome/software/toolsbuild/slave2/workspace/Toolchain/build-gnu-riscv_4/
 build-riscv-gcc-riscv64-unknown-elf/build-Xuantie-900-gcc-elf-newlib-x86_64-V2.2.5/lib-for-gcc
 -x86_64-linux --with-pkgversion='Xuantie-900 elf newlib gcc Toolchain V2.2.5 B-20220323'
 CXXFLAGS='-g -O2 -DTHEAD_VERSION_NUMBER=2.2.5' --enable-libgcctf --prefix=/lhome/software/
 toolsbuild/slave2/workspace/Toolchain/build-gnu-riscv_4/build-riscv-gcc-riscv64-unknown-elf/
 Xuantie-900-gcc-elf-newlib-x86_64-V2.2.5 --disable-shared --disable-threads --enable-languages=c,
 c++ --with-system-zlib --enable-tls --with-newlib --with-sysroot=/lhome/software/toolsbuild/slave2/
 workspace/Toolchain/build-gnu-riscv_4/build-riscv-gcc-riscv64-unknown-elf/Xuantie-900-gcc-elf
 -newlib-x86_64-V2.2.5/riscv64-unknown-elf --with-native-system-header-dir=/include
 --disable-libmudflap --disable-libssp --disable-libquadmath --disable-libgomp --disable-nls
 --disable-tm-clone-registry --src=/lhome/software/toolsbuild/slave2/workspace/Toolchain/build
 -gnu-riscv_4/./source/riscv/riscv-gcc --enable-multilib --with-abi=lp64d --with-arch=rv64gcxthead
 'CFLAGS_FOR_TARGET=-Os   -mcmodel=medany' 'CXXFLAGS_FOR_TARGET=-Os   -mcmodel=medany'
 Thread model: single
Supported LTO compression algorithms: zlib
gcc version 10.2.0 (Xuantie-900 elf newlib gcc Toolchain V2.2.5 B-20220323)

[Bouffalo SDK и примеры кода]

Git-репозиторий Bouffalo SDK. Скачайте Bouffalo SDK, в его составе есть множество примеров, готовых стать основой для будущей разработки.

$ cd ~
$ git clone https://github.com/bouffalolab/bouffalo_sdk.git

Как компилировать. Откройте терминал Linux, перейдите в каталог examples, выберите интересующий вас пример, в его каталоге должен быть файл Makefile. Сделайте копию каталога выбранного примера.

$ cd ~/bouffalo_sdk
$ mkdir projects
$ cp -r examples/helloworld projects/helloworld
$ cd projects/helloworld

Для компиляции используйте следующую команду, сгенерированный bin-файл будет выведен в каталог build/build_out:

$ cd examples/helloworld
# chip_name — модель чипа, можно указать bl702, bl616, bl808, bl606p.
# board_name — название макетной платы, подробности смотрите в каталоге bsp/board.
# $ make CHIP=chip_name BOARD=board_name
# Пример:
$ make CHIP=bl602 BOARD=bl602dk 

Замечание: если вы используете BL808 или BL606P, вам необходимо добавить CPU_ID=id на вышеуказанной основе, id может быть m0 или d0.

Очистка. Для удаления временных файлов введите команду:

$ make clean

Также можно очистку выполнить, если удалить папку build или build_out (имя папки с результатами сборки зависит от версии SDK):

$ rm -r build

Прошивка. На примере микроконтроллера BL602 и программы helloworld:

1. Зайдите в каталог проекта командой cd.

2. Снимите питание +3.3V с микроконтроллера BL602.

3. Соедините ножку GPIO8 микроконтроллера BL602 с его шиной питания +3.3V. При включении питания это будет означать сигнал активации загрузчика.

4. Подайте питание +3.3V на микроконтроллер BL602.

5. Выполните команду make flash CHIP=bl602 COMX=/dev/ttyUSB0. Замечание: если вы используете BL808 или BL606P, вам необходимо добавить CPU_ID=id на вышеуказанной основе, id может быть m0 или d0.

$ make flash CHIP=bl602 COMX=/dev/ttyUSB0
./bouffalo_sdk/tools/bflb_tools/bouffalo_flash_cube/BLFlashCommand-ubuntu --interface=uart
 --baudrate=2000000 --port=/dev/ttyUSB0 --chipname=bl602 --cpu_id= --config=flash_prog_cfg.ini
['./bouffalo_sdk/tools/bflb_tools/bouffalo_flash_cube/BLFlashCommand-ubuntu', '--interface=uart',
 '--baudrate=2000000', '--port=/dev/ttyUSB0', '--chipname=bl602', '--cpu_id=', '--config=flash_prog_cfg.ini']
[08:36:16.014] - Serial port is /dev/ttyUSB0
[08:36:16.014] - ==================================================
[08:36:16.015] - Program Start
[08:36:16.015] - ========= eflash loader cmd arguments =========
[08:36:16.015] - serial port is /dev/ttyUSB0
[08:36:16.015] - chiptype: bl602
[08:36:16.015] - cpu_reset=False
[08:36:16.017] - com speed: 2000000
[08:36:16.017] - ========= Interface is uart =========
[08:36:16.017] - Eflash load bin file: ~/bouffalo_sdk/tools/bflb_tools/
 bouffalo_flash_cube/chips/bl602/eflash_loader/eflash_loader_40m.bin
[08:36:16.017] - ========= load eflash_loader.bin =========
[08:36:16.017] - Load eflash_loader.bin via uart
[08:36:16.017] - ========= image load =========
[08:36:16.275] - tx rx and power off, press the machine!
[08:36:16.275] - cutoff time is 0.1
[08:36:16.376] - power on tx and rx
[08:36:17.102] - reset cnt: 0, reset hold: 0.005, shake hand delay: 0.1
[08:36:17.102] - clean buf
[08:36:17.102] - send sync
[08:36:17.303] - ack is b'4f4b'
[08:36:17.303] - shake hand success
[08:36:17.314] - get_boot_info
[08:36:17.315] - data read is b'010000000000000003000000570fe24cb97c1600'
[08:36:17.315] - ========= ChipID: 7cb94ce20f57 =========
[08:36:17.315] - last boot info: None
[08:36:17.315] - sign is 0 encrypt is 0
[08:36:17.315] - segcnt is 1
[08:36:17.321] - segdata_len is 37184
[08:36:17.406] - 4080/37184
[08:36:17.491] - 8160/37184
[08:36:17.576] - 12240/37184
[08:36:17.661] - 16320/37184
[08:36:17.746] - 20400/37184
[08:36:17.831] - 24480/37184
[08:36:17.915] - 28560/37184
[08:36:18.000] - 32640/37184
[08:36:18.086] - 36720/37184
[08:36:18.096] - 37184/37184
[08:36:18.097] - Run img
[08:36:18.198] - Load helper bin time cost(ms): 2180.154296875
[08:36:18.298] - Flash load shake hand
[08:36:18.307] - default set DTR high
[08:36:18.407] - clean buf
[08:36:18.408] - send sync
[08:36:18.613] - ack is b'4f4b'
[08:36:18.613] - Read mac addr
[08:36:18.614] - MACADDR: 570fe24cb97c
[08:36:18.614] - flash set para
[08:36:18.614] - ========= flash read jedec ID =========
[08:36:18.614] - Read flash jedec ID
[08:36:18.614] - readdata:
[08:36:18.614] - b'ef401580'
[08:36:18.614] - Finished
[08:36:18.614] - flash config Not found,use default
[08:36:18.614] - jedec_id:ef4015
[08:36:18.614] - capacity_id:21
[08:36:18.614] - capacity:2.0M
[08:36:18.614] - get flash size: 0x00200000
[08:36:18.614] - Program operation
[08:36:18.614] - Dealing Index 0
[08:36:18.614] - ========= programming ~/bouf_hello_world/./build/
 build_out/helloworld_bl602.bin to 0x000000
[08:36:18.615] - ========= flash load =========
[08:36:18.615] - ========= flash erase =========
[08:36:18.615] - Erase flash  from 0x0 to 0x884f
[08:36:18.619] - erase pending
[08:36:18.754] - erase pending
[08:36:18.803] - Erase time cost(ms): 187.701904296875
[08:36:18.826] - decompress flash load 18860
[08:36:18.839] - Load 2048/18860 {"progress":10}
[08:36:18.856] - Load 4096/18860 {"progress":21}
[08:36:18.871] - Load 6144/18860 {"progress":32}
[08:36:18.886] - Load 8192/18860 {"progress":43}
[08:36:18.901] - Load 10240/18860 {"progress":54}
[08:36:18.913] - Load 12288/18860 {"progress":65}
[08:36:18.928] - Load 14336/18860 {"progress":76}
[08:36:18.943] - Load 16384/18860 {"progress":86}
[08:36:18.959] - Load 18432/18860 {"progress":97}
[08:36:18.973] - Load 18860/18860 {"progress":100}
[08:36:18.973] - Load 18860/18860 {"progress":100}
[08:36:18.973] - Write check
[08:36:18.979] - Flash load time cost(ms): 176.591796875
[08:36:18.979] - Finished
[08:36:18.980] - Sha caled by host: d86f096eee4dbdcdf2fc5393fb9c336e2063b02de578b5d7868fd8527241a46f
[08:36:18.980] - xip mode Verify
[08:36:18.991] - Read Sha256/34896
[08:36:18.991] - Flash xip readsha time cost(ms): 10.74951171875
[08:36:18.991] - Finished
[08:36:18.992] - Sha caled by dev: d86f096eee4dbdcdf2fc5393fb9c336e2063b02de578b5d7868fd8527241a46f
[08:36:18.992] - Verify success
[08:36:18.992] - Program Finished
[08:36:18.992] - All time cost(ms): 2977.26806640625
[08:36:19.196] - close interface
[08:36:19.197] - [All Success]

6. Для проверки работы прогаммы запустите putty, настройте скорость подключения 2000000 мегабит, подключитесь к порту /dev/ttyUSB0. Передерните питание BL602, терминал putty покажет примерно следующее:

BL602 helloworld output

Замечание: если вы используете BL808 или BL606P, вам необходимо добавить CPU_ID=id на вышеуказанной основе, id может быть m0 или d0.

Отладка. Для отладки рекомендуется использовать eclipse + cklink, что позволяет делать сборку и отладку с помощью Eclipse или использовать отладку из командной строки. Это здесь не рассматривается.

$ git clone https://github.com/bouffalolab/bl_iot_sdk.git
$ cd bl_iot_sdk/customer_app/bl602_demo_wifi/
$ chmod +x genromap
$ chmod -R +x toolchain/
$ dos2unix genromap
$ ./genromap
$ chmod +x tools/flash_tool/bflb_iot_tool-ubuntu
# Создание файла ./firmware.bin из таблицы разделов, дерева устройств
# и кода программы:
$ tools/flash_tool/bflb_iot_tool-ubuntu --interface=uart --baudrate=2000000 \
 --port=/dev/ttyUSB0 --chipname=bl602 --firmware="build_out/bl602_demo_wifi.bin" \
 --pt="tools/flash_tool/chips/bl602/partition/partition_cfg_2M.toml" \
 --dts="tools/flash_tool/chips/bl602/device_tree/bl_factory_params_IoTKitA_40M.dts" \
 --build
# Прошивка ./firmware.bin, это сгенерированный образ flash:
$ tools/flash_tool/bflb_iot_tool-ubuntu --interface=uart --baudrate=2000000 \
 --port=/dev/ttyUSB0 --chipname=bl602 --addr=0x0 --firmware="./firmware.bin" --single

Ниже пример прошивки памяти flash частями, это позволяет не сбрасывать энергонезависимые настройки, сохраненные с помощью библиотеки easyflash [5]. Кусок makefile:

BL_FLASH_PROGRAM ?= ${HOME}/bl_iot_sdk/tools/flash_tool/bflb_iot_tool-ubuntu
BAUDRATE         ?= 2000000
COMX             ?= /dev/ttyUSB0
CHIP              = bl602
 
command_flash = $(BL_FLASH_PROGRAM) --interface=uart --baudrate=$(BAUDRATE) \
   --port=$(COMX) --chipname=$(CHIP) --firmware="build_out/bl602_demo_wifi.bin" \
   --pt="${HOME}/bl_iot_sdk/tools/flash_tool/chips/bl602/partition/partition_cfg_2M.toml" \
   --dts="${HOME}/bl_iot_sdk/tools/flash_tool/chips/bl602/device_tree/bl_factory_params_IoTKitA_40M.dts"

[Устранение проблем]

Система компиляции не может найти стандартные заголовочные файлы assert.h, errno.h, stdint.h. При этом в логе компиляции проекта (файл build/CMakeFiles/CMakeError.log) появляются сообщения наподобие:

ignoring nonexistent directory "/usr/lib/gcc/riscv64-unknown-elf/9.3.0/riscv64-unknown-elf/sys-include"
ignoring nonexistent directory "/usr/lib/gcc/riscv64-unknown-elf/9.3.0/riscv64-unknown-elf/include"

Очевидно, что настроены неправильные пути поиска стандартных заголовков. Необходимо правильно настроить переменную окружения CROSS_COMPILE в файле Makefile. Она должна указывать на полный путь до каталога bin утилит riscv64-unknown-elf, которые были установлены выше командой sudo cp -rf toolchain_gcc_t-head_linux/ /usr/bin (см. выше "Установка инструментов RISC-V"). Относительно этого пути автоматически настраиваются пути поиска стандартных заголовков. Пример установки корректного пути до тулчейна:

#CROSS_COMPILE ?= riscv64-unknown-elf-
CROSS_COMPILE ?= $(HOME)/install/toolchain_gcc_t-head_linux/bin/riscv64-unknown-elf-

Пример лога компиляции:

$ make CHIP=bl602 BOARD=bl602dk
./tools/cmake/bin/cmake -S . -B build -G "Unix Makefiles" -DCROSS_COMPILE=riscv64-unknown-elf-
 -DCHIP=bl602 -DCPU_ID= -DBOARD=bl602dk -DBOARD_DIR= -DCONFIG_DEBUG=y -DCONFIG_ROMAPI=y -DCONFIG_USB_HS=y
 -DCONFIG_COMX=COM5 -DCMAKE_EXPORT_COMPILE_COMMANDS=OFF -DCONFIG_TLSF=y
-- The C compiler identification is GNU 9.3.0
-- The CXX compiler identification is GNU 9.3.0
-- The ASM compiler identification is GNU
-- Found assembler: /usr/bin/riscv64-unknown-elf-gcc
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - failed
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - failed
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- [register library : libc], path:/home/домен/имяпользователя/asm/bouffalo_sdk/components/libc
-- [register library : mm], path:/home/домен/имяпользователя/asm/bouffalo_sdk/components/mm
-- [register library : utils], path:/home/домен/имяпользователя/asm/bouffalo_sdk/components/utils
-- [register library : lhal], path:/home/домен/имяпользователя/asm/bouffalo_sdk/drivers/lhal
-- [register extern library : libpka], path:/home/домен/имяпользователя/asm/bouffalo_sdk/drivers/lhal
-- [register library : std], path:/home/домен/имяпользователя/asm/bouffalo_sdk/drivers/soc/bl602/std
-- Configuring done
-- Generating done
CMake Warning:
  Manually-specified variables were not used by the project:
 
    CONFIG_COMX
    CONFIG_USB_HS
 
-- Build files have been written to: /home/домен/имяпользователя/asm/bouffalo_sdk/projects/helloworld/build
...

Видно, что переменные CONFIG_USB_HS и CONFIG_COMX устанавливаются в командной строке ./tools/cmake/bin/cmake. CONFIG_COMX и CONFIG_USB_HS настраиваются в файле project.build, который находится в корне Bouffalo SDK:

COMX ?=COM5
...

cmake_definition += -DCONFIG_USB_HS=$(CONFIG_USB_HS)
cmake_definition += -DCONFIG_COMX=$(COMX)

Конечно, при необходимости можно закомментировать эти строчки в файле project.build или поменять их значение. Но лучше всего указать их значение из командной строки make, например:

$ make CHIP=bl602 BOARD=bl602dk COMX=COM9 CONFIG_USB_HS=n

Либо, как вариант, настроить эти переменные в Makefile проекта, например:

SDK_DEMO_PATH ?= .
BL_SDK_BASE ?= $(SDK_DEMO_PATH)/..
CXXFLAGS += -I/home/домен/имяпользователя/install/toolchain_gcc_t-head_linux/riscv64-unknown-elf/include
 
export BL_SDK_BASE
 
CHIP ?= bl616
BOARD ?= bl616dk
CROSS_COMPILE ?= riscv64-unknown-elf-
 
# Добавьте здесь пользовательские определения для cmake:
#cmake_definition+=-Dxxx=sss
 
COMX=COM9
CONFIG_USB_HS=n
 
include $(BL_SDK_BASE)/project.build

Несмотря на то, что переменная CROSS_COMPILE в Makefile настроена правильно, в лог выводятся сообщения наподобие:

$ make CHIP=bl602 BOARD=bl602dk
./tools/cmake/bin/cmake -S . -B build -G "Unix Makefiles" -DCROSS_COMPILE=/usr/bin/
 toolchain_gcc_t-head_linux/bin/riscv64-unknown-elf- -DCHIP=bl602 -DCPU_ID= -DBOARD=bl602dk
 -DBOARD_DIR= -DCONFIG_DEBUG=y -DCONFIG_ROMAPI=y -DCONFIG_USB_HS=y -DCONFIG_COMX=COM5
 -DCMAKE_EXPORT_COMPILE_COMMANDS=OFF -DCONFIG_TLSF=y
-- The C compiler identification is unknown
-- The CXX compiler identification is unknown
-- The ASM compiler identification is unknown
-- Found assembler: /usr/bin/toolchain_gcc_t-head_linux/bin/riscv64-unknown-elf-gcc
CMake Error at ~/bouffalo_sdk/cmake/bouffalo_sdk-config.cmake:31
 (enable_language):
  The CMAKE_C_COMPILER:
 
    /usr/bin/toolchain_gcc_t-head_linux/bin/riscv64-unknown-elf-gcc
 
  is not a full path to an existing compiler tool.
 
  Tell CMake where to find the compiler by setting either the environment
  variable "CC" or the CMake cache entry CMAKE_C_COMPILER to the full path to
  the compiler, or to the compiler name if it is in the PATH.
Call Stack (most recent call first):
  CMakeLists.txt:5 (find_package)
 
CMake Error at ~/bouffalo_sdk/cmake/bouffalo_sdk-config.cmake:31 (enable_language):
  The CMAKE_CXX_COMPILER:
 
    /usr/bin/toolchain_gcc_t-head_linux/bin/riscv64-unknown-elf-g++
 
  is not a full path to an existing compiler tool.
 
  Tell CMake where to find the compiler by setting either the environment
  variable "CXX" or the CMake cache entry CMAKE_CXX_COMPILER to the full path
  to the compiler, or to the compiler name if it is in the PATH.
Call Stack (most recent call first):
  CMakeLists.txt:5 (find_package)
 
CMake Error at ~/bouffalo_sdk/cmake/bouffalo_sdk-config.cmake:31 (enable_language):
  The CMAKE_ASM_COMPILER:
 
    /usr/bin/toolchain_gcc_t-head_linux/bin/riscv64-unknown-elf-gcc
 
  is not a full path to an existing compiler tool.
 
  Tell CMake where to find the compiler by setting either the environment
  variable "ASM" or the CMake cache entry CMAKE_ASM_COMPILER to the full path
  to the compiler, or to the compiler name if it is in the PATH.
Call Stack (most recent call first):
  CMakeLists.txt:5 (find_package)

Проверка запуска компилятора приводит к сообщению отсутствия прав доступа:

$ /usr/bin/toolchain_gcc_t-head_linux/bin/riscv64-unknown-elf-gcc --version
bash: /usr/bin/toolchain_gcc_t-head_linux/bin/riscv64-unknown-elf-gcc: Отказано в доступе

С правами root та же самая команда запускается нормально:

$ sudo /usr/bin/toolchain_gcc_t-head_linux/bin/riscv64-unknown-elf-gcc --version
riscv64-unknown-elf-gcc (Xuantie-900 elf newlib gcc Toolchain V2.6.1 B-20220906) 10.2.0
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Для решения проблемы необходимо настроить права доступа на запуск к каталогу bin утилит riscv64-unknown-elf для обычного пользователя. Обычно это делается командой chmod (возможно придется также поменять владельца командой chown). Права доступа на каталог можно посмотреть командой sudo ls -l /usr/bin/toolchain_gcc_t-head_linux/bin:

$ sudo ls -l /usr/bin/toolchain_gcc_t-head_linux/bin
итого 219712
-rwxr-xr-x 1 root root   866328 авг  7 14:39 riscv64-unknown-elf-addr2line
-rwxr-xr-x 1 root root   897032 авг  7 14:39 riscv64-unknown-elf-ar
-rwxr-xr-x 1 root root  1383336 авг  7 14:39 riscv64-unknown-elf-as
-rwxr-xr-x 1 root root 27504528 авг  7 14:39 riscv64-unknown-elf-c++
-rwxr-xr-x 1 root root   863744 авг  7 14:39 riscv64-unknown-elf-c++filt
-rwxr-xr-x 1 root root 27503984 авг  7 14:39 riscv64-unknown-elf-cpp
-rwxr-xr-x 1 root root    33240 авг  7 14:39 riscv64-unknown-elf-elfedit
-rwxr-xr-x 1 root root 27504528 авг  7 14:39 riscv64-unknown-elf-g++
-rwxr-xr-x 1 root root 27500976 авг  7 14:39 riscv64-unknown-elf-gcc
-rwxr-xr-x 1 root root 27500976 авг  7 14:39 riscv64-unknown-elf-gcc-10.2.0
-rwxr-xr-x 1 root root    29688 авг  7 14:39 riscv64-unknown-elf-gcc-ar
-rwxr-xr-x 1 root root    29624 авг  7 14:39 riscv64-unknown-elf-gcc-nm
-rwxr-xr-x 1 root root    29624 авг  7 14:39 riscv64-unknown-elf-gcc-ranlib
-rwxr-xr-x 1 root root  1427384 авг  7 14:39 riscv64-unknown-elf-gcov
-rwxr-xr-x 1 root root   567040 авг  7 14:39 riscv64-unknown-elf-gcov-dump
-rwxr-xr-x 1 root root   588200 авг  7 14:39 riscv64-unknown-elf-gcov-tool
-rwxr-xr-x 1 root root  8109080 авг  7 14:39 riscv64-unknown-elf-gdb
-rwxr-xr-x 1 root root     4045 авг  7 14:39 riscv64-unknown-elf-gdb-add-index
-rwxr-xr-x 1 root root   935368 авг  7 14:39 riscv64-unknown-elf-gprof
-rwxr-xr-x 1 root root  1338144 авг  7 14:39 riscv64-unknown-elf-ld
-rwxr-xr-x 1 root root  1338144 авг  7 14:39 riscv64-unknown-elf-ld.bfd
-rwxr-xr-x 1 root root 61028048 авг  7 14:39 riscv64-unknown-elf-lto-dump
-rwxr-xr-x 1 root root   881360 авг  7 14:39 riscv64-unknown-elf-nm
-rwxr-xr-x 1 root root  1016368 авг  7 14:39 riscv64-unknown-elf-objcopy
-rwxr-xr-x 1 root root  1568184 авг  7 14:39 riscv64-unknown-elf-objdump
-rwxr-xr-x 1 root root   897032 авг  7 14:39 riscv64-unknown-elf-ranlib
-rwxr-xr-x 1 root root   820016 авг  7 14:39 riscv64-unknown-elf-readelf
-rwxr-xr-x 1 root root   868144 авг  7 14:39 riscv64-unknown-elf-size
-rwxr-xr-x 1 root root   868280 авг  7 14:39 riscv64-unknown-elf-strings
-rwxr-xr-x 1 root root  1016368 авг  7 14:39 riscv64-unknown-elf-strip

Однако проще всего сделать копию утилит в каталог, на который уже есть права доступа:

$ cp -rf toolchain_gcc_t-head_linux/ ~/install

Кусок лога компиляции:

...
CC build_out/blog_testc/blog_testc4_onlypri.o
CC build_out/httpc/http_client.o
CC build_out/bloop/src/bloop_base.o
Сообщения ассемблера:
Критическая ошибка: неверный параметр -march=: «rv32imfc»
make[1]: *** [~/bl_iot_sdk/make_scripts_riscv/component_wrapper.mk:313: evb/src/boot/gcc/entry.o] Ошибка 1
make[1]: *** Ожидание завершения заданий…
Сообщения ассемблера:
Сообщения ассемблера:
CC build_out/aws-iot/aws-iot-device-sdk-embedded-C/src/aws_iot_jobs_types.o
Критическая ошибка: Сообщения ассемблера:
Критическая ошибка: CC build_out/bloop/src/bloop_handler_sys.o
Критическая ошибка: неверный параметр -march=: «rv32imfc»
...

Как это ни странно, ошибка правится добавлением прав на выполнение в каталог тулчейна командой chmod (с правами текущего пользователя, либо с правами root, через sudo):

$ chmod +x -R toolchain/

Иногда может помочь также и смена владельца каталога toolchain:

$ chmod +x -R toolchain/

[Ссылки]

1. Bouffalo Build with Linux or WSL.
2. Bouffalo Build and Debug with Eclipse.
3. bouffalolab / bouffalo_sdk.
4bouffalolab / bl_iot_sdk.
5. BL602: как работать с энергонезависимыми настройками easyflash.
6. Запуск Linux на Windows помощью WSL.
7. WSL: программирование AVR в виртуальной машине Linux.

 

Добавить комментарий


Защитный код
Обновить

Top of Page