Change ginstall to not write bootloaders to older GFHD254s.

The bootloader that works with the 4GB board is not compatible
with the 2GB boards.  If the device in question has less than
4GB don't update the bootloader ever.

Change-Id: I47ae3ba14266791d2f3375ed2a867c1295ac3946
diff --git a/ginstall/ginstall.py b/ginstall/ginstall.py
index c53f1af..1d233c6 100755
--- a/ginstall/ginstall.py
+++ b/ginstall/ginstall.py
@@ -72,6 +72,7 @@
     'SYSBLOCK': '/sys/block',
     'MMCBLK0BOOT0': '/dev/mmcblk0boot0',
     'MMCBLK0BOOT1': '/dev/mmcblk0boot1',
+    'MEMINFO': '/proc/meminfo',
 }
 
 MMC_RO_LOCK = {
@@ -132,6 +133,16 @@
   return open(F['ETCVERSION']).read().strip()
 
 
+def GetMemTotal():
+  total = open(F['MEMINFO']).readline()
+  total = total.split(' ')
+  total = filter(None, total)
+  if len(total) != 3:
+    print 'Error parsing /proc/meminfo'
+    return 0
+  return 1024 * int(total[1])
+
+
 def GetInternalHarddisk():
   for blkdev in sorted(glob.glob(F['SYSBLOCK'] + '/sd?')):
     dev_path = os.path.realpath(blkdev + '/device')
@@ -760,6 +771,9 @@
   Raises:
     Fatal: if install fails
   """
+  if GetPlatform() == 'GFHD254' and GetMemTotal() < 4*1e9:
+    print 'Skipping bootloader on 2GB lockdown.'
+    return
 
   loader_start = loader.filelike.tell()
   installed = False
diff --git a/ginstall/ginstall_test.py b/ginstall/ginstall_test.py
index 928cf58..8deac64 100755
--- a/ginstall/ginstall_test.py
+++ b/ginstall/ginstall_test.py
@@ -357,5 +357,14 @@
 
     return uloader, uloader_data
 
+  def testGetMemTotal(self):
+    ginstall.F['MEMINFO'] = 'testdata/proc/meminfo1'
+    total = ginstall.GetMemTotal()
+    self.assertTrue(total > 4*1e9)
+    ginstall.F['MEMINFO'] = 'testdata/proc/meminfo2'
+    total = ginstall.GetMemTotal()
+    self.assertTrue(total < 4*1e9)
+
+
 if __name__ == '__main__':
   unittest.main()
diff --git a/ginstall/testdata/proc/meminfo1 b/ginstall/testdata/proc/meminfo1
new file mode 100644
index 0000000..0a6b71a
--- /dev/null
+++ b/ginstall/testdata/proc/meminfo1
@@ -0,0 +1,40 @@
+MemTotal:        4144364 kB
+MemFree:         2207124 kB
+MemAvailable:    2654112 kB
+Buffers:          146000 kB
+Cached:           354176 kB
+SwapCached:            0 kB
+Active:           317572 kB
+Inactive:         438000 kB
+Active(anon):     255532 kB
+Inactive(anon):    35648 kB
+Active(file):      62040 kB
+Inactive(file):   402352 kB
+Unevictable:           0 kB
+Mlocked:               0 kB
+HighTotal:       3932160 kB
+HighFree:        2175912 kB
+LowTotal:         212204 kB
+LowFree:           31212 kB
+SwapTotal:             0 kB
+SwapFree:              0 kB
+Dirty:                 0 kB
+Writeback:             0 kB
+AnonPages:        255416 kB
+Mapped:            81892 kB
+Shmem:             35788 kB
+Slab:              20328 kB
+SReclaimable:      10616 kB
+SUnreclaim:         9712 kB
+KernelStack:        2792 kB
+PageTables:         7436 kB
+NFS_Unstable:          0 kB
+Bounce:                0 kB
+WritebackTmp:          0 kB
+CommitLimit:     2072180 kB
+Committed_AS:     891408 kB
+VmallocTotal:     761856 kB
+VmallocUsed:       41868 kB
+VmallocChunk:     703484 kB
+CmaTotal:        2965504 kB
+CmaFree:         1427640 kB
diff --git a/ginstall/testdata/proc/meminfo2 b/ginstall/testdata/proc/meminfo2
new file mode 100644
index 0000000..cc3fab8
--- /dev/null
+++ b/ginstall/testdata/proc/meminfo2
@@ -0,0 +1,40 @@
+MemTotal:        2144364 kB
+MemFree:         2207200 kB
+MemAvailable:    2654188 kB
+Buffers:          146000 kB
+Cached:           354176 kB
+SwapCached:            0 kB
+Active:           317580 kB
+Inactive:         438000 kB
+Active(anon):     255540 kB
+Inactive(anon):    35648 kB
+Active(file):      62040 kB
+Inactive(file):   402352 kB
+Unevictable:           0 kB
+Mlocked:               0 kB
+HighTotal:       3932160 kB
+HighFree:        2175912 kB
+LowTotal:         212204 kB
+LowFree:           31288 kB
+SwapTotal:             0 kB
+SwapFree:              0 kB
+Dirty:                 0 kB
+Writeback:             0 kB
+AnonPages:        255420 kB
+Mapped:            81892 kB
+Shmem:             35788 kB
+Slab:              20316 kB
+SReclaimable:      10616 kB
+SUnreclaim:         9700 kB
+KernelStack:        2792 kB
+PageTables:         7432 kB
+NFS_Unstable:          0 kB
+Bounce:                0 kB
+WritebackTmp:          0 kB
+CommitLimit:     2072180 kB
+Committed_AS:     891408 kB
+VmallocTotal:     761856 kB
+VmallocUsed:       41868 kB
+VmallocChunk:     703484 kB
+CmaTotal:        2965504 kB
+CmaFree:         1427540 kB