Flashing a DVD Burner

Talking the other day with Caster about his problems with his own DVD burner, I’ve started wondering about that procedure; to be honest I never thought about it because with my current NEC burner I had no problem at all.

While most modern mainboards allows BIOS update without any Windows or DOS system, not even a boot diskette, by using a subsystem inside the BIOS itself and reading the upgrade image from a floppy or a CD (in my case the latter because I don’t have any floppy disk drive on Enterprise), almost every burner, as far as I can see, requires to run some program under Windows.

For my own model, I found an unofficial tool for Linux x86, proprietary and closed source, designed to load modified firmware images, in a notorious site for CD crackers (reason why I won’t link it here right away); unfortunately you actually has to trust the program not to do anything evil, as the page actually suggest you to run it as root. It also requires a binary image of the firmware to upgrade to, and NEC only provides the upgrading tool with the firmware inline.

What I was thinking was to find exactly how the cdfreaks tool work, and then reimplement it, eventually on top of libcdio, so that we had a FLOSS tool to upgrade NEC drives that works on any platform, not only x86. Unfortunately the license of that tool disallows me from decompiling or disassembling it, although it doesn’t speak about dynamic tracing.

Through strace I discovered that the tool uses ioctl() calls to send commands to the device to dump the firmware it has loaded; the problem is to understand those calls: there doesn’t seem to be any way to trace those calls in detail, and as the tool is statically linked, it’s not possible to just preload a library to hook those calls out.

There is one more problem: reverse engineering the tool will be a risk for the hardware, bricking the device is a more than likely result. So I tried the unlikely way out first and sent a mail to NEC asking them the specs of the device upgrade procedure. I don’t count on receiving an answer, kinda obviously.

If other users have NEC burners, and think implementing burners’ firmware upgrades with FLOSS is important, let me know, I’ll use that to consider the usefulness of such a task.

And for those wondering, I’m currently attaching labels to envelopes, that’s why I’m not developing anything particular. I have plans though, and I’ll try to follow them more closely in the next days, and blog about them more (to allow myself to blog more easily and on spare time, I’m currently using my E61 to email the entry to myself and post it as soon as I reach one of my terminals).