You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Put somewhere it won't be overridden by the customer flashing their own firmware.
Two options:
Embed with linker script
Embed with UF2
For both we have to create a build script that builds a different variant of the firmware.
The script accepts the serial number and embeds it in the image.
The regular build script that customers would use builds an image that doesn't include this section with the serial number. And it also must avoid overriding the serial number when flashing.
Linker Script
The serial number could be embedded in the executable via a linker script. QMK let's you easily use your own linker script. @kiram9 you suggested this. How would we avoid the customer overwriting the serial number when they flash their own binary?
A UF2 file is just a series of independent 512B blocks that each say which address they should be flashed to and include the data.
I think if we put a block at the end it won't interfere with the firmware. But the script must check that there is enough empty space.
We can reserve one of these blocks for the serial number. The factory build script includes this block in the UF2 file, the regular script doesn't.
This way the serial number is preserved if the customer uses the default build script that we'll upstream to QMK.
They could modify it to overwrite the entire flash.
If we put the serial number at the end of the flash, users won't accidentally overwrite it if they create a bigger binary.
Only if it fills the entire flash.
The flash chip we use supports locking 4K sections. So we could even lock it to avoid it being overwritten.
Activity
JohnAZoidberg commentedon Jan 13, 2023
UF2 should be able to be concatenated.
So the factory file could be created by running a script on the regular binary:
JohnAZoidberg commentedon Jan 13, 2023
If we put the serial number at the end of the flash, users won't accidentally overwrite it if they create a bigger binary.
Only if it fills the entire flash.
The flash chip we use supports locking 4K sections. So we could even lock it to avoid it being overwritten.
JohnAZoidberg commentedon Jan 16, 2023
Current solution:
0x100ff000. Which is 4KB below 1MB.UF2 generation and flashing is done like:
TODO:
iSerialNumberso that we can upstream ittmk_core/protocol/vusb/vusb.cFRALDLvvccxxxxxxxxif the flash was completely erasedJohnAZoidberg commentedon Feb 1, 2023
VIA puts configuration in emulated eeprom at the end of flash. Might conflict with the serial number.