Fun with android, hardware blobs and cyanogenmod
I have had a samsung galaxy S3 phone for a while now. The very first thing I did when I got it was unlock it and upgrade the OS on it to cyanogenmod. Aside from avoiding all my carriers junk apps that couldn’t be deleted (nascar racing? really?), it let me do easy full backups of the phone, upgrade on the much better cyanogenmod schedule and in general be happier running a somewhat freeer operating system.
Everything was running along fine until a few weeks ago. I upgraded to the CM11.0 M11 release. This is a “milestone” release, expected to be stable for people and they will accept bug reports on issues found in them. I did the upgrade, everything looked great. Then, I noticed that when away from the house or places where I had wifi (which is happily a somewhat small number of places), my phone wasn’t getting data services. It would just never connect right to my carrier. 🙁 Digging around on the net I found the problem: My carrier had upgraded both the bootloader and the modem firmware in a Over the Air update to their stock firmware (which of course I didn’t get, since I wasn’t running their firmware). Normally these kinds of updates are just the modem firmware and you can easily get a updater that updates your phone. However, in this case the vendor had also pushed a bootloader update that was required for the modem updater to work. 🙁
So, the “solution” suggested by most folks was to flash back to the vendor firmware and then update from there. I tried this, but sadly, the orig firmware I had was so old it wouldn’t upgrade. Then I tried using various stock firmware from around the net. Sadly, I couldn’t get those to boot, they would just black screen and I would have to go back and reflash another firmware. The next suggestion was to use a odin ‘one-click’ (firmware+modem+bootloader+everything in one mysterious exe).
For samsung devices there’s a windows application called odin that can be used to flash base firmware on the devices. It’s windows only. It’s very much not open source (my understanding is that it was/is an internal samsung tool that leaked to the net, it was never released by them even as closed source). Happily there is a completely open source, reverse engineered application called heimdall for linux that does much the same as odin. Unhappily it’s very lightly documented, and cannot simply load odin “one click” exe’s that all the folks on the various forums talk about when reflashing things. ;( After monkeying around with it for an afternoon, I finally got it to flash the bootloader and modem on my phone. Then, reloaded cyanogenmod and got mobile data!
So, lessons here:
- Telcos continue to suck. I am going to get an unlocked phone next time to avoid this drama.
- Cyanogenmod is great, but it’s a bit sad that they don’t let people know about this issue (there is a closed jira ticket saying “bummer, nothing we can do”)
- I wish heimdall would grow a way to read and use the odin one-click stuff, that would make it much easier to flash without having to unpack things and figure out which specific file to load into which specific PIT slot. ;(
- I wish there were phones where the modem/bootloader/everything is 100% free.