Skip to content
Snippets Groups Projects
u_boot_console_exec_attach.py 2.38 KiB
Newer Older
  • Learn to ignore specific revisions
  • # Copyright (c) 2015 Stephen Warren
    # Copyright (c) 2015-2016, NVIDIA CORPORATION. All rights reserved.
    #
    # SPDX-License-Identifier: GPL-2.0
    
    # Logic to interact with U-Boot running on real hardware, typically via a
    # physical serial port.
    
    import sys
    from u_boot_spawn import Spawn
    from u_boot_console_base import ConsoleBase
    
    class ConsoleExecAttach(ConsoleBase):
    
        """Represents a physical connection to a U-Boot console, typically via a
    
        serial port. This implementation executes a sub-process to attach to the
        console, expecting that the stdin/out of the sub-process will be forwarded
        to/from the physical hardware. This approach isolates the test infra-
        structure from the user-/installation-specific details of how to
    
        communicate with, and the identity of, serial ports etc."""
    
    
        def __init__(self, log, config):
    
            """Initialize a U-Boot console connection.
    
    
            Args:
                log: A multiplexed_log.Logfile instance.
                config: A "configuration" object as defined in conftest.py.
    
            Returns:
                Nothing.
    
    
            # The max_fifo_fill value might need tweaking per-board/-SoC?
            # 1 would be safe anywhere, but is very slow (a pexpect issue?).
            # 16 is a common FIFO size.
            # HW flow control would mean this could be infinite.
            super(ConsoleExecAttach, self).__init__(log, config, max_fifo_fill=16)
    
    
    Stephen Warren's avatar
    Stephen Warren committed
            with self.log.section('flash'):
                self.log.action('Flashing U-Boot')
                cmd = ['u-boot-test-flash', config.board_type, config.board_identity]
                runner = self.log.get_runner(cmd[0], sys.stdout)
                runner.run(cmd)
                runner.close()
                self.log.status_pass('OK')
    
    
        def get_spawn(self):
    
            """Connect to a fresh U-Boot instance.
    
    
            The target board is reset, so that U-Boot begins running from scratch.
    
            Args:
                None.
    
            Returns:
                A u_boot_spawn.Spawn object that is attached to U-Boot.
    
    
            args = [self.config.board_type, self.config.board_identity]
            s = Spawn(['u-boot-test-console'] + args)
    
    
            try:
                self.log.action('Resetting board')
                cmd = ['u-boot-test-reset'] + args
                runner = self.log.get_runner(cmd[0], sys.stdout)
                runner.run(cmd)
                runner.close()
            except:
                s.close()
                raise