Bonfra wrote:
Now I need to do an enormous amount of work to flash the image to a real HDD
There's a couple of things I did that make testing on real hardware a whole lot easier than flashing a HDD. Like you, I have my own bootloader. (my boot image is just bootblock+secondaryloader+kernel catted together; I don't have filesystem-based boot yet).
First option is to boot from a USB flash drive. I took an older Ubuntu Linux live boot USB drive, I think it's 16.04, one that doesn't force UEFI on you. The beginning of the device has an MBR boot block, which then loads the first sector from partition 1 and jumps to it, just like booting from a hard drive. You should be able to write your image there (e.g. dd if=img of=/dev/sdX1) and boot. I didn't use this option for very long, but it seemed to work.
The other option is PXE (netboot). There's a few PXE packages out there you can use, such as pybootd. This takes a little more work to set up, but makes testing easier, because you can point the boot server directly at your build image and boot at any time.
There were some changes necessary to make this work (for example, because of my boot+kernel blob, PXE can deliver the entire thing at once, so my bootsect has to detect this and not try to load the kernel) but now it's so much easier to test.