]>
Commit | Line | Data |
---|---|---|
d201506c SW |
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 | ||
6 | # Logic to interact with the sandbox port of U-Boot, running as a sub-process. | |
7 | ||
8 | import time | |
9 | from u_boot_spawn import Spawn | |
10 | from u_boot_console_base import ConsoleBase | |
11 | ||
12 | class ConsoleSandbox(ConsoleBase): | |
13 | '''Represents a connection to a sandbox U-Boot console, executed as a sub- | |
14 | process.''' | |
15 | ||
16 | def __init__(self, log, config): | |
17 | '''Initialize a U-Boot console connection. | |
18 | ||
19 | Args: | |
20 | log: A multiplexed_log.Logfile instance. | |
21 | config: A "configuration" object as defined in conftest.py. | |
22 | ||
23 | Returns: | |
24 | Nothing. | |
25 | ''' | |
26 | ||
27 | super(ConsoleSandbox, self).__init__(log, config, max_fifo_fill=1024) | |
28 | ||
29 | def get_spawn(self): | |
30 | '''Connect to a fresh U-Boot instance. | |
31 | ||
32 | A new sandbox process is created, so that U-Boot begins running from | |
33 | scratch. | |
34 | ||
35 | Args: | |
36 | None. | |
37 | ||
38 | Returns: | |
39 | A u_boot_spawn.Spawn object that is attached to U-Boot. | |
40 | ''' | |
41 | ||
42 | return Spawn([self.config.build_dir + '/u-boot']) | |
43 | ||
44 | def kill(self, sig): | |
45 | '''Send a specific Unix signal to the sandbox process. | |
46 | ||
47 | Args: | |
48 | sig: The Unix signal to send to the process. | |
49 | ||
50 | Returns: | |
51 | Nothing. | |
52 | ''' | |
53 | ||
d201506c SW |
54 | self.log.action('kill %d' % sig) |
55 | self.p.kill(sig) | |
56 | ||
57 | def validate_exited(self): | |
58 | '''Determine whether the sandbox process has exited. | |
59 | ||
60 | If required, this function waits a reasonable time for the process to | |
61 | exit. | |
62 | ||
63 | Args: | |
64 | None. | |
65 | ||
66 | Returns: | |
67 | Boolean indicating whether the process has exited. | |
68 | ''' | |
69 | ||
70 | p = self.p | |
71 | self.p = None | |
72 | for i in xrange(100): | |
73 | ret = not p.isalive() | |
74 | if ret: | |
75 | break | |
76 | time.sleep(0.1) | |
77 | p.close() | |
78 | return ret |