MCU - microcontroller
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.
A dedicated Discord server is available at https://discord.gg/kxwY8SkAjh
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.
- STM32L4xx
- STM32H7xx
- STM32F7xx
Board | MCU |
---|---|
NUCLEO-H755ZI-Q | STM32H755ZI |
Mateksys h743-slim | STM32H7xx |
Pixhawk 4 | STM32F7xx |
To add drivers, place them in the Drivers folder. Then, inside the Bootloader/Adapters folder, integrate the drivers with the IMBootloader code.
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.
Integration with improject.imtech.hr
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.
Generated manufacturer id should be changed here:
https://github.com/IMProject/IMBootloader/blob/master/Bootloader/Inc/board_info.h#L58
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.
Product type can be changed or added here: https://github.com/IMProject/IMBootloader/blob/master/Bootloader/Inc/board_info.h#L60-L66
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.
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.