Giter VIP home page Giter VIP logo

pine64 / bl_iot_sdk Goto Github PK

View Code? Open in Web Editor NEW

This project forked from bouffalolab/bl_iot_sdk

134.0 19.0 60.0 1.58 GB

BL602 SDK (Pine64 fork)

Home Page: https://pine64.github.io/bl602-docs/

License: Apache License 2.0

Shell 0.09% C 30.11% Makefile 0.23% C++ 52.47% Assembly 0.05% Objective-C 0.05% Batchfile 0.01% CMake 0.14% HTML 4.69% Perl 0.01% Python 0.81% GDB 0.01% XC 0.06% Roff 11.28%
pine64 bl602 toolchain sdk risc-v

bl_iot_sdk's Introduction

BL602 SDK (Pine64 version)

Join us on Discord, Telegram, Matrix

This repository contains the Pine64 fork of Bouffalo Lab's SDK for their BL602 Wi-Fi/BLE Combo RISC-V SoC. Documentation, including upstream documentation, translations, mirrored technical documentation, and original reverse engineered documentation is at bl602-docs, which is cloned as a submodule of this repository at docs. Use git submodule update --init to initialize the submodule.

This repository is the central focus of Pine64's Nutcracker Challenge. The main task is to reverse engineer the following files:

This is being done at bl602-re.

Documentation

You can find a lot of documentation on PINE64 Documentation Website and PINE64 Documentation Repository, where you can find Datasheets, Reference Manuals and various other documentation materials.

Quick Start

In order to build sample apps, you need to set a few environment variables:

export BL60X_SDK_PATH=/path/to/this/repo
export CONFIG_CHIP_NAME=BL602

In order to build all sample apps simply call make, for example:

make

To only build the sample app of interest, go to the directory of the app, then call make, for example:

cd customer_app/bl602_boot2
make

Call

make CONFIG_TOOLPREFIX=riscv64-linux-gnu-

if you wish to bypass the bundled cross-compiler and using your distribution's own cross-compiler.

There is a linker script (written in python) at image_conf/flash_build.py. To run this, you need to specify the application and the target, for example:

python3 flash_build.py bl602_boot2 bl602

Note: If you decide to copy any project outside of the customer_app folder, you will need to define a few variables in order to compile it:

export BL60X_SDK_PATH=/path/to/this/repo
export CONFIG_CHIP_NAME=bl602

Docker

To set up a development environment in Docker, and do a full build of all the example projects, using the bundled toolchain:

docker build -t bl602sdk -f Dockerfile.bundled
docker run -t -i --rm bl602sdk
# make

Hardware

BL602 is a 32-bit RISC-V based combo chipset supporting Wi-Fi and BLE (Bluetooth Low Energy). The chip is made by Nanjing-based Bouffalo Lab for ultra-low-power applications. In terms of price range and feature set, the chip is competing against Espressif ESP8266. The RISC-V core is based on SiFive E24.

At the moment there are mainly three development boards:

Comparison with ESP8266

ย  Bouffalo Lab BL602 Espressif ESP8266
Architecture

32-bit RISC-V (SiFive E24)

@192MHz (dynamic @1-192MHz)

L1 cache

FPU

32-bit Xtensa

@80MHz (and 160MHz)

Memory

276KB SRAM

128KB ROM

1 Kb eFuse

optional embdedded flash

XIP QSPI flash support

32 KiB instruction RAM

32 KiB instruction cache RAM

80 KiB user-data RAM

16 KiB ETS system-data RAM

No programmable ROM

QSPI flash support (up to 16 MB)

Wi-Fi

802.11 b/g/n @2.4GHz

WPS/WEP/WPA/WPA2/WPA3

802.11 b/g/n @2.4GHz

WEP/WPA/WPA2

Bluetooth LE 5.0 NONE
GPIO x16 x16
SDIO x1 2.0 slave x1 v2.0 slave
SPI x1 x2
UART x2 x1.5 (One Tx only)
I2C x1 x1 (software implemented)
I2S NONE x1 (with DMA)
PWM channels x5 x4
ADC 12-bit 10-bit (SAR)
DAC 10-bit NONE
Analog Comparator x2 NONE
DMA x4 with I2S
Timer

RTC (up to 1 year)

x2 32-bit general-purpose

x1 hardware

x1 software

(no interrupt gen. on sw. timer)

IR Remote Control x1 x1
Debug JTAG support ?

bl_iot_sdk's People

Contributors

avamander avatar bkpepe avatar bouffalolab2020 avatar bryanquigley avatar cgbarros avatar chinawrj avatar disdi avatar enjoycodefun avatar ferenc- avatar fortysixandtwo avatar ftk avatar gamelaster avatar gpsbabeldeveloper avatar jevere avatar jf002 avatar jvasile avatar konradybcio avatar madushan1000 avatar paulcapron avatar paulusmack avatar protobits avatar prozsolt avatar qarmin avatar robertlipe avatar serv-inc avatar shchen-lab avatar sthibaul avatar suculent avatar tchebb avatar yafeijin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bl_iot_sdk's Issues

RISCV toolchain from source

Hi folks,

Do you think it might be useful to spend some time to recover toolchain from source? I mean to be able to build exactly the same versions of tools like GCC, libc, etc. and adjust some configuration bits if needed. I did this kind of stuff for few boards lately (https://github.com/v3l0c1r4pt0r/cc-factory) and I think I might be able to do the same thing for BL602. For the mentioned boards this allowed me to link to existing binaries, but I didn't have any working toolchain in these cases. Here we have some. So let me know, what do you think? Is it worth to do it now? I can spend an evening or two on that.

Builds in customer_app fail on MacOS

Any idea why this happens? I have no clue, where to find the error...

/Users/sychram/Repositories/bl_iot_sdk-ubuntu/bl_iot_sdk/toolchain/riscv/Darwin/bin/../lib/gcc/riscv64-unknown-elf/8.3.0/../../../../riscv64-unknown-elf/bin/ld: /Users/sychram/Repositories/bl_iot_sdk-ubuntu/bl_iot_sdk/toolchain/riscv/Darwin/bin/../lib/gcc/riscv64-unknown-elf/8.3.0/../../../../riscv64-unknown-elf/lib/rv64imafdc/lp64d/crt0.o: in function `.L0 ':
(.text+0x2e): undefined reference to `main'

Then at the crt.o file:

bl_iot_sdk/toolchain/riscv/Darwin/riscv64-unknown-elf/lib/rv64imafdc/lp64d$ nm -C ./crt0.o 
0000000000000008 t .L0 
0000000000000010 t .L0 
0000000000000024 t .L0 
0000000000000000 t .L11
                 U __global_pointer$
                 U __libc_fini_array
                 U __libc_init_array
                 U _edata
                 U _end
0000000000000000 T _start
                 U atexit
                 U exit
                 U main
                 U memset

Also in objdump those symbols seem to be undefined indeed.

$ objdump -t ./crt0.o 

./crt0.o:	file format ELF64-riscv

SYMBOL TABLE:
0000000000000000 l    d  .text	00000000 .text
0000000000000000 l    d  .data	00000000 .data
0000000000000000 l    d  .bss	00000000 .bss
0000000000000000         .text	00000000 .L11
0000000000000008         .text	00000000 .L0 
0000000000000010         .text	00000000 .L0 
0000000000000024         .text	00000000 .L0 
0000000000000000 l    d  .riscv.attributes	00000000 .riscv.attributes
0000000000000000 g     F .text	00000052 _start
0000000000000000         *UND*	00000000 __global_pointer$
0000000000000000         *UND*	00000000 _edata
0000000000000000         *UND*	00000000 _end
0000000000000000         *UND*	00000000 memset
0000000000000000         *UND*	00000000 __libc_fini_array
0000000000000000         *UND*	00000000 atexit
0000000000000000         *UND*	00000000 __libc_init_array
0000000000000000         *UND*	00000000 main
0000000000000000         *UND*	00000000 exit

When trying to run the same command in ubuntu-20 docker container, this does not fail.

Linker script (flash_build.py) not working if project folder is placed outside of SDK.

If an example app is placed outside of default SDK location then linker script fails. It looks like the absolute paths are being used in script and it fails to locate the "eflash_loader_cfg.ini" file. (The SDK and CHIP environment variables are set)

Log error is mentioned below.

CC build_out/yloop/src/device.o
CC build_out/yloop/src/local_event.o
AR build_out/yloop/libyloop.a
LD build_out/sdk_app_cli.elf
Generating BIN File to /home/username/workspace/sdk_app_cli/build_out/sdk_app_cli.bin
Requirement already satisfied: fdt>=0.2.0 in /home/username/.local/lib/python3.8/site-packages (from -r /home/username/apps/bl_iot_sdk/image_conf/requirements.txt (line 2)) (0.3.0)
Requirement already satisfied: pycryptodomex>=3.9.8 in /home/username/.local/lib/python3.8/site-packages (from -r /home/username/apps/bl_iot_sdk/image_conf/requirements.txt (line 3)) (3.10.1)
Requirement already satisfied: toml>=0.10.2 in /home/username/.local/lib/python3.8/site-packages (from -r /home/username/apps/bl_iot_sdk/image_conf/requirements.txt (line 4)) (0.10.2)
Requirement already satisfied: configobj>=5.0.6 in /home/username/.local/lib/python3.8/site-packages (from -r /home/username/apps/bl_iot_sdk/image_conf/requirements.txt (line 5)) (5.0.6)
Requirement already satisfied: six in /usr/lib/python3/dist-packages (from configobj>=5.0.6->-r /home/username/apps/bl_iot_sdk/image_conf/requirements.txt (line 5)) (1.14.0)
Traceback (most recent call last):
File "flash_build.py", line 1397, in
shutil.copy(eflash_loader_cfg_org, eflash_loader_cfg)
File "/usr/lib/python3.8/shutil.py", line 415, in copy
copyfile(src, dst, follow_symlinks=follow_symlinks)
File "/usr/lib/python3.8/shutil.py", line 261, in copyfile
with open(src, 'rb') as fsrc, open(dst, 'wb') as fdst:
FileNotFoundError: [Errno 2] No such file or directory: '/home/username/apps/bl_iot_sdk/customer_app/sdk_app_cli/build_out/eflash_loader_cfg.ini'
make: *** [/home/username/apps/bl_iot_sdk//make_scripts_riscv/project.mk:195: all] Error 1

Snippet "Flash_build.py": line number 1389

if name == 'main':
abs_path = os.path.abspath('..')
app_path = os.path.join(abs_path, "customer_app", sys.argv[1])
demo_name = sys.argv[1]
chip_name = sys.argv[2].lower()

Compiling issue in linux

Compiling on my ubuntu 20.04 fails.
It seems the components are compiled correctly, but the main is not compiled, nor found by the linker.
See the error below.

marco@Latitude-E6440:/media/marco/DATA/programming/riscv/bl_iot_sdk-master/customer_app/bl602_demo_wifi$ make use existing version.txt file LD build_out/bl602_demo_wifi.elf /media/marco/DATA/programming/riscv/bl_iot_sdk-master/toolchain/riscv/Linux/bin/../lib/gcc/riscv64-unknown-elf/8.3.0/../../../../riscv64-unknown-elf/bin/ld: /media/marco/DATA/programming/riscv/bl_iot_sdk-master/toolchain/riscv/Linux/bin/../lib/gcc/riscv64-unknown-elf/8.3.0/../../../../riscv64-unknown-elf/lib/rv64imafdc/lp64d/crt0.o: in function.L0 ':
(.text+0x2e): undefined reference to main' collect2: error: ld returned 1 exit status make: *** [/media/marco/DATA/programming/riscv/bl_iot_sdk-master/make_scripts_riscv/project.mk:420: /media/marco/DATA/programming/riscv/bl_iot_sdk-master/customer_app/bl602_demo_wifi/build_out/bl602_demo_wifi.elf] Errore 1

Compile errors in Windows

Hi, hope that this fork is still watched...
I installed all tools by following the steps in ./bl602-docs/Quickstart_Guide/Windows/Quickstart_Windows_msys.html
I entered the following commands:
export BL602_SDK_PATH=~/bl_iot_sdk
export CONFIG_CHIP_NAME=BL602
Next, I tried to compile customer_app/bl602_demo_event as described in chapter 3.3
cd ~/bl_iot_sdk/customer_app/bl602_demo_event
./genromap

and I got:
use existing version.mk file
CC build_out/aws-iot/aws-iot-device-sdk-embedded-C/external_libs/jsmn/jsmn.o
CC build_out/aws-iot/aws-iot-device-sdk-embedded-C/src/aws_iot_jobs_interface.o
CC build_out/aws-iot/aws-iot-device-sdk-embedded-C/src/aws_iot_jobs_json.o
CC build_out/aws-iot/aws-iot-device-sdk-embedded-C/src/aws_iot_jobs_topics.o
AS build_out/bl602/evb/src/boot/gcc/entry.o
AS build_out/bl602/evb/src/boot/gcc/start.o
CC build_out/aws-iot/aws-iot-device-sdk-embedded-C/src/aws_iot_jobs_types.o
CC build_out/bl602/evb/src/debug.o
CC build_out/aws-iot/aws-iot-device-sdk-embedded-C/src/aws_iot_json_utils.o
CC build_out/bl602/evb/src/strntoumax.o
CC build_out/bl602_demo_event/aws_iot_main.o
CC build_out/aws-iot/aws-iot-device-sdk-embedded-C/src/aws_iot_mqtt_client.o
CC build_out/bl602/bfl_main.o
CC build_out/bl602_demo_event/ble.o
CC build_out/bl602_demo_event/blsync_ble_app.o
CC build_out/bl602_demo_event/coex_debug.o
make[1]: *** [/home/Marcel/bl_iot_sdk/make_scripts_riscv/component_wrapper.mk:313: evb/src/boot/gcc/entry.o] Error 1
make[1]: *** Waiting for unfinished jobs....
CC build_out/bl602_os_adapter/bl602_os_adapter/bl602_os_hal.o
make[1]: *** [/home/Marcel/bl_iot_sdk/make_scripts_riscv/component_wrapper.mk:313: evb/src/boot/gcc/start.o] Error 1
make[1]: *** [/home/Marcel/bl_iot_sdk/make_scripts_riscv/component_wrapper.mk:313: aws-iot-device-sdk-embedded-C/src/aws_iot_jobs_interface.o] Error 1
make[1]: *** Waiting for unfinished jobs....
make[1]: *** [/home/Marcel/bl_iot_sdk/make_scripts_riscv/component_wrapper.mk:313: aws-iot-device-sdk-embedded-C/external_libs/jsmn/jsmn.o] Error 1
make[1]: *** [/home/Marcel/bl_iot_sdk/make_scripts_riscv/component_wrapper.mk:313: aws-iot-device-sdk-embedded-C/src/aws_iot_jobs_json.o] Error 1
make[1]: *** [/home/Marcel/bl_iot_sdk/make_scripts_riscv/component_wrapper.mk:312: aws_iot_main.o] Error 1
make[1]: *** Waiting for unfinished jobs....
make[1]: *** [/home/Marcel/bl_iot_sdk/make_scripts_riscv/component_wrapper.mk:313: evb/src/strntoumax.o] Error 1
make[1]: *** [/home/Marcel/bl_iot_sdk/make_scripts_riscv/component_wrapper.mk:313: aws-iot-device-sdk-embedded-C/src/aws_iot_jobs_topics.o] Error 1
make[1]: *** [/home/Marcel/bl_iot_sdk/make_scripts_riscv/component_wrapper.mk:313: evb/src/debug.o] Error 1
make[1]: *** [/home/Marcel/bl_iot_sdk/make_scripts_riscv/component_wrapper.mk:313: aws-iot-device-sdk-embedded-C/src/aws_iot_jobs_types.o] Error 1
make[1]: *** [/home/Marcel/bl_iot_sdk/make_scripts_riscv/component_wrapper.mk:313: aws-iot-device-sdk-embedded-C/src/aws_iot_json_utils.o] Error 1
CC build_out/bl602_std/bl602_std/StdDriver/Src/bl602_uart.o
make[1]: *** [/home/Marcel/bl_iot_sdk/make_scripts_riscv/component_wrapper.mk:313: bfl_main.o] Error 1
make[1]: *** [/home/Marcel/bl_iot_sdk/make_scripts_riscv/component_wrapper.mk:313: bl602_os_adapter/bl602_os_hal.o] Error 1
CC build_out/bl602_demo_event/main.o
make: *** [/home/Marcel/bl_iot_sdk/make_scripts_riscv/project.mk:562: component-bl602-build] Error 2
make: *** Waiting for unfinished jobs....
CC build_out/bl602_std/bl602_std/StdDriver/Src/bl602_adc.o
make: *** [/home/Marcel/bl_iot_sdk/make_scripts_riscv/project.mk:562: component-bl602_os_adapter-build] Error 2
make[1]: *** [/home/Marcel/bl_iot_sdk/make_scripts_riscv/component_wrapper.mk:313: aws-iot-device-sdk-embedded-C/src/aws_iot_mqtt_client.o] Error 1
CC build_out/bl602_std/bl602_std/StdDriver/Src/bl602_sec_eng.o
make: *** [/home/Marcel/bl_iot_sdk/make_scripts_riscv/project.mk:562: component-aws-iot-build] Error 2
CC build_out/bl602_std/bl602_std/StdDriver/Src/bl602_dma.o
CC build_out/blcrypto_suite/src/blcrypto_suite_bignum.o
make[1]: *** [/home/Marcel/bl_iot_sdk/make_scripts_riscv/component_wrapper.mk:313: ble.o] Error 1
CC build_out/blcrypto_suite/src/blcrypto_suite_ecp_curves.o
CC build_out/blcrypto_suite/src/blcrypto_suite_platform_util.o
CC build_out/blcrypto_suite/src/blcrypto_suite_ecp.o
make[1]: *** [/home/Marcel/bl_iot_sdk/make_scripts_riscv/component_wrapper.mk:313: coex_debug.o] Error 1
CC build_out/blcrypto_suite/src/blcrypto_suite_porting.o
CC build_out/bl602_std/bl602_std/StdDriver/Src/bl602_glb.o
CC build_out/bl602_std/bl602_std/StdDriver/Src/bl602_common.o
make[1]: *** [/home/Marcel/bl_iot_sdk/make_scripts_riscv/component_wrapper.mk:313: blsync_ble_app.o] Error 1
CC build_out/blcrypto_suite/src/blcrypto_suite_hacc.o
CC build_out/bl602_std/bl602_std/StdDriver/Src/bl602_hbn.o
make[1]: *** [/home/Marcel/bl_iot_sdk/make_scripts_riscv/component_wrapper.mk:313: bl602_std/StdDriver/Src/bl602_sec_eng.o] Error 1
make[1]: *** Waiting for unfinished jobs....
make[1]: *** [/home/Marcel/bl_iot_sdk/make_scripts_riscv/component_wrapper.mk:313: bl602_std/StdDriver/Src/bl602_adc.o] Error 1
CC build_out/bl602_std/bl602_std/StdDriver/Src/bl602_timer.o
CC build_out/bl602_std/bl602_std/StdDriver/Src/bl602_aon.o
make[1]: *** [/home/Marcel/bl_iot_sdk/make_scripts_riscv/component_wrapper.mk:313: bl602_std/StdDriver/Src/bl602_uart.o] Error 1
make[1]: *** [/home/Marcel/bl_iot_sdk/make_scripts_riscv/component_wrapper.mk:313: bl602_std/StdDriver/Src/bl602_dma.o] Error 1
make[1]: *** [/home/Marcel/bl_iot_sdk/make_scripts_riscv/component_wrapper.mk:313: src/blcrypto_suite_bignum.o] Error 1
make[1]: *** Waiting for unfinished jobs....
make[1]: *** [/home/Marcel/bl_iot_sdk/make_scripts_riscv/component_wrapper.mk:313: main.o] Error 1
make: *** [/home/Marcel/bl_iot_sdk/make_scripts_riscv/project.mk:562: component-bl602_demo_event-build] Error 2
make[1]: *** [/home/Marcel/bl_iot_sdk/make_scripts_riscv/component_wrapper.mk:313: src/blcrypto_suite_ecp.o] Error 1
make[1]: *** [/home/Marcel/bl_iot_sdk/make_scripts_riscv/component_wrapper.mk:313: bl602_std/StdDriver/Src/bl602_glb.o] Error 1
make[1]: *** [/home/Marcel/bl_iot_sdk/make_scripts_riscv/component_wrapper.mk:313: bl602_std/StdDriver/Src/bl602_common.o] Error 1
make[1]: *** [/home/Marcel/bl_iot_sdk/make_scripts_riscv/component_wrapper.mk:313: src/blcrypto_suite_ecp_curves.o] Error 1
make[1]: *** [/home/Marcel/bl_iot_sdk/make_scripts_riscv/component_wrapper.mk:313: src/blcrypto_suite_platform_util.o] Error 1
make[1]: *** [/home/Marcel/bl_iot_sdk/make_scripts_riscv/component_wrapper.mk:313: src/blcrypto_suite_hacc.o] Error 1
make[1]: *** [/home/Marcel/bl_iot_sdk/make_scripts_riscv/component_wrapper.mk:313: src/blcrypto_suite_porting.o] Error 1
make[1]: *** [/home/Marcel/bl_iot_sdk/make_scripts_riscv/component_wrapper.mk:313: bl602_std/StdDriver/Src/bl602_hbn.o] Error 1
make: *** [/home/Marcel/bl_iot_sdk/make_scripts_riscv/project.mk:562: component-blcrypto_suite-build] Error 2
make[1]: *** [/home/Marcel/bl_iot_sdk/make_scripts_riscv/component_wrapper.mk:313: bl602_std/StdDriver/Src/bl602_timer.o] Error 1
make[1]: *** [/home/Marcel/bl_iot_sdk/make_scripts_riscv/component_wrapper.mk:313: bl602_std/StdDriver/Src/bl602_aon.o] Error 1
make: *** [/home/Marcel/bl_iot_sdk/make_scripts_riscv/project.mk:562: component-bl602_std-build] Error 2

I guess, something is missing. Can someone help and give a hint?
Best Regards Marcel

Sleep modes samples

Has anyone played with the sleep modes (Idle Power Saving Mode and Sleep Mode)?

I just received a board and I am looking to measure current (using a uCurrent) in the various modes.

[Compile error for my]

image

i already set sdk path:

export BL60X_SDK_PATH=/home/Administrator/bl_iot_sdk-master

export CONFIG_CHIP_NAME=BL602

BL60X_SDK_PATH is my work path

but compile show "/home/rjwang/work/bl_iot_sdk.release/components"

i had check mk file,but can't find any problem.

please help my deal with this problem,thx.

best wish

Workflow

I try to understand the workflow. Eventually a high level overview should be added to README.rst.

Development:

Development is done an intel PC. Communication with the evaluation board is done over an USB-A to Micro-B cable connection.

There is no operating system - what runs is a binary blob like the ones generated in customer_app/. Make yourself familiar with how they are built.

Flashing over the USB connection is done with bl_iot_sdk/tools/flash_tool/BLFlashEnv.

FIXME: I grasp from the documention that we flash with bl_iot_sdk/tools/flash_tool/BLFlashEnv, but I don't have that program. Do you?

Execution on the just flashed program:

Restart the board and connect a serial port terminal over the same USB connection.

FIXME: is that correct? At least the gtkterm screenshot shows /dev/ttyUSB0.

Can we turn off PR commit squashing for this group of repositories?

I know this is a touchy topic, but I think it's a mistake to squash together the commits that make up a PR when merging that PR. Personally, I always split my changes up into logical commits, each with a relevant message. It's frustrating to see that work lost when a PR gets merged as one squashed commit and shows up to everyone else as just one big mess of changes in a single commit.

Furthermore, I'll often include small fixup commits (typo or formatting fixes), which aren't worth the overhead of their own PR, inside a larger, unrelated PR (see pine64/bl602-docs#5, for example). If the PR gets squashed, this is no longer a valid workflow since you end up with totally unrelated changes within the same commit.

Finally, squashing on merge breaks git branch -d locally, since Git doesn't realize that the squashed commit in the main branch corresponds to the commits in my local feature branch. Obviously, I can pass -D to force the deletion, but I quite like having the extra safety check that Git provides with -d.

Flashing chip issues on linux (Missing tool?)

It says on the wiki that I should be using "BLFlashEnv", which should be found under /bl_iot_sdk/tools/flash_tool for flashing binaries. This doesn't exist in the repo so I'm a bit confused. I tried using openocd with an ftdi cable but that refused connection. How are people flashing the chip?

More information please?

  1. Which files need reverse engineering?

  2. Does the license on the blob permit reverse engineering and could any derived work be open sourced?

  3. What information may be promoted to the README to aid everyone interested?

3a. What are all the components of this repository? How do they fit together? Build instructions? Links to external documentation for these devices or for general protocols in use?

IIUC the SDK includes example applications in customer_app and common libraries in components. Using drivers which interact with the problematic binary blob and/or the hardware directly.

  1. Is there any reason the toolchain is old? GCC version 8.3 vs. >=10.1.

  2. Is C the only acceptable language or may we write our code in Rust or any other systems suitable language?

  3. What is the exact ISA target? I.e. rv32gc? rv32im[a]fc? Where are the custom extensions documented? I.e. the crypto coprocessor.

Flash_build: Linux binary checked in

There appears to be a Linux binary that's checked in and used during the build. This makes Macs unhappy. Should there be an OS-specific flash_build that is $PATHed or should it be using flash_build.by or something?

roberts-iMac7 customer_app % file ../../bl_iot_sdk/image_conf/flash_build
../../bl_iot_sdk/image_conf/flash_build: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=4485007e1df54173663f148d5840c963a7e868ee, stripped

NetBSD Host

I don't think we should spend time integrating NetBSD into the supported platforms. I just want to report that it works with these caveats:

a) use gmake instead of make (gnu make instead of bsd make)

b) make the build environment believe we are on Linux

cd bl_iot_sdk/toolchain/riscv
   ln -s Linux NetBSD

c) Use/install Linux emulation provided by package emulators/suse131_base (there does not seem to be an official crosscompiler from NetBSD/XXX to Linux/riscv)

For reasons unknown, I need to help the toolchain to find its libraries

$ LD_LIBRARY_PATH=/emul/linux/lib64/ /opt/src/bl_iot_sdk/toolchain/riscv/NetBSD/bin/riscv64-unknown-elf-gcc -v
Using built-in specs.
COLLECT_GCC=/opt/src/bl_iot_sdk/toolchain/riscv/NetBSD/bin/riscv64-unknown-elf-gcc
COLLECT_LTO_WRAPPER=/opt/src/bl_iot_sdk/toolchain/riscv/Linux/bin/../libexec/gcc/riscv64-unknown-elf/8.3.0/lto-wrapper
Target: riscv64-unknown-elf
Configured with: /var/lib/builds/sifive-tools/freedom-tools-master/obj/x86_64-linux-centos6/build/riscv-gnu-toolchain/riscv-gcc/configure --target=riscv64-unknown-elf --prefix=/var/lib/builds/sifive-tools/freedom-tools-master/obj/x86_64-linux-centos6/install/riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-centos6 --with-pkgversion='SiFive GCC 8.3.0-2019.08.0' --with-bugurl=https://github.com/sifive/freedom-tools/issues --disable-shared --disable-threads --enable-languages=c,c++ --enable-tls --with-newlib --with-sysroot=/var/lib/builds/sifive-tools/freedom-tools-master/obj/x86_64-linux-centos6/install/riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-centos6/riscv64-unknown-elf --with-native-system-header-dir=/include --disable-libmudflap --disable-libssp --disable-libquadmath --disable-libgomp --disable-nls --disable-tm-clone-registry --src=../riscv-gcc --with-system-zlib --enable-checking=yes --enable-multilib --with-abi=lp64d --with-arch=rv64imafdc CFLAGS=-O2 CXXFLAGS=-O2 'CFLAGS_FOR_TARGET=-Os  -mcmodel=medany' 'CXXFLAGS_FOR_TARGET=-Os  -mcmodel=medany'
Thread model: single
gcc version 8.3.0 (SiFive GCC 8.3.0-2019.08.0) 

d) project.mk, for god's sake, these two python commands don't find the files requirements.txt and flash_build.py in the cd'ed directory. As a work-around, I call them manually from the commnd-line.

@cd $(BL60X_SDK_PATH)/image_conf;python3 -m pip install -r requirements.txt; python3 flash_build.py $(PROJECT_NAME) $(CONFIG_CHIP_NAME)

In the end, you call

/opt/src/bl_iot_sdk/customer_app/bl602_demo_event$ LD_LIBRARY_PATH=/emul/linux/lib64/ gmake CONFIG_CHIP_NAME=BL602 CONFIG_LINK_ROM=1 CONFIG_BLE_TP_SERVER=1

****** Please SET BL60X_SDK_PATH ******
****** Trying SDK PATH [/opt/src/bl_iot_sdk/customer_app/bl602_demo_event/../..]
use existing version.txt file
****** Please SET BL60X_SDK_PATH ******
****** Trying SDK PATH [/opt/src/bl_iot_sdk/customer_app/bl602_demo_event/../..]
use existing version.txt file
CC build_out/aws-iot/aws-iot-device-sdk-embedded-C/external_libs/jsmn/jsmn.o
CC build_out/aws-iot/aws-iot-device-sdk-embedded-C/src/aws_iot_jobs_interface.o
CC build_out/aws-iot/aws-iot-device-sdk-embedded-C/src/aws_iot_jobs_json.o
CC build_out/aws-iot/aws-iot-device-sdk-embedded-C/src/aws_iot_jobs_topics.o
CC build_out/aws-iot/aws-iot-device-sdk-embedded-C/src/aws_iot_jobs_types.o
CC build_out/aws-iot/aws-iot-device-sdk-embedded-C/src/aws_iot_json_utils.o
CC build_out/aws-iot/aws-iot-device-sdk-embedded-C/src/aws_iot_mqtt_client.o
CC build_out/aws-iot/aws-iot-device-sdk-embedded-C/src/aws_iot_mqtt_client_common_internal.o
CC build_out/aws-iot/aws-iot-device-sdk-embedded-C/src/aws_iot_mqtt_client_connect.o
CC build_out/aws-iot/aws-iot-device-sdk-embedded-C/src/aws_iot_mqtt_client_publish.o
CC build_out/aws-iot/aws-iot-device-sdk-embedded-C/src/aws_iot_mqtt_client_subscribe.o
CC build_out/aws-iot/aws-iot-device-sdk-embedded-C/src/aws_iot_mqtt_client_unsubscribe.o
CC build_out/aws-iot/aws-iot-device-sdk-embedded-C/src/aws_iot_mqtt_client_yield.o
CC build_out/aws-iot/aws-iot-device-sdk-embedded-C/src/aws_iot_shadow.o
CC build_out/aws-iot/aws-iot-device-sdk-embedded-C/src/aws_iot_shadow_actions.o
CC build_out/aws-iot/aws-iot-device-sdk-embedded-C/src/aws_iot_shadow_json.o
CC build_out/aws-iot/aws-iot-device-sdk-embedded-C/src/aws_iot_shadow_records.o
CC build_out/aws-iot/port/network_mbedtls_wrapper.o
CC build_out/aws-iot/port/threads_freertos.o
CC build_out/aws-iot/port/timer.o
AR build_out/aws-iot/libaws-iot.a
AS build_out/bl602/evb/src/boot/gcc/entry.o
AS build_out/bl602/evb/src/boot/gcc/start.o
CC build_out/bl602/evb/src/debug.o
CC build_out/bl602/evb/src/sscanf.o
CC build_out/bl602/evb/src/vsscanf.o
CC build_out/bl602/evb/src/strntoumax.o
AR build_out/bl602/libbl602.a
CC build_out/bl602_demo_event/aws_iot_main.o
CC build_out/bl602_demo_event/ble.o
CC build_out/bl602_demo_event/coex_debug.o
CC build_out/bl602_demo_event/main.o
CC build_out/bl602_demo_event/wifi_prov_api.o
AR build_out/bl602_demo_event/libbl602_demo_event.a
CC build_out/bl602_std/bl602_std/StdDriver/Src/bl602_uart.o
CC build_out/bl602_std/bl602_std/StdDriver/Src/bl602_adc.o
CC build_out/bl602_std/bl602_std/StdDriver/Src/bl602_sec_eng.o
CC build_out/bl602_std/bl602_std/StdDriver/Src/bl602_dma.o
CC build_out/bl602_std/bl602_std/StdDriver/Src/bl602_common.o
CC build_out/bl602_std/bl602_std/StdDriver/Src/bl602_glb.o
CC build_out/bl602_std/bl602_std/StdDriver/Src/bl602_hbn.o
CC build_out/bl602_std/bl602_std/StdDriver/Src/bl602_timer.o
CC build_out/bl602_std/bl602_std/StdDriver/Src/bl602_aon.o
CC build_out/bl602_std/bl602_std/StdDriver/Src/bl602_pds.o
CC build_out/bl602_std/bl602_std/StdDriver/Src/bl602_pwm.o
CC build_out/bl602_std/bl602_std/StdDriver/Src/bl602_l1c.o
CC build_out/bl602_std/bl602_std/StdDriver/Src/bl602_ef_ctrl.o
CC build_out/bl602_std/bl602_std/StdDriver/Src/bl602_mfg_efuse.o
CC build_out/bl602_std/bl602_std/StdDriver/Src/bl602_mfg_flash.o
CC build_out/bl602_std/bl602_std/StdDriver/Src/bl602_mfg_media.o
CC build_out/bl602_std/bl602_std/StdDriver/Src/bl602_dac.o
CC build_out/bl602_std/bl602_std/StdDriver/Src/bl602_ir.o
CC build_out/bl602_std/bl602_std/StdDriver/Src/bl602_spi.o
CC build_out/bl602_std/bl602_std/StdDriver/Src/bl602_i2c.o
CC build_out/bl602_std/bl602_std/Common/soft_crc/softcrc.o
CC build_out/bl602_std/bl602_std/Common/xz/xz_crc32.o
CC build_out/bl602_std/bl602_std/Common/xz/xz_dec_lzma2.o
CC build_out/bl602_std/bl602_std/Common/xz/xz_dec_stream.o
CC build_out/bl602_std/bl602_std/Common/xz/xz_decompress.o
CC build_out/bl602_std/bl602_std/Common/xz/xz_port.o
CC build_out/bl602_std/bl602_std/Common/cipher_suite/src/bflb_crypt.o
CC build_out/bl602_std/bl602_std/Common/cipher_suite/src/bflb_hash.o
CC build_out/bl602_std/bl602_std/Common/cipher_suite/src/bflb_dsa.o
CC build_out/bl602_std/bl602_std/Common/cipher_suite/src/bflb_ecdsa.o
CC build_out/bl602_std/bl602_std/Common/platform_print/platform_device.o
CC build_out/bl602_std/bl602_std/Common/platform_print/platform_gpio.o
CC build_out/bl602_std/bl602_std/Common/ring_buffer/ring_buffer.o
CC build_out/bl602_std/bl602_std/RISCV/Device/Bouffalo/BL602/Startup/interrupt.o
CC build_out/bl602_std/bl602_std/StdDriver/Src/bl602_romapi.o
CC build_out/bl602_std/bl602_std/StdDriver/Src/bl602_sflash_ext.o
CC build_out/bl602_std/bl602_std/StdDriver/Src/bl602_sf_cfg_ext.o
AR build_out/bl602_std/libbl602_std.a
CC build_out/bl602_wifidrv/bl60x_wifi_driver/ipc_host.o
CC build_out/bl602_wifidrv/bl60x_wifi_driver/os_hal.o
CC build_out/bl602_wifidrv/bl60x_wifi_driver/bl_apis.o
CC build_out/bl602_wifidrv/bl60x_wifi_driver/bl_cmds.o
CC build_out/bl602_wifidrv/bl60x_wifi_driver/bl_irqs.o
CC build_out/bl602_wifidrv/bl60x_wifi_driver/bl_main.o
CC build_out/bl602_wifidrv/bl60x_wifi_driver/bl_mod_params.o
CC build_out/bl602_wifidrv/bl60x_wifi_driver/bl_msg_rx.o
CC build_out/bl602_wifidrv/bl60x_wifi_driver/bl_msg_tx.o
CC build_out/bl602_wifidrv/bl60x_wifi_driver/bl_platform.o
CC build_out/bl602_wifidrv/bl60x_wifi_driver/bl_rx.o
CC build_out/bl602_wifidrv/bl60x_wifi_driver/bl_strs.o
CC build_out/bl602_wifidrv/bl60x_wifi_driver/bl_tx.o
CC build_out/bl602_wifidrv/bl60x_wifi_driver/bl_utils.o
CC build_out/bl602_wifidrv/bl60x_wifi_driver/stateMachine.o
CC build_out/bl602_wifidrv/bl60x_wifi_driver/wifi.o
CC build_out/bl602_wifidrv/bl60x_wifi_driver/wifi_mgmr.o
CC build_out/bl602_wifidrv/bl60x_wifi_driver/wifi_mgmr_api.o
CC build_out/bl602_wifidrv/bl60x_wifi_driver/wifi_mgmr_cli.o
CC build_out/bl602_wifidrv/bl60x_wifi_driver/wifi_mgmr_ext.o
CC build_out/bl602_wifidrv/bl60x_wifi_driver/wifi_mgmr_profile.o
CC build_out/bl602_wifidrv/bl60x_wifi_driver/wifi_netif.o
CC build_out/bl602_wifidrv/bl60x_wifi_driver/wifi_mgmr_event.o
AR build_out/bl602_wifidrv/libbl602_wifidrv.a
CC build_out/blestack/src/port/bl_port.o
CC build_out/blestack/src/common/atomic_c.o
CC build_out/blestack/src/common/buf.o
CC build_out/blestack/src/common/log.o
CC build_out/blestack/src/common/poll.o
CC build_out/blestack/src/common/rpa.o
CC build_out/blestack/src/common/work_q.o
CC build_out/blestack/src/common/utils.o
CC build_out/blestack/src/common/dec.o
CC build_out/blestack/src/common/dummy.o
CC build_out/blestack/src/common/tinycrypt/source/aes_decrypt.o
CC build_out/blestack/src/common/tinycrypt/source/aes_encrypt.o
CC build_out/blestack/src/common/tinycrypt/source/cbc_mode.o
CC build_out/blestack/src/common/tinycrypt/source/ccm_mode.o
CC build_out/blestack/src/common/tinycrypt/source/cmac_mode.o
CC build_out/blestack/src/common/tinycrypt/source/ctr_mode.o
CC build_out/blestack/src/common/tinycrypt/source/ctr_prng.o
CC build_out/blestack/src/common/tinycrypt/source/ecc.o
CC build_out/blestack/src/common/tinycrypt/source/ecc_dh.o
CC build_out/blestack/src/common/tinycrypt/source/ecc_dsa.o
CC build_out/blestack/src/common/tinycrypt/source/ecc_platform_specific.o
CC build_out/blestack/src/common/tinycrypt/source/hmac.o
CC build_out/blestack/src/common/tinycrypt/source/hmac_prng.o
CC build_out/blestack/src/common/tinycrypt/source/sha256.o
CC build_out/blestack/src/common/tinycrypt/source/utils.o
CC build_out/blestack/src/bl_hci_wrapper/bl_hci_wrapper.o
CC build_out/blestack/src/hci_onchip/hci_driver.o
CC build_out/blestack/src/host/att.o
CC build_out/blestack/src/host/conn.o
CC build_out/blestack/src/host/crypto.o
CC build_out/blestack/src/host/gatt.o
CC build_out/blestack/src/host/hci_core.o
CC build_out/blestack/src/host/hci_ecc.o
CC build_out/blestack/src/host/l2cap.o
CC build_out/blestack/src/host/uuid.o
CC build_out/blestack/src/host/smp.o
CC build_out/blestack/src/host/keys.o
CC build_out/blestack/src/host/settings.o
CC build_out/blestack/src/cli_cmds/ble_cli_cmds.o
CC build_out/blestack/src/cli_cmds/pts_cli_cmds.o
CC build_out/blestack/src/services/ble_tp_svc.o
AR build_out/blestack/libblestack.a
CC build_out/blfdt/src/fdt.o
CC build_out/blfdt/src/fdt_ro.o
CC build_out/blfdt/src/fdt_wip.o
CC build_out/blfdt/src/fdt_sw.o
CC build_out/blfdt/src/fdt_rw.o
CC build_out/blfdt/src/fdt_strerror.o
CC build_out/blfdt/src/fdt_empty_tree.o
CC build_out/blfdt/src/fdt_addresses.o
CC build_out/blfdt/src/fdt_overlay.o
CC build_out/blfdt/test/tc_blfdt_dump.o
CC build_out/blfdt/test/tc_blfdt_wifi.o
CC build_out/blfdt/test/blfdt_cli_test.o
AR build_out/blfdt/libblfdt.a
CC build_out/blmtd/bl_mtd.o
AR build_out/blmtd/libblmtd.a
CC build_out/blog/blog.o
AR build_out/blog/libblog.a
CC build_out/blog_testc/blog_testc.o
CC build_out/blog_testc/blog_testc1_diable.o
CC build_out/blog_testc/blog_testc2_full.o
CC build_out/blog_testc/blog_testc3_nopri.o
CC build_out/blog_testc/blog_testc4_onlypri.o
AR build_out/blog_testc/libblog_testc.a
CC build_out/bloop/src/bloop_base.o
CC build_out/bloop/src/bloop_handler_sys.o
AR build_out/bloop/libbloop.a
CC build_out/blota/bl_sys_ota.o
CC build_out/blota/bl_sys_ota_cli.o
AR build_out/blota/libblota.a
CC build_out/bltime/bl_sys_time.o
CC build_out/bltime/bl_sys_time_cli.o
AR build_out/bltime/libbltime.a
CC build_out/cjson/cJSON.o
AR build_out/cjson/libcjson.a
CC build_out/cli/cli/cli.o
AR build_out/cli/libcli.a
CC build_out/dns_server/src/dns_server.o
CC build_out/dns_server/src/web_server.o
AR build_out/dns_server/libdns_server.a
CC build_out/easyflash4/src/easyflash.o
CC build_out/easyflash4/src/ef_env.o
CC build_out/easyflash4/src/ef_env_legacy_wl.o
CC build_out/easyflash4/src/ef_env_legacy.o
CC build_out/easyflash4/src/ef_port.o
CC build_out/easyflash4/src/ef_utils.o
CC build_out/easyflash4/src/easyflash_cli.o
AR build_out/easyflash4/libeasyflash4.a
CC build_out/freertos_riscv_ram/event_groups.o
CC build_out/freertos_riscv_ram/list.o
CC build_out/freertos_riscv_ram/queue.o
CC build_out/freertos_riscv_ram/stream_buffer.o
CC build_out/freertos_riscv_ram/tasks.o
CC build_out/freertos_riscv_ram/timers.o
CC build_out/freertos_riscv_ram/misaligned/misaligned_ldst.o
AS build_out/freertos_riscv_ram/misaligned/fp_asm.o
CC build_out/freertos_riscv_ram/panic/panic_c.o
CC build_out/freertos_riscv_ram/portable/GCC/RISC-V/port.o
AS build_out/freertos_riscv_ram/portable/GCC/RISC-V/portASM.o
CC build_out/freertos_riscv_ram/portable/MemMang/heap_5.o
AR build_out/freertos_riscv_ram/libfreertos_riscv_ram.a
CC build_out/hal_drv/bl602_hal/bl_uart.o
CC build_out/hal_drv/bl602_hal/bl_chip.o
CC build_out/hal_drv/bl602_hal/bl_cks.o
CC build_out/hal_drv/bl602_hal/bl_sys.o
CC build_out/hal_drv/bl602_hal/bl_sys_cli.o
CC build_out/hal_drv/bl602_hal/bl_dma.o
CC build_out/hal_drv/bl602_hal/bl_irq.o
CC build_out/hal_drv/bl602_hal/bl_sec.o
CC build_out/hal_drv/bl602_hal/bl_boot2.o
CC build_out/hal_drv/bl602_hal/bl_timer.o
CC build_out/hal_drv/bl602_hal/bl_gpio.o
CC build_out/hal_drv/bl602_hal/bl_gpio_cli.o
CC build_out/hal_drv/bl602_hal/bl_hbn.o
CC build_out/hal_drv/bl602_hal/bl_efuse.o
CC build_out/hal_drv/bl602_hal/bl_flash.o
CC build_out/hal_drv/bl602_hal/bl_pwm.o
CC build_out/hal_drv/bl602_hal/bl_sec_aes.o
CC build_out/hal_drv/bl602_hal/bl_sec_sha.o
CC build_out/hal_drv/bl602_hal/bl_wifi.o
CC build_out/hal_drv/bl602_hal/bl_wdt.o
CC build_out/hal_drv/bl602_hal/bl_wdt_cli.o
CC build_out/hal_drv/bl602_hal/hal_uart.o
CC build_out/hal_drv/bl602_hal/hal_gpio.o
CC build_out/hal_drv/bl602_hal/hal_hbn.o
CC build_out/hal_drv/bl602_hal/hal_pwm.o
CC build_out/hal_drv/bl602_hal/hal_boot2.o
CC build_out/hal_drv/bl602_hal/hal_sys.o
CC build_out/hal_drv/bl602_hal/hal_board.o
CC build_out/hal_drv/bl602_hal/bl_adc.o
CC build_out/hal_drv/bl602_hal/hal_ir.o
CC build_out/hal_drv/bl602_hal/bl_ir.o
CC build_out/hal_drv/bl602_hal/bl_dac_audio.o
CC build_out/hal_drv/bl602_hal/bl_i2c.o
CC build_out/hal_drv/bl602_hal/hal_i2c.o
CC build_out/hal_drv/bl602_hal/hal_button.o
CC build_out/hal_drv/bl602_hal/hal_hbnram.o
CC build_out/hal_drv/bl602_hal/bl_pds.o
CC build_out/hal_drv/bl602_hal/hal_pds.o
CC build_out/hal_drv/bl602_hal/bl_rtc.o
CC build_out/hal_drv/bl602_hal/hal_hwtimer.o
CC build_out/hal_drv/bl602_hal/hal_spi.o
CC build_out/hal_drv/bl602_hal/hal_adc.o
CC build_out/hal_drv/bl602_hal/hal_wifi.o
AR build_out/hal_drv/libhal_drv.a
CC build_out/httpc/http_client.o
AR build_out/httpc/libhttpc.a
CC build_out/looprt/src/looprt.o
CC build_out/looprt/src/looprt_test_cli.o
AR build_out/looprt/liblooprt.a
CC build_out/loopset/src/loopset_led.o
CC build_out/loopset/src/loopset_led_cli.o
CC build_out/loopset/src/loopset_ir.o
CC build_out/loopset/src/loopset_pwm.o
CC build_out/loopset/src/loopset_i2c.o
AR build_out/loopset/libloopset.a
CC build_out/lwip/lwip-port/FreeRTOS/ethernetif.o
CC build_out/lwip/lwip-port/FreeRTOS/sys_arch.o
CC build_out/lwip/src/api/api_lib.o
CC build_out/lwip/src/api/api_msg.o
CC build_out/lwip/src/api/err.o
CC build_out/lwip/src/api/if_api.o
CC build_out/lwip/src/api/netbuf.o
CC build_out/lwip/src/api/netdb.o
CC build_out/lwip/src/api/netifapi.o
CC build_out/lwip/src/api/sockets.o
CC build_out/lwip/src/api/tcpip.o
CC build_out/lwip/src/apps/altcp_tls/altcp_tls_mbedtls.o
CC build_out/lwip/src/apps/altcp_tls/altcp_tls_mbedtls_mem.o
CC build_out/lwip/src/core/altcp.o
CC build_out/lwip/src/core/altcp_alloc.o
CC build_out/lwip/src/core/altcp_tcp.o
CC build_out/lwip/src/core/def.o
CC build_out/lwip/src/core/dns.o
CC build_out/lwip/src/core/inet_chksum.o
CC build_out/lwip/src/core/init.o
CC build_out/lwip/src/core/ip.o
CC build_out/lwip/src/core/ipv4/autoip.o
CC build_out/lwip/src/core/ipv4/dhcp.o
CC build_out/lwip/src/core/ipv4/etharp.o
CC build_out/lwip/src/core/ipv4/icmp.o
CC build_out/lwip/src/core/ipv4/igmp.o
CC build_out/lwip/src/core/ipv4/ip4.o
CC build_out/lwip/src/core/ipv4/ip4_addr.o
CC build_out/lwip/src/core/ipv4/ip4_frag.o
CC build_out/lwip/src/core/mem.o
CC build_out/lwip/src/core/memp.o
CC build_out/lwip/src/core/netif.o
CC build_out/lwip/src/core/pbuf.o
CC build_out/lwip/src/core/raw.o
CC build_out/lwip/src/core/stats.o
CC build_out/lwip/src/core/sys.o
CC build_out/lwip/src/core/tcp.o
CC build_out/lwip/src/core/tcp_in.o
CC build_out/lwip/src/core/tcp_out.o
CC build_out/lwip/src/core/timeouts.o
CC build_out/lwip/src/core/udp.o
CC build_out/lwip/src/netif/bridgeif.o
CC build_out/lwip/src/netif/bridgeif_fdb.o
CC build_out/lwip/src/netif/ethernet.o
CC build_out/lwip/src/netif/lowpan6.o
CC build_out/lwip/src/netif/lowpan6_ble.o
CC build_out/lwip/src/netif/lowpan6_common.o
CC build_out/lwip/src/netif/slipif.o
CC build_out/lwip/src/netif/zepif.o
AR build_out/lwip/liblwip.a
CC build_out/lwip_altcp_tls_mbedtls/src/altcp_tls_mbedtls.o
CC build_out/lwip_altcp_tls_mbedtls/src/altcp_tls_mbedtls_mem.o
AR build_out/lwip_altcp_tls_mbedtls/liblwip_altcp_tls_mbedtls.a
CC build_out/lwip_dhcpd/dhcp_server_raw.o
AR build_out/lwip_dhcpd/liblwip_dhcpd.a
CC build_out/mbedtls/src/aes.o
CC build_out/mbedtls/src/aesni.o
CC build_out/mbedtls/src/arc4.o
CC build_out/mbedtls/src/asn1write.o
CC build_out/mbedtls/src/asn1parse.o
CC build_out/mbedtls/src/base64.o
CC build_out/mbedtls/src/bignum.o
CC build_out/mbedtls/src/blowfish.o
CC build_out/mbedtls/src/camellia.o
CC build_out/mbedtls/src/ccm.o
CC build_out/mbedtls/src/cipher.o
CC build_out/mbedtls/src/cipher_wrap.o
CC build_out/mbedtls/src/cmac.o
CC build_out/mbedtls/src/ctr_drbg.o
CC build_out/mbedtls/src/debug.o
CC build_out/mbedtls/src/des.o
CC build_out/mbedtls/src/dhm.o
CC build_out/mbedtls/src/ecdh.o
CC build_out/mbedtls/src/ecdsa.o
CC build_out/mbedtls/src/ecjpake.o
CC build_out/mbedtls/src/ecp.o
CC build_out/mbedtls/src/ecp_curves.o
CC build_out/mbedtls/src/entropy.o
CC build_out/mbedtls/src/entropy_poll.o
CC build_out/mbedtls/src/error.o
CC build_out/mbedtls/src/gcm.o
CC build_out/mbedtls/src/havege.o
CC build_out/mbedtls/src/hmac_drbg.o
CC build_out/mbedtls/src/md2.o
CC build_out/mbedtls/src/md4.o
CC build_out/mbedtls/src/md.o
CC build_out/mbedtls/src/md_wrap.o
CC build_out/mbedtls/src/memory_buffer_alloc.o
CC build_out/mbedtls/src/net_sockets.o
CC build_out/mbedtls/src/oid.o
CC build_out/mbedtls/src/padlock.o
CC build_out/mbedtls/src/pem.o
CC build_out/mbedtls/src/pk.o
CC build_out/mbedtls/src/pkcs11.o
CC build_out/mbedtls/src/pkcs12.o
CC build_out/mbedtls/src/pkcs5.o
CC build_out/mbedtls/src/pkparse.o
CC build_out/mbedtls/src/pk_wrap.o
CC build_out/mbedtls/src/pkwrite.o
CC build_out/mbedtls/src/platform.o
CC build_out/mbedtls/src/ripemd160.o
CC build_out/mbedtls/src/rsa.o
CC build_out/mbedtls/src/md5.o
CC build_out/mbedtls/src/sha1.o
CC build_out/mbedtls/src/sha256.o
CC build_out/mbedtls/src/sha512.o
CC build_out/mbedtls/src/ssl_cache.o
CC build_out/mbedtls/src/ssl_ciphersuites.o
CC build_out/mbedtls/src/ssl_cli.o
CC build_out/mbedtls/src/ssl_cookie.o
CC build_out/mbedtls/src/ssl_srv.o
CC build_out/mbedtls/src/ssl_ticket.o
CC build_out/mbedtls/src/ssl_tls.o
CC build_out/mbedtls/src/timing.o
CC build_out/mbedtls/src/threading.o
CC build_out/mbedtls/src/version.o
CC build_out/mbedtls/src/version_features.o
CC build_out/mbedtls/src/x509.o
CC build_out/mbedtls/src/x509_create.o
CC build_out/mbedtls/src/x509_crl.o
CC build_out/mbedtls/src/x509_crt.o
CC build_out/mbedtls/src/x509_csr.o
CC build_out/mbedtls/src/x509write_crt.o
CC build_out/mbedtls/src/x509write_csr.o
CC build_out/mbedtls/src/xtea.o
CC build_out/mbedtls/src/mbedtls_alt.o
CC build_out/mbedtls/src/mbedtls_net.o
CC build_out/mbedtls/src/mbedtls_ssl.o
CC build_out/mbedtls/src/mycalloc.o
AR build_out/mbedtls/libmbedtls.a
CC build_out/netutils/tcpclient/tcpclient.o
CC build_out/netutils/tcpserver/tcpserver.o
CC build_out/netutils/iperf/iperf.o
CC build_out/netutils/netstat/netstat.o
CC build_out/netutils/ping/ping.o
AR build_out/netutils/libnetutils.a
CC build_out/romfs/src/bl_romfs.o
AR build_out/romfs/libromfs.a
CC build_out/sntp/sntp.o
CC build_out/sntp/sntp_cli.o
AR build_out/sntp/libsntp.a
CC build_out/utils/src/utils_hex.o
CC build_out/utils/src/utils_crc.o
CC build_out/utils/src/utils_sha256.o
CC build_out/utils/src/utils_fec.o
CC build_out/utils/src/utils_log.o
CC build_out/utils/src/utils_dns.o
CC build_out/utils/src/utils_list.o
CC build_out/utils/src/utils_rbtree.o
CC build_out/utils/src/utils_hexdump.o
CC build_out/utils/src/utils_time.o
CC build_out/utils/src/utils_notifier.o
CC build_out/utils/src/utils_getopt.o
CC build_out/utils/src/utils_string.o
CC build_out/utils/src/utils_hmac_sha1_fast.o
CC build_out/utils/src/utils_psk_fast.o
CC build_out/utils/src/utils_memp.o
CC build_out/utils/src/utils_tlv_bl.o
AR build_out/utils/libutils.a
CC build_out/vfs/src/vfs.o
CC build_out/vfs/src/vfs_file.o
CC build_out/vfs/src/vfs_inode.o
CC build_out/vfs/src/vfs_register.o
CC build_out/vfs/device/vfs_uart.o
CC build_out/vfs/device/vfs_adc.o
CC build_out/vfs/device/vfs_spi.o
CC build_out/vfs/device/vfs_gpio.o
CC build_out/vfs/device/vfs_pwm.o
AR build_out/vfs/libvfs.a
CC build_out/yloop/src/yloop.o
CC build_out/yloop/src/select.o
CC build_out/yloop/src/aos_freertos.o
CC build_out/yloop/src/device.o
CC build_out/yloop/src/local_event.o
AR build_out/yloop/libyloop.a
LD build_out/bl602_demo_event.elf
Generating BIN File to /opt/src/bl_iot_sdk/customer_app/bl602_demo_event/build_out/bl602_demo_event.bin
Building Finish. To flash build output.

and then manually

/opt/src/bl_iot_sdk/customer_app/bl602_demo_event$ cd /opt/src/bl_iot_sdk/image_conf
/opt/src/bl_iot_sdk/image_conf$ python3 -m pip install -r requirements.txt
Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: fdt>=0.2.0 in /home/me/.local/lib/python3.7/site-packages (from -r requirements.txt (line 2)) (0.2.0)
Requirement already satisfied: pycryptodomex>=3.9.8 in /home/me/.local/lib/python3.7/site-packages (from -r requirements.txt (line 3)) (3.9.8)
Requirement already satisfied: toml>=0.10.2 in /home/me/.local/lib/python3.7/site-packages (from -r requirements.txt (line 4)) (0.10.2)
Requirement already satisfied: configobj>=5.0.6 in /home/me/.local/lib/python3.7/site-packages (from -r requirements.txt (line 5)) (5.0.6)
Requirement already satisfied: six in /home/me/.local/lib/python3.7/site-packages (from configobj>=5.0.6->-r requirements.txt (line 5)) (1.15.0)
dell:/opt/src/bl_iot_sdk/image_conf$ python3 flash_build.py bl602_demo_event BL602
========= chip flash id: c84015 =========
/opt/src/bl_iot_sdk/image_conf/bl602/flash_select/GD25Q16E_c84015.conf
Generating BIN File to /opt/src/bl_iot_sdk/customer_app/bl602_demo_event/build_out/ota/dts40M_pt2M_boot2debug_c84015/FW_OTA.bin
Generating BIN File to /opt/src/bl_iot_sdk/customer_app/bl602_demo_event/build_out/ota/dts40M_pt2M_boot2debug_c84015/FW_OTA.bin.ota
Generating BIN File to /opt/src/bl_iot_sdk/customer_app/bl602_demo_event/build_out/ota/dts40M_pt2M_boot2debug_c84015/FW_OTA.bin.xz
Generating BIN File to /opt/src/bl_iot_sdk/customer_app/bl602_demo_event/build_out/ota/dts40M_pt2M_boot2debug_c84015/FW_OTA.bin.xz.ota
Generating BIN File to /opt/src/bl_iot_sdk/customer_app/bl602_demo_event/build_out/whole_dts40M_pt2M_boot2debug_c84015.bin

Building on M1 Mac broken; here's a workaround

I'm not calling this a fix, but here's a way to get the project building on M1-equipped Macs. I don't understand Python details enough to comment much beyond being an observer.

Homebrew doesn't support M1. That's easy enough work with and is documented (though evolving) on brew's own site.

If you just set BL_CPU and let a build rip, it crashes when it mixes native (host) compiler flags with the cross compiler. You can see with the the -I ...Framework..., which is never ever going to work on RISCv-unknown-elf-gcc compiler. That seems to be run when trying to install some of the missing Python stuff. See https://pastebin.com/gXwxNNWT

The OS-provided Python doesn't seem to play nice. Install it from Homebrew. Remember to rehash so a which pip3 shows /usr/local/bin and not Xcode's from /usr/bin/.

The magic seems to be $ arch -x86_64 pip3 install configobj six pycryptodomex fdt toml.

This forces python parts to be installed in x86_64 mode - not arm64 and not RISC-v - which successfully installs. The top-level make then runs to completion.

I'll leave this here to help the next one to try. Hopefully that person is a Python person and can confirm how much of the above is actually necessary and enshrine it in the Makefiles or in the doc as appropriate.

Additionally, a "do nothing" build seems to be doing way too much. build_out/bl602_boot2 bl602_evb and bl602_std seems to be recompiling a few dozen files every time which means that the whole planet has to get relinked in each of the target builds. This means a successive make still burns 58 seconds. I don't know if all systems are doing this right now.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.