Trouble understanding this Cyanogenmod PSA I've been using Cyanogenmod for over a year now, with my own modifications to the dalvik VM. I have teamwin recovery installed on my Samsung Galaxy S3, which I use to install new builds of cyanogenmod. One problem I've always had and have been unable to find an explanation for is that installing the new build of cyanogenmod would fail with some assert until I remove the assert lines from META-INF/com/google/android/updater-script in cyanogenmod zip file. I'm trying to figure out how to install cyanogenmod properly so I don't get the assert error (cyanogenmod already works for me (though it crashes sometimes, but I think that's normal), I just want to make sure I'm doing it right).
I'm reading this PSA on Cyanogenmod's website, which I was linked to from here, which I found by searching the word &quot;I747MVLDLK4&quot;, which I found in my phone's &quot;baseband version&quot; in the settings menu (I was thinking I need a different version of cyanogenmod other than d2att - one which has &quot;I747MVLDLK4&quot; listed in its assert lines), and I don't understand a single thing it's saying.

As we march towards the 10.1 release of CyanogenMod, we have folks updating from older ICS stock builds.

What is ICS?

However, there is an incompatibility between the ICS bootloader firmware and Android 4.1 and above releases
[...]
Find a heimdall/odin or recovery-installable package of your device’s firmware, and install it.

What is a heimdall/odin or recovery-installable package of my device's firmware? Is that the bootloader firmware? Or, is it the entire &quot;firmware&quot; as in the way people call cyanogenmod a &quot;firmware&quot;? Or, are they telling me to install the default software that came with my phone when I bought it (where can I even get that?)?

To make sure your device is primed and ready for this state, the following lists the bootloaders compatible for each device:
d2att: I747UCDLK3 &amp; I747MVLDLK4

Is this a different thing? Or is it the &quot;firmware&quot; they referred to above in my previous question?
Some Disambiguation:

ICS is abbreviation of "Ice Cream Sandwich," or Android 4.0.x release.

Bootloader is code that runs before the operating system even starts. See more details here:


  In literal terms, bootloader is code that is executed before any
  Operating System starts to run. The concept of bootloaders is
  universal to virtually all Operating systems that inculcates operating
  systems on your PC, laptop, smartphones, and other such devices.
  Bootloaders basically package the instructions to boot operating
  system kernel and most of them also have their own debugging or
  modification environment. As the bootloader kicks off before any piece
  of software on your device, it makes it extremely processor specific
  and every motherboard has it’s own bootloader. This is one reason that
  all Android phones have different Custom ROMS developed due to high
  variance of processing hardware present on the device.   ...   Every
  Android phone has a bootloader that instructs the operating system
  kernel to boot normally. But you need to understand one thing here
  that as Android OS is an open source OS and is available on a variety
  of different hardware, every manufacturer has their own version of
  bootloader specific for the hardware present in it’s environment.


Heimdall and Odin are tools for flashing images to Samsung phones.

The Problem:

The issue is that Samsung made some modifications to the bootloader code for their release of Android 4.1 (Jelly Bean) on Galaxy S3 models. This means that custom ROMs that were created on older 4.0 base will no longer be compatible with new bootloader.  The new bootloaders, however, are backwards-compatible with older pre-4.1 based ROMs, so upgrading the bootloader will not prevent you from flashing CM9, for example.

The assert errors you are seeing are from trying to flash such incompatible ROMs.  These validations were put in for your protection, and you should not remove them from the updater scripts.  

The Solution:

You should upgrade your phone's bootloader to the proper version, as specified in that blog post.

The instructions for updating the bootloader are here:


  Download the correct update:
  I747U (AT&amp;T)
    * I747UCALG1 - Jul 1, 2012 - boot_CWM_I747UCALG1.zip - 1.13 MB
    * I747UCDLK3 - Nov 3, 2012 - boot_CWM_I747UCDLK3.zip - 1.13 MB
    * I747UCDMG2 - Jul 2, 2013 - boot_CWM_I747UCDMG2.zip - 1.13 MB
    * I747UCUEMJB - Oct 11, 2013 - boot_CWM_I747UCUEMJB.zip - 1.14 MB WARNING: Do not attempt to downgrade from this bootloader. Doing so will brick your device. Use extra caution when flashing anything via Odin, as many Odin packages will attempt to flash the bootloader.  
  
  I747M (Canada and overseas)
  * I747MVLUEMK5 - Nov 5, 2013 - boot_CWM_I747MVLUEMK5.zip - 1.14 MB WARNING: Do not attempt to
  downgrade from this bootloader. Doing so will brick your device. Use
  extra caution when flashing anything via Odin, as many Odin packages
  will attempt to flash the bootloader.
  
  Depending on which type of update package you downloaded, follow one
  of the following steps:
  
  
  Flashing with Odin
  
  Download Odin: link  
  Put your phone into download mode. Some ROMs have this option in the Power > Reboot menu,
  otherwise just hold "Volume Down" and "Home" while powering on your
  device.   
  Launch Odin, then connect the USB cable to your device.  
  Click the "PDA" button and select the package you downloaded in step
  Click "Start" in Odin and wait for the process to complete. Your device should reboot automatically when the flash is complete, and you're done.  
  
  Flashing in recovery
  
  If you've downloaded a flashable .ZIP from above, copy it to your SD card or internal storage.  
  Reboot your phone into recovery mode (you can do this by holding "Volume Up" and "Home"
  while powering on your device; let go of the buttons when you see
  "Recovery booting..." in blue text in the top left of the screen) and
  install the .ZIP as an update. 
  Reboot, and you're done.
  Note: After flashing in recovery, you need to reboot before you (and ROM
  installers) actually see the new version number.
  
  


It looks like you have the Canadian S3, so you will need to upgrade to the I747MVLUEMK5 bootloader.  After you flash it, you should be able to install newer CM versions without any errors.