diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8ab5cca9..84c85d0b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -58,18 +58,6 @@ jobs: make -j$(nproc) -C bootloader TARGET=${TARGET} done - - name: 'Generate dfu file for bootloader' - uses: ./.github/actions/docker - with: - run: | - for TARGET in ${TARGETS} - do - hex2dfu \ - -i bootloader/.obj/${TARGET}/bootloader.hex \ - -o bootloader/.obj/${TARGET}/bootloader.dfu \ - -l "Flipper Zero $(echo $TARGET | tr a-z A-Z)" - done - - name: 'Build firmware in docker' uses: ./.github/actions/docker with: @@ -79,18 +67,6 @@ jobs: make -j$(nproc) -C firmware TARGET=${TARGET} done - - name: 'Generate dfu file for firmware' - uses: ./.github/actions/docker - with: - run: | - for TARGET in ${TARGETS} - do - hex2dfu \ - -i firmware/.obj/${TARGET}/firmware.hex \ - -o firmware/.obj/${TARGET}/firmware.dfu \ - -l "Flipper Zero $(echo $TARGET | tr a-z A-Z)" - done - - name: 'Generate full hex file' uses: ./.github/actions/docker with: @@ -150,7 +126,7 @@ jobs: do truncate -s 32768 artifacts/flipper-z-${TARGET}-full-${SUFFIX}.bin done - + - name: 'Full flash asssembly: append firmware' run: | for TARGET in ${TARGETS} diff --git a/ReadMe.md b/ReadMe.md index 07e13689..bf6f7664 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -1,12 +1,11 @@ -# Flipper Zero Firmware community repo +# Flipper Zero Firmware [![Discord](https://img.shields.io/discord/740930220399525928.svg?label=&logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2)](http://flipperzero.one/discord) Welcome to [Flipper Zero](https://flipperzero.one/)'s Firmware repo! -Our goal is to create nice and clean code along with good documentation, to make it a pleasure for everyone to work with. -This repo will become completely public closer to the device shipping date. +Our goal is to create nice and clean code with good documentation, to make it a pleasure for everyone to work with. # Update firmware @@ -27,7 +26,7 @@ All 3 of them must be flashed in order described. Prerequisites: -- Linux / MacOs +- Linux / macOS - Terminal - STM32_Programmer_CLI added to $PATH @@ -37,9 +36,9 @@ One liner: `./flash_core2_ble.sh` Prerequisites: -- Linux / MacOs +- Linux / macOS - Terminal -- Arm gcc noneabi +- [arm-gcc-none-eabi](https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads) - openocd One liner: `./flash_core1_main.sh` @@ -58,75 +57,132 @@ One liner: `./flash_core1_main.sh` # Build from source -`docker-compose exec dev make -C firmware flash` for build and flash dev board (see `applications/applications.mk` for list of applications/examples) +## Prerequisites + +1. Install [Docker Engine and Docker Compose](https://www.docker.com/get-started) +2. Clone the repo: + ```sh + git clone https://github.com/flipperdevices/flipperzero-firmware + cd flipperzero-firmware + ``` +3. Prepare the container: + ```sh + docker compose up -d + ``` + +## Compile bootloader + +```sh +docker compose exec dev make -j$(nproc) -C bootloader TARGET=f6 +``` + +Bootloader compilation results: +* `bootloader/.obj/f6/bootloader.elf` +* `bootloader/.obj/f6/bootloader.hex` +* `bootloader/.obj/f6/bootloader.bin` +* **`bootloader/.obj/f6/bootloader.dfu`** - should be used to flash + +## Compile firmware + +```sh +docker compose exec dev make -j$(nproc) -C firmware TARGET=f6 +``` + +Firmware compilation results: +* `firmware/.obj/f6/firmware.elf` +* `firmware/.obj/f6/firmware.hex` +* `firmware/.obj/f6/firmware.bin` +* **`firmware/.obj/f6/firmware.dfu`** - should be used to flash + +## Concatenate bootloader and firmware + +You might want to do this to distribute the firmware as a single file. + +That's exactly how we generate our `full` builds. + +1. Concatenate HEX files: + ```sh + docker compose exec dev srec_cat \ + bootloader/.obj/f6/bootloader.hex -Intel \ + firmware/.obj/f6/firmware.hex -Intel \ + -o firmware/.obj/f6/full.hex -Intel + ``` +2. Convert HEX to DFU: + ```sh + docker compose exec dev hex2dfu \ + -i firmware/.obj/f6/full.hex \ + -o firmware/.obj/f6/full.dfu \ + -l "Flipper Zero F6" + ``` + +Finally, you will have **`firmware/.obj/f6/full.dfu`** file that can be distributed and flashed. # Links -* Task tracker: [Jira](https://flipperzero.atlassian.net/) -* Discord server: [flipperzero.one/discord](https://flipperzero.one/discord) -* Project website: [flipperzero.one](https://flipperzero.one) +* Discord: [flipp.dev/discord](https://flipp.dev/discord) +* Website: [flipperzero.one](https://flipperzero.one) * Kickstarter page: [kickstarter.com](https://www.kickstarter.com/projects/flipper-devices/flipper-zero-tamagochi-for-hackers) * Forum: [forum.flipperzero.one](https://forum.flipperzero.one/) # Folders structure - applications - application and services - * accessor - Wiegand server - * archive - Archive and file manager - * bt - BLE service and application - * cli - Console service - * debug_tools - different tools that we use on factory and for debug - * dialogs - service for showing GUI dialogs - * dolphin - dolphin service and supplientary apps - * gpio-tester - GPIO control application - * gui - GUI service - * ibutton - ibutton application, onewire keys and more - * input - input service - * irda - irda application, controls your IR devices - * irda_monitor - irda debug tool - * lfrfid - LF RFID application - * lfrfid-debug - LF RFID debug tool - * loader - application loader service - * menu - main menu service - * music-player - music player app (demo) - * nfc - NFC application, HF rfid, EMV and etc - * notification - notification service - * power - power service - * power-observer - power debug tool - * scened-app-example - c++ application example - * storage - storage service, internal + sdcard - * storage-settings - storage settings app - * subghz - subghz application, 433 fobs and etc - * tests - unit tests and etc + * accessor - Wiegand server + * archive - Archive and file manager + * bt - BLE service and application + * cli - Console service + * debug_tools - different tools that we use on factory and for debug + * dialogs - service for showing GUI dialogs + * dolphin - dolphin service and supplientary apps + * gpio-tester - GPIO control application + * gui - GUI service + * ibutton - ibutton application, onewire keys and more + * input - input service + * irda - irda application, controls your IR devices + * irda_monitor - irda debug tool + * lfrfid - LF RFID application + * lfrfid-debug - LF RFID debug tool + * loader - application loader service + * menu - main menu service + * music-player - music player app (demo) + * nfc - NFC application, HF rfid, EMV and etc + * notification - notification service + * power - power service + * power-observer - power debug tool + * scened-app-example - c++ application example + * storage - storage service, internal + sdcard + * storage-settings - storage settings app + * subghz - subghz application, 433 fobs and etc + * tests - unit tests and etc - assets - assets used by applications and services - * compiled - compilation results - * icons - source icons images + * compiled - compilation results + * icons - source icons images - bootloader - bootloader for flipper - * src - bootloader sources - * targets - targets' hal and implementation + * src - bootloader sources + * targets - targets' hal and implementation - core - core libraries: home for furi - debug - debug helpers, plugins and tools - docker - docker image sources (used for automated firmware build) - firmware - firmware for flipper - * targets - targets' hal and implementation + * targets - targets' hal and implementation - lib - different libraries and drivers that apps and firmware uses - * ST25RFAL002 - ST253916 driver and NFC hal - * STM32CubeWB - STM32WB hal - * app-scened-template - scened template app library - * app-template - template app library - * callback-connector - callback connector library - * common-api - common api delaration library - * cyfral - cyfral library - * drivers - drivers that we wrote - * fatfs - external storage file system - * fnv1a-hash - fnv1a hash library - * irda - irda library - * littlefs - internal storage file system - * mlib - algorithms and containers - * nfc_protocols - nfc protocols library - * onewire - one wire library - * qrcode - qr code generator library - * subghz - subghz library - * toolbox - toolbox of things that we are using but don't place in core - * u8g2 - graphics library that we use to draw GUI + * ST25RFAL002 - ST253916 driver and NFC hal + * STM32CubeWB - STM32WB hal + * app-scened-template - scened template app library + * app-template - template app library + * callback-connector - callback connector library + * common-api - common api delaration library + * cyfral - cyfral library + * drivers - drivers that we wrote + * fatfs - external storage file system + * fnv1a-hash - fnv1a hash library + * irda - irda library + * littlefs - internal storage file system + * mlib - algorithms and containers + * nfc_protocols - nfc protocols library + * onewire - one wire library + * qrcode - qr code generator library + * subghz - subghz library + * toolbox - toolbox of things that we are using but don't place in core + * u8g2 - graphics library that we use to draw GUI - make - make helpers - scripts - supplimentary scripts diff --git a/docker-compose.yml b/docker-compose.yml index 42d05584..68aa14c1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,16 +1,12 @@ version: '3' services: dev: - build: docker - network_mode: "host" + image: flipperdevices/flipperzero-toolchain + network_mode: host privileged: true tty: true stdin_open: true volumes: - .:/project - /dev/bus/usb:/dev/bus/usb - working_dir: "/project" - environment: - DISPLAY: $DISPLAY - TERM: xterm-256color - PATH: /root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin + working_dir: '/project' \ No newline at end of file diff --git a/make/rules.mk b/make/rules.mk index 627f14c6..79a24db3 100644 --- a/make/rules.mk +++ b/make/rules.mk @@ -32,7 +32,7 @@ CHECK_AND_REINIT_SUBMODULES_SHELL=\ fi $(info $(shell $(CHECK_AND_REINIT_SUBMODULES_SHELL))) -all: $(OBJ_DIR)/$(PROJECT).elf $(OBJ_DIR)/$(PROJECT).hex $(OBJ_DIR)/$(PROJECT).bin +all: $(OBJ_DIR)/$(PROJECT).elf $(OBJ_DIR)/$(PROJECT).hex $(OBJ_DIR)/$(PROJECT).bin $(OBJ_DIR)/$(PROJECT).dfu $(OBJ_DIR)/$(PROJECT).elf: $(OBJECTS) @echo "\tLD\t" $@ @@ -47,6 +47,13 @@ $(OBJ_DIR)/$(PROJECT).bin: $(OBJ_DIR)/$(PROJECT).elf @echo "\tBIN\t" $@ @$(BIN) $< $@ +$(OBJ_DIR)/$(PROJECT).dfu: $(OBJ_DIR)/$(PROJECT).hex + @echo "\tDFU\t" $@ + @hex2dfu \ + -i $(OBJ_DIR)/$(PROJECT).hex \ + -o $(OBJ_DIR)/$(PROJECT).dfu \ + -l "Flipper Zero $(shell echo $(TARGET) | tr a-z A-Z)" > /dev/null + $(OBJ_DIR)/%.o: %.c $(OBJ_DIR)/BUILD_FLAGS @echo "\tCC\t" $< "->" $@ @$(CC) $(CFLAGS) -c $< -o $@