From freemyipod.org
Jump to: navigation, search
Warning The information and/or topic discussed here is not up to date.

emBIOS was discontinued on 2011-03-25 and superseded by emCORE

emBIOS on the 4G Nano

emBIOS (embedded BIOS) is best described as a hardware abstraction with threading and debugging capabilities built in. It was superseded by emCORE. It simplified development immensely by integrating drivers for all the iPods. Before drivers were scattered throughout multiple tools built for multiple iPods. If there was a bug fix for a driver, it would have to be applied in many different places. emBIOS attempted to solve this problem by providing a syscall interface that is standard throughout all iPod generations. This means that a build of a tool can work across generations as long as it is run on a native emBIOS. This allows for maximum code reuse.

emBIOS was designed with portability in mind. It should have also been able to be run on other devices like the BeagleBoard if someone would have ported the necessary drivers.

If you're curious about how emBIOS worked, you can browse its last SVN revision before its official death here.


If you want to try it out on your own iPod, there are automatic builds on our buildserver, but you might as well just check out the SVN and compile it yourself. Here are the basic steps to compiling emBIOS for your iPod:

So to compile for the iPod nano 2g with your toolchain prefixed with arm-elf-eabi- do:

CROSS=arm-elf-eabi- make ipodnano2g


To communicate with emBIOS use the embios.py python script in the /embios/trunk/tools folder of our SVN. You need to have libusb, python and pyusb 1.x for this to work. Simply run embios,py without any arguments to get a list of possible commands. You can upload and download from/to the memory, read the i2c bus, run emBIOS applications or complete firmware files and much more. Just try it out!

Personal tools
Basic skills
Reverse engineering Results