#!/usr/bin/python2 # Copyright (C) 2015 Red Hat Inc. # Author(s): Dennis Gilmore # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation; either version 2 of the License, or (at your # option) any later version. See http://www.gnu.org/copyleft/gpl.html for # the full text of the license. import os def is_calxeda(): #is the system a calxeda one fd = open('/proc/cpuinfo','r') cpuinfo = fd.readlines() fd.close() for line in cpuinfo: if line.startswith('Hardware'): if line.split(' ')[1].startswith('Highbank'): return True if line.split(' ')[1].startswith('Midway'): return True return False def update_sysconfig(): ''' update /etc/sysconfig/uboot to reflect if the platform provides its own dtb and we do not need to pass anything. ''' configfile = '/etc/sysconfig/uboot' fd = open(configfile, 'r') uboot = fd.read() fd.close() newuboot = uboot.replace('#SHIPSDTB=no','SHIPSDTB=yes') fd = open(configfile, 'w') fd.write(newuboot) fd.close() def insert_fdtdir(): ''' insert into /boot/extlinux/extlinux.conf a fdtdir line ''' configfile = '/boot/extlinux/extlinux.conf' fd = open(configfile, 'r') extlinux = fd.readlines() fd.close() newextlinux = [] fdtdirline = '' for line in extlinux: newextlinux.append(line) if line.startswith('\tkernel'): fdtdirline = line.replace('kernel','fdtdir').replace('vmlinuz', 'dtb') if line.startswith('\tappend'): newextlinux.append(fdtdirline) fd = open(configfile, 'w') fd.writelines(newextlinux) fd.close() def copy_rescue_dtbs(): ''' check if there is a rescue image and copy the dtb files if there is ''' boot = os.listdir('/boot') dtbsource = '' dtbdest = '' has_rescue = False for target in boot: if target.startswith('vmlinuz-0-rescue'): has_rescue = True dtbdest = '/boot/%s' % target.replace('vmlinuz', 'dtb') if target.startswith('dtb'): dtbsource = '/boot/%s' % target if has_rescue: if not os.path.isdir(dtbdest): os.mkdir(dtbdest) for dtb in os.listdir(dtbsource): os.link(os.path.join(dtbsource, dtb), os.path.join(dtbdest, dtb)) if __name__ == "__main__": # platform ships its own dtb if is_calxeda(): update_sysconfig() else: # need to add fdtdir to extlinux.conf insert_fdtdir() copy_rescue_dtbs()