I have a request to calculate a checksum of a binary file and embed that checksum as part of the firmware file that is flashed to the chip. Upon startup it the code would calculate the checksum and do a comparison to the one stored. The catch is that the checksum that is embedded in the firmware file is to be calculated and embedded in the build process. I’m at a loss for how to go about doing this, is there anything in VGDB that could help?
VisualGDB itself doesn’t provide any special tools for calculating checksums, however it should be relatively straight-forward to code a simple tool that would do that. You can use VisualGDB Project Properties -> Custom Build Steps page to invoke the custom tool that will patch the .bin file generated by VisualGDB.
Then you can convert the .bin file back to ELF as shown below:
Note that the new ELF file will not contain any debugging symbols, so it should not replace the original ELF file. Instead, please add the following command to Additional GDB Startup Commands (before connecting to target);
C++
1
exec-file<file>-patched.elf
This will make sure that VisualGDB uses the contents of <file>-patched.elf to program the FLASH memory, but still uses the regular ELF file to load the symbols.
You can use the same techniques that would work for any other IDE or a directly built project. VisualGDB does not change anything from that perspective.
Hi I have a similar request to calculate a checksum upon building. Are there any examples that make custom build steps? I’m unfamiliar with what sort of syntax is needed to access the built file and such.
You can use the $(TargetPath) expression to reference the built file path. Ultimately, the custom build steps are simply instructions to run custom command-line applications or scripts. The actual logic for editing the files would need to be done by the actual script.