]>
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): | |
e8debf39 SW |
13 | """Represents a connection to a sandbox U-Boot console, executed as a sub- |
14 | process.""" | |
d201506c SW |
15 | |
16 | def __init__(self, log, config): | |
e8debf39 | 17 | """Initialize a U-Boot console connection. |
d201506c SW |
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. | |
e8debf39 | 25 | """ |
d201506c SW |
26 | |
27 | super(ConsoleSandbox, self).__init__(log, config, max_fifo_fill=1024) | |
28 | ||
29 | def get_spawn(self): | |
e8debf39 | 30 | """Connect to a fresh U-Boot instance. |
d201506c SW |
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. | |
e8debf39 | 40 | """ |
d201506c SW |
41 | |
42 | return Spawn([self.config.build_dir + '/u-boot']) | |
43 | ||
44 | def kill(self, sig): | |
e8debf39 | 45 | """Send a specific Unix signal to the sandbox process. |
d201506c SW |
46 | |
47 | Args: | |
48 | sig: The Unix signal to send to the process. | |
49 | ||
50 | Returns: | |
51 | Nothing. | |
e8debf39 | 52 | """ |
d201506c | 53 | |
d201506c SW |
54 | self.log.action('kill %d' % sig) |
55 | self.p.kill(sig) | |
56 | ||
57 | def validate_exited(self): | |
e8debf39 | 58 | """Determine whether the sandbox process has exited. |
d201506c SW |
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. | |
e8debf39 | 68 | """ |
d201506c SW |
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 |