u_boot_console_exec_attach.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. # Copyright (c) 2015 Stephen Warren
  2. # Copyright (c) 2015-2016, NVIDIA CORPORATION. All rights reserved.
  3. #
  4. # SPDX-License-Identifier: GPL-2.0
  5. # Logic to interact with U-Boot running on real hardware, typically via a
  6. # physical serial port.
  7. import sys
  8. from u_boot_spawn import Spawn
  9. from u_boot_console_base import ConsoleBase
  10. class ConsoleExecAttach(ConsoleBase):
  11. '''Represents a physical connection to a U-Boot console, typically via a
  12. serial port. This implementation executes a sub-process to attach to the
  13. console, expecting that the stdin/out of the sub-process will be forwarded
  14. to/from the physical hardware. This approach isolates the test infra-
  15. structure from the user-/installation-specific details of how to
  16. communicate with, and the identity of, serial ports etc.'''
  17. def __init__(self, log, config):
  18. '''Initialize a U-Boot console connection.
  19. Args:
  20. log: A multiplexed_log.Logfile instance.
  21. config: A "configuration" object as defined in conftest.py.
  22. Returns:
  23. Nothing.
  24. '''
  25. # The max_fifo_fill value might need tweaking per-board/-SoC?
  26. # 1 would be safe anywhere, but is very slow (a pexpect issue?).
  27. # 16 is a common FIFO size.
  28. # HW flow control would mean this could be infinite.
  29. super(ConsoleExecAttach, self).__init__(log, config, max_fifo_fill=16)
  30. self.log.action('Flashing U-Boot')
  31. cmd = ['u-boot-test-flash', config.board_type, config.board_identity]
  32. runner = self.log.get_runner(cmd[0], sys.stdout)
  33. runner.run(cmd)
  34. runner.close()
  35. def get_spawn(self):
  36. '''Connect to a fresh U-Boot instance.
  37. The target board is reset, so that U-Boot begins running from scratch.
  38. Args:
  39. None.
  40. Returns:
  41. A u_boot_spawn.Spawn object that is attached to U-Boot.
  42. '''
  43. args = [self.config.board_type, self.config.board_identity]
  44. s = Spawn(['u-boot-test-console'] + args)
  45. self.log.action('Resetting board')
  46. cmd = ['u-boot-test-reset'] + args
  47. runner = self.log.get_runner(cmd[0], sys.stdout)
  48. runner.run(cmd)
  49. runner.close()
  50. return s