diff options
| author | Martin Braun <martin.braun@ettus.com> | 2017-11-29 14:48:44 -0800 | 
|---|---|---|
| committer | Martin Braun <martin.braun@ettus.com> | 2017-12-22 15:05:57 -0800 | 
| commit | 1e4e90d240dec91e56f0a0717f3e925c067105e4 (patch) | |
| tree | 5238971209a19663f3aa8836c157725d23f07ddc /mpm | |
| parent | d5d7b84ac85f57b41038db63235a8271b8189ba8 (diff) | |
| download | uhd-1e4e90d240dec91e56f0a0717f3e925c067105e4.tar.gz uhd-1e4e90d240dec91e56f0a0717f3e925c067105e4.tar.bz2 uhd-1e4e90d240dec91e56f0a0717f3e925c067105e4.zip  | |
mpm: n310: Compile .dts files to .dtbo on update
Reviewed-By: Brent Stapleton <brent.stapleton@ettus.com>
Diffstat (limited to 'mpm')
| -rw-r--r-- | mpm/python/usrp_mpm/periph_manager/n310.py | 38 | 
1 files changed, 31 insertions, 7 deletions
diff --git a/mpm/python/usrp_mpm/periph_manager/n310.py b/mpm/python/usrp_mpm/periph_manager/n310.py index 79c866aa4..122053b7f 100644 --- a/mpm/python/usrp_mpm/periph_manager/n310.py +++ b/mpm/python/usrp_mpm/periph_manager/n310.py @@ -22,6 +22,7 @@ from __future__ import print_function  import os  import copy  import shutil +import subprocess  from six import iteritems, itervalues  from builtins import object  from .base import PeriphManagerBase @@ -482,6 +483,7 @@ class n310(PeriphManagerBase):          'dts': {              'callback': "update_dts",              'path': '/lib/firmware/n3xx.dts', +            'output': '/lib/firmware/n3xx.dtbo',              'reset': False,          },      } @@ -925,8 +927,8 @@ class n310(PeriphManagerBase):          :param filepath: path to new FPGA image          :param metadata: Dictionary of strings containing metadata          """ -        self.log.trace("Updating FPGA with image at {}" -                       .format(filepath)) +        self.log.trace("Updating FPGA with image at {} (metadata: `{}')" +                       .format(filepath, str(metadata)))          _, file_extension = os.path.splitext(filepath)          # Cut off the period from the file extension          file_extension = file_extension[1:].lower() @@ -944,7 +946,7 @@ class n310(PeriphManagerBase):              self.log.error("Invalid FPGA bitfile: {}"                             .format(filepath))              raise RuntimeError("Invalid N310 FPGA bitfile") -        # TODO: Implement reload procedure +        # RPC server will reload the periph manager after this.          return True      @no_rpc @@ -955,9 +957,31 @@ class n310(PeriphManagerBase):          :param metadata: Dictionary of strings containing metadata          """          dtsfile_path = self.updateable_components['dts']['path'] -        self.log.trace("Updating DTS with image at {} to {}" -                       .format(filepath, dtsfile_path) -                      ) +        self.log.trace("Updating DTS with image at %s to %s (metadata: %s)", +                       filepath, dtsfile_path, str(metadata))          shutil.copy(filepath, dtsfile_path) -        # TODO: Compile the new dts file into a usable dtbo +        dtbofile_path = self.updateable_components['dts']['output'] +        self.log.trace("Compiling to %s...", dtbofile_path) +        dtc_command = [ +            'dtc', +            '--symbols', +            '-O', 'dtb', +            '-q', # Suppress warnings +            '-o', +            dtbofile_path, +            dtsfile_path, +        ] +        self.log.trace("Executing command: `$ %s'", " ".join(dtc_command)) +        try: +            out = subprocess.check_output(dtc_command) +            if out.strip() != "": +                self.log.debug("`dtc' command output: \n%s", out) +        except OSError as ex: +            self.log.error("Could not execute `dtc' command. Binary probably "\ +                           "not installed. Please compile DTS by hand.") +            # No fatal error here, in order not to break the current workflow +        except subprocess.CalledProcessError as ex: +            self.log.error("Error executing `dtc': %s", str(ex)) +            return False          return True +  | 
