Skip to content

Safety-Critical bootloader, written by following MISRA guidelines

License

Notifications You must be signed in to change notification settings

IMProject/IMBootloader

Repository files navigation

Glossary

MCU - microcontroller

About

IMBootloader is a universal bootloader for embedded devices created by the IMProject Development Team .

The idea behind this project is to save developers time by eliminating the need to write separate bootloader and flasher applications. IMBootloader works in tandem with the platform-agnostic flasher app, IMFlasher , which is created using QT. Additionally, manufacturers can store firmware and updated bootloader on the webpage improject.imtech.hr.

Support and Developers Channel

A dedicated Discord server is available at https://discord.gg/kxwY8SkAjh

Firmware example

Each MCU has its own example of IMLedBlink. This example provides a good starting point for firmware development or understanding how to transition from firmware to IMBootloader.

Currently supported MCUs

  • STM32L4xx
  • STM32H7xx
  • STM32F7xx

Currently supported boards

Board MCU
NUCLEO-H755ZI-Q STM32H755ZI
Mateksys h743-slim STM32H7xx
Pixhawk 4 STM32F7xx

How to add a new MCU?

To add drivers, place them in the Drivers folder. Then, inside the Bootloader/Adapters folder, integrate the drivers with the IMBootloader code.

Self-update feature

To use this feature, create a RAM variant of IMBootloader (e.g., make matek_H7_slim_ram) and flash it using the IMFlasher application. Once the RAM variant is running, the FLASH sectors for the bootloader can be freely erased and rewritten.

self-update

Integration with improject.imtech.hr

Manufacturer id

Each user on the page receives a unique base64 manufacturer ID, which is 44 characters long. This ID is necessary to distinguish one user from another. image

Generated manufacturer id should be changed here:
https://github.com/IMProject/IMBootloader/blob/master/Bootloader/Inc/board_info.h#L58

Product types

Each manufacturer ID can have multiple product types, which means that software on the same hardware can serve different purposes. Additionally, it is useful for identifying different board versions (hardware variants) and keeping track of which firmware and bootloader belong to each. image

Product type can be changed or added here: https://github.com/IMProject/IMBootloader/blob/master/Bootloader/Inc/board_info.h#L60-L66

File versions

Each product type is then linked to a file version that represents different firmware or bootloaders. Each of these can be uploaded through the web interface. image

Pre-shared key

This is the key that is used for key exchange. The key should never be sent over communication channels. Its purpose is to verify newly generated keys from both the bootloader and the server side. Only the bootloaders and servers know the key, and only they can create a secure communication channel. This ensures protection against man-in-the-middle attacks. For full protection, make sure your bootloader has enabled the read protection mechanism. On the bootloader side, the pre-shared key can be set here:
https://github.com/IMProject/IMBootloader/blob/master/Bootloader/Inc/security.h#L59 \

On the server side, it can be set in the product type section of the website.