mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-03-18 21:30:38 +01:00
[bootloader] Compatibility with Omega 2.0
This commit is contained in:
@@ -5,7 +5,7 @@ DEBUG ?= 0
|
||||
|
||||
HOME_DISPLAY_EXTERNALS ?= 1
|
||||
EPSILON_VERSION ?= 15.5.0
|
||||
OMEGA_VERSION ?= 1.22.1
|
||||
OMEGA_VERSION ?= 2.0.0
|
||||
UPSILON_VERSION ?= 1.0.0-dev
|
||||
# OMEGA_USERNAME ?= N/A
|
||||
OMEGA_STATE ?= public
|
||||
|
||||
@@ -11,15 +11,16 @@ if len(sys.argv) > 1:
|
||||
print("Error: File not found!")
|
||||
sys.exit(-1)
|
||||
file = open(ext_path, "r+b")
|
||||
first_packet = bytearray(file.read(2048))
|
||||
for b in first_packet:
|
||||
if b != 255:
|
||||
file.read(MAGIK_POS)
|
||||
packet = bytearray(file.read(4))
|
||||
for b in packet:
|
||||
if b != 0:
|
||||
print("Error: Invalid file! (maybe already patched?)")
|
||||
sys.exit(-1)
|
||||
|
||||
for i in range(4):
|
||||
first_packet[MAGIK_POS + i] = MAGIK_CODE[i]
|
||||
packet[i] = MAGIK_CODE[i]
|
||||
|
||||
file.seek(0)
|
||||
file.write(first_packet)
|
||||
file.seek(MAGIK_POS)
|
||||
file.write(packet)
|
||||
print("External bin Patched!")
|
||||
3
build/platform.device.bootloader.mak
Normal file
3
build/platform.device.bootloader.mak
Normal file
@@ -0,0 +1,3 @@
|
||||
TOOLCHAIN ?= arm-gcc-m7f
|
||||
ION_KEYBOARD_LAYOUT = layout_B3
|
||||
PCB_LATEST = 343 # PCB version 3.43
|
||||
@@ -32,13 +32,13 @@ $(eval $(call rule_for, \
|
||||
|
||||
$(eval $(call rule_for, \
|
||||
OBJCOPY, %.hex, %.elf, \
|
||||
$$(OBJCOPY) -O ihex $$< $$@, \
|
||||
$$(OBJCOPY) -R .slot_info -O ihex $$< $$@, \
|
||||
local \
|
||||
))
|
||||
|
||||
$(eval $(call rule_for, \
|
||||
OBJCOPY, %.bin, %.elf, \
|
||||
$$(OBJCOPY) -O binary $$< $$@, \
|
||||
$$(OBJCOPY) -R .slot_info -O binary $$< $$@, \
|
||||
local \
|
||||
))
|
||||
|
||||
|
||||
56
build/targets.device.bootloader.mak
Normal file
56
build/targets.device.bootloader.mak
Normal file
@@ -0,0 +1,56 @@
|
||||
|
||||
epsilon_flavors_bootloader = $(foreach floavor,$(epsilon_flavors),$(floavor).A $(floavor).B)
|
||||
|
||||
define rule_for_epsilon_flavor_bootloader
|
||||
$$(BUILD_DIR)/epsilon.$(1).A.$$(EXE): $$(call flavored_object_for,$$(epsilon_src),$(1))
|
||||
$$(BUILD_DIR)/epsilon.$(1).A.$$(EXE): LDSCRIPT = ion/src/device/bootloader/bootloader.A.ld
|
||||
$$(BUILD_DIR)/epsilon.$(1).B.$$(EXE): $$(call flavored_object_for,$$(epsilon_src),$(1))
|
||||
$$(BUILD_DIR)/epsilon.$(1).B.$$(EXE): LDSCRIPT = ion/src/device/bootloader/bootloader.B.ld
|
||||
$$(BUILD_DIR)/epsilon.$(1).bin: $$(BUILD_DIR)/epsilon.$(1).A.bin $$(BUILD_DIR)/epsilon.$(1).B.bin
|
||||
@echo "COMBINE $$@"
|
||||
$(Q) cat $$(BUILD_DIR)/epsilon.$(1).A.bin >> $$(BUILD_DIR)/epsilon.$(1).bin
|
||||
$(Q) truncate -s 4MiB $$(BUILD_DIR)/epsilon.$(1).bin
|
||||
$(Q) cat $$(BUILD_DIR)/epsilon.$(1).B.bin >> $$(BUILD_DIR)/epsilon.$(1).bin
|
||||
$(Q) truncate -s 8MiB $$(BUILD_DIR)/epsilon.$(1).bin
|
||||
endef
|
||||
|
||||
$(BUILD_DIR)/epsilon.A.$(EXE): $(call flavored_object_for,$(epsilon_src))
|
||||
$(BUILD_DIR)/epsilon.A.$(EXE): LDSCRIPT = ion/src/device/bootloader/bootloader.A.ld
|
||||
|
||||
$(BUILD_DIR)/epsilon.B.$(EXE): $(call flavored_object_for,$(epsilon_src))
|
||||
$(BUILD_DIR)/epsilon.B.$(EXE): LDSCRIPT = ion/src/device/bootloader/bootloader.B.ld
|
||||
|
||||
$(BUILD_DIR)/epsilon.bin: $(BUILD_DIR)/epsilon.A.bin $(BUILD_DIR)/epsilon.B.bin
|
||||
@echo "COMBINE $@"
|
||||
$(Q) cat $(BUILD_DIR)/epsilon.A.bin >> $(BUILD_DIR)/epsilon.bin
|
||||
$(Q) truncate -s 4MiB $(BUILD_DIR)/epsilon.bin
|
||||
$(Q) cat $(BUILD_DIR)/epsilon.B.bin >> $(BUILD_DIR)/epsilon.bin
|
||||
$(Q) truncate -s 8MiB $(BUILD_DIR)/epsilon.bin
|
||||
|
||||
$(foreach flavor,$(epsilon_flavors),$(eval $(call rule_for_epsilon_flavor_bootloader,$(flavor))))
|
||||
|
||||
|
||||
HANDY_TARGETS = $(foreach flavor,$(epsilon_flavors_bootloader),epsilon.$(flavor))
|
||||
HANDY_TARGETS += epsilon.A epsilon.B
|
||||
|
||||
.PHONY: epsilon
|
||||
epsilon: $(BUILD_DIR)/epsilon.onboarding.bin
|
||||
.DEFAULT_GOAL := epsilon
|
||||
|
||||
.PHONY: %_flash
|
||||
%_flash: $(BUILD_DIR)/%.dfu
|
||||
@echo "DFU $@"
|
||||
@echo "INFO About to flash your device. Please plug your device to your computer"
|
||||
@echo " using an USB cable and press at the same time the 6 key and the RESET"
|
||||
@echo " button on the back of your device."
|
||||
$(Q) until $(PYTHON) build/device/dfu.py -l | grep -E "0483:a291|0483:df11" > /dev/null 2>&1; do sleep 2;done
|
||||
$(Q) $(PYTHON) build/device/dfu.py -u $(word 1,$^)
|
||||
|
||||
.PHONY: binpack
|
||||
binpack: $(BUILD_DIR)/epsilon.onboarding.bin
|
||||
rm -rf $(BUILD_DIR)/binpack
|
||||
mkdir -p $(BUILD_DIR)/binpack
|
||||
cp $(BUILD_DIR)/epsilon.onboarding.bin $(BUILD_DIR)/binpack
|
||||
cd $(BUILD_DIR) && for binary in epsilon.onboarding.bin; do shasum -a 256 -b binpack/$${binary} > binpack/$${binary}.sha256;done
|
||||
cd $(BUILD_DIR) && tar cvfz binpack-$(MODEL)-`git rev-parse HEAD | head -c 7`.tgz binpack/*
|
||||
$(PYTHON) build/device/secure_ext.py $(BUILD_DIR)/epsilon.onboarding.bin
|
||||
@@ -54,22 +54,3 @@ $(BUILD_DIR)/bench.ram.$(EXE): LDFLAGS += -Lion/src/$(PLATFORM)/bench
|
||||
$(BUILD_DIR)/bench.ram.$(EXE): LDSCRIPT = ion/src/$(PLATFORM)/shared/ram.ld
|
||||
$(BUILD_DIR)/bench.flash.$(EXE): $(call flavored_object_for,$(bench_src),consoleuart usbxip)
|
||||
$(BUILD_DIR)/bench.flash.$(EXE): LDSCRIPT = ion/src/$(PLATFORM)/$(MODEL)/internal_flash.ld
|
||||
|
||||
.PHONY: %.two_binaries
|
||||
%.two_binaries: %.elf
|
||||
@echo "Building an internal and an external binary for $<"
|
||||
$(Q) $(OBJCOPY) -O binary -j .text.external -j .rodata.external -j .exam_mode_buffer $< $(basename $<).external.bin
|
||||
$(Q) $(OBJCOPY) -O binary -R .text.external -R .rodata.external -R .exam_mode_buffer $< $(basename $<).internal.bin
|
||||
@echo "Padding $(basename $<).external.bin and $(basename $<).internal.bin"
|
||||
$(Q) printf "\xFF\xFF\xFF\xFF" >> $(basename $<).external.bin
|
||||
$(Q) printf "\xFF\xFF\xFF\xFF" >> $(basename $<).internal.bin
|
||||
|
||||
.PHONY: binpack
|
||||
binpack: $(BUILD_DIR)/flasher.light.bin $(BUILD_DIR)/epsilon.onboarding.two_binaries
|
||||
rm -rf $(BUILD_DIR)/binpack
|
||||
mkdir -p $(BUILD_DIR)/binpack
|
||||
cp $(BUILD_DIR)/flasher.light.bin $(BUILD_DIR)/binpack
|
||||
cp $(BUILD_DIR)/epsilon.onboarding.internal.bin $(BUILD_DIR)/epsilon.onboarding.external.bin $(BUILD_DIR)/binpack
|
||||
cd $(BUILD_DIR) && for binary in flasher.light.bin epsilon.onboarding.internal.bin epsilon.onboarding.external.bin; do shasum -a 256 -b binpack/$${binary} > binpack/$${binary}.sha256;done
|
||||
cd $(BUILD_DIR) && tar cvfz binpack-$(MODEL)-`git rev-parse HEAD | head -c 7`.tgz binpack/*
|
||||
$(PYTHON) build/device/secure_ext.py $(BUILD_DIR)/epsilon.onboarding.external.bin
|
||||
|
||||
@@ -5,3 +5,18 @@
|
||||
@echo " using an USB cable and press the RESET button the back of your device."
|
||||
$(Q) until $(PYTHON) build/device/dfu.py -l | grep -E "0483:a291|0483:df11" > /dev/null 2>&1; do sleep 2;done
|
||||
$(Q) $(PYTHON) build/device/dfu.py -m -u $<
|
||||
|
||||
.PHONY: %.two_binaries
|
||||
%.two_binaries: %.elf
|
||||
@echo "Building an internal binary for $<"
|
||||
$(Q) $(OBJCOPY) -O binary -R .text.external -R .rodata.external -R .exam_mode_buffer $< $(basename $<).internal.bin
|
||||
@echo "Padding $(basename $<).internal.bin"
|
||||
$(Q) printf "\xFF\xFF\xFF\xFF" >> $(basename $<).internal.bin
|
||||
|
||||
.PHONY: binpack
|
||||
binpack: $(BUILD_DIR)/epsilon.onboarding.two_binaries
|
||||
rm -rf $(BUILD_DIR)/binpack
|
||||
mkdir -p $(BUILD_DIR)/binpack
|
||||
cp $(BUILD_DIR)/epsilon.onboarding.internal.bin $(BUILD_DIR)/binpack
|
||||
cd $(BUILD_DIR) && for binary in epsilon.onboarding.internal.bin; do shasum -a 256 -b binpack/$${binary} > binpack/$${binary}.sha256;done
|
||||
cd $(BUILD_DIR) && tar cvfz binpack-$(MODEL)-`git rev-parse HEAD | head -c 7`.tgz binpack/*
|
||||
|
||||
@@ -1,21 +1,39 @@
|
||||
HANDY_TARGETS += test.external_flash.write test.external_flash.read
|
||||
HANDY_TARGETS += test.external_flash.write test.external_flash.read bootloader
|
||||
|
||||
$(BUILD_DIR)/test.external_flash.%.$(EXE): LDSCRIPT = ion/test/device/n0110/external_flash_tests.ld
|
||||
test_external_flash_src = $(ion_src) $(liba_src) $(libaxx_src) $(default_kandinsky_src) $(poincare_src) $(ion_device_dfu_relegated_src) $(runner_src)
|
||||
$(BUILD_DIR)/test.external_flash.read.$(EXE): $(BUILD_DIR)/quiz/src/test_ion_external_flash_read_symbols.o $(call object_for,$(test_external_flash_src) $(test_ion_external_flash_read_src))
|
||||
$(BUILD_DIR)/test.external_flash.write.$(EXE): $(BUILD_DIR)/quiz/src/test_ion_external_flash_write_symbols.o $(call object_for,$(test_external_flash_src) $(test_ion_external_flash_write_src))
|
||||
|
||||
.PHONY: bootloader
|
||||
bootloader: $(BUILD_DIR)/bootloader.bin
|
||||
$(BUILD_DIR)/bootloader.$(EXE): $(call flavored_object_for,$(bootloader_src),usbxip)
|
||||
$(BUILD_DIR)/bootloader.$(EXE): LDSCRIPT = ion/src/device/n0110/internal_flash.ld
|
||||
|
||||
.PHONY: %_flash
|
||||
%_flash: $(BUILD_DIR)/%.dfu $(BUILD_DIR)/flasher.light.dfu
|
||||
%_flash: $(BUILD_DIR)/%.dfu
|
||||
@echo "DFU $@"
|
||||
@echo "INFO About to flash your device. Please plug your device to your computer"
|
||||
@echo " using an USB cable and press at the same time the 6 key and the RESET"
|
||||
@echo " button on the back of your device."
|
||||
$(Q) until $(PYTHON) build/device/dfu.py -l | grep -E "0483:a291|0483:df11" > /dev/null 2>&1; do sleep 2;done
|
||||
$(eval DFU_SLAVE := $(shell $(PYTHON) build/device/dfu.py -l | grep -E "0483:a291|0483:df11"))
|
||||
$(Q) if expr "$(DFU_SLAVE)" : ".*0483:df11.*" > /dev/null; \
|
||||
then \
|
||||
$(PYTHON) build/device/dfu.py -u $(word 2,$^); \
|
||||
sleep 2; \
|
||||
fi
|
||||
$(Q) $(PYTHON) build/device/dfu.py -u $(word 1,$^)
|
||||
|
||||
.PHONY: %.two_binaries
|
||||
%.two_binaries: %.elf
|
||||
@echo "Building an internal and an external binary for $<"
|
||||
$(Q) $(OBJCOPY) -O binary -j .text.external -j .rodata.external -j .exam_mode_buffer $< $(basename $<).external.bin
|
||||
$(Q) $(OBJCOPY) -O binary -R .text.external -R .rodata.external -R .exam_mode_buffer $< $(basename $<).internal.bin
|
||||
@echo "Padding $(basename $<).external.bin and $(basename $<).internal.bin"
|
||||
$(Q) printf "\xFF\xFF\xFF\xFF" >> $(basename $<).external.bin
|
||||
$(Q) printf "\xFF\xFF\xFF\xFF" >> $(basename $<).internal.bin
|
||||
|
||||
.PHONY: binpack
|
||||
binpack: $(BUILD_DIR)/flasher.light.bin $(BUILD_DIR)/epsilon.onboarding.two_binaries
|
||||
rm -rf $(BUILD_DIR)/binpack
|
||||
mkdir -p $(BUILD_DIR)/binpack
|
||||
cp $(BUILD_DIR)/flasher.light.bin $(BUILD_DIR)/binpack
|
||||
cp $(BUILD_DIR)/epsilon.onboarding.internal.bin $(BUILD_DIR)/epsilon.onboarding.external.bin $(BUILD_DIR)/binpack
|
||||
cd $(BUILD_DIR) && for binary in flasher.light.bin epsilon.onboarding.internal.bin epsilon.onboarding.external.bin; do shasum -a 256 -b binpack/$${binary} > binpack/$${binary}.sha256;done
|
||||
cd $(BUILD_DIR) && tar cvfz binpack-$(MODEL)-`git rev-parse HEAD | head -c 7`.tgz binpack/*
|
||||
$(PYTHON) build/device/secure_ext.py $(BUILD_DIR)/epsilon.onboarding.external.bin
|
||||
|
||||
Reference in New Issue
Block a user