Просмотр исходного кода

DFU make rule, update Readme (#650)

Co-authored-by: あく <alleteam@gmail.com>
Anna Prosvetova 4 лет назад
Родитель
Сommit
69f4858168
4 измененных файлов с 129 добавлено и 94 удалено
  1. 1 25
      .github/workflows/build.yml
  2. 117 61
      ReadMe.md
  3. 3 7
      docker-compose.yml
  4. 8 1
      make/rules.mk

+ 1 - 25
.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}

+ 117 - 61
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)
 
 <img src="https://habrastorage.org/webt/eo/m0/e4/eom0e4btudte7nrhnyic-laiog0.png" />
 
 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

+ 3 - 7
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'

+ 8 - 1
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 $@