Starting from our recent discovery about display access from bootloader, we thought, hey, we could now have full control of the resources from this embedded computer. At this stage, we knew what kind of ARM processor we have (ARM 946E-S), how much RAM we have (256MB/512MB depending on the model), how to print things on the display (portable code), how to handle timers and interrupts, how to do low-level SD card access on select models (600D and 5D3), and had a rough idea where to start looking for button events.
So, why not trying to run a different operating system?
We took the latest Linux kernel (3.19) and did the first steps to port it. As we have nearly zero experience with kernel development, we did not get too far, but we can present a proof of concept implementation that ……boots the Linux kernel 3.19 on Canon EOS DSLR cameras!
- It is portable, the same binary runs on all ML-enabled cameras (confirmed for 60D, 600D, 7D, 5D2 and 5D3)
- Allocates all available RAM
- Prints debug messages on the camera screen
- Sets up timer interrupts for scheduling
- Mounts a 8 MiB ext2fs initial ramdisk
- Starts /bin/init from the initrd
- This init process is a selfcontained, libc-less hello world
- Next step: build userspace binaries (GUI, etc)