This is a really interesting project which adds I2C support to an emulated Arm device on an AVR controller. The good thing, it can boot linux in an emulated frequency of 10Khz. That slow but taking in mind the complexity of the project it’s worth it. The original project was just to boot linux on the AVR. However, the project I am going to talk about adds I2C support to this emulated device so that you can interface multiple pheripherals all at once.
The author decided to use Charliplex multiplexing technique to increase the pin support since he was short by one pin on the AVR. The author went through a number of ups and down so that the linux kernel can recognize the new I2C. Howver it took him days to find the solution. In the end, I had compiled the kernel with the needed I2C support, built the modules, built the pvDisk module (how the emulator accesses the SD card), built the RAM disk, and bundled it all up with the bootloader into a boot image. A really complex project, but the outcome was worth it.