It must be less than 0x80000 for 600D and 1100D.
Due to the lack of memory protection on the ARM CPU, this means that arbitrary code can execute, which is VERY BAD! What's worse is that if it's only a small chunk missing, then most things may appear to be working until all of a sudden, randomly later on, you try to execute something in the missing chunk and you get a hard crash.Īlways check the MemSiz header in the build output:
This is my understanding of why: it basically means that an arbitrary chunk of ML's code is basically going to be missing, and there may be, for example, functions that point into uninitialized/invalid memory locations. Later on we have vastly more memory available (several hundred MB usually, depending on what Canon firmware is doing and how much it needs), this is why we can still load lots of modules, they aren't loaded until later on when a lot more memory is available*. This is just a result of how the Canon bootloader works, and how ML starts up, not a result of total memory available (Why? It's very common for bootloaders in general to have very little resources available, in fact this is the very reason it is called bootstrapping this article is about x86 not ARM, but the same principles apply: ).įor us, there are only 512KB (0x80000) of memory available for autoexec.bin during bootstrapping for whatever reason (this is true for 600D and 1100D, other cameras have more, so they work fine if autoexec is bigger than 512KB).
600D has limited memory to load the autoexec.bin binary into memory during boot.