add netboot tool

pull/1387/head
Sebastien Bourdeauducq 2019-10-30 21:24:51 +08:00
parent 462cf5967e
commit 88dbff46f4
2 changed files with 39 additions and 0 deletions

38
artiq/frontend/artiq_netboot.py Executable file
View File

@ -0,0 +1,38 @@
#!/usr/bin/env python3
import argparse
import socket
import struct
import os
import time
def main():
parser = argparse.ArgumentParser(description="ARTIQ netboot tool")
parser.add_argument("hostname", metavar="HOSTNAME",
help="hostname of the target board")
parser.add_argument("-f", "--firmware", nargs=1,
help="firmware to load")
parser.add_argument("-b", "--boot", action="store_true",
help="boot the device")
args = parser.parse_args()
sock = socket.create_connection((args.hostname, 4269))
try:
if args.firmware is not None:
with open(args.firmware[0], "rb") as input_file:
sock.sendall(b"F")
sock.sendall(struct.pack(">I", os.fstat(input_file.fileno()).st_size))
while True:
data = input_file.read(4096)
if not data:
break
sock.sendall(data)
sock.sendall(b"OK")
if args.boot:
sock.sendall(b"B")
finally:
sock.close()
if __name__ == "__main__":
main()

View File

@ -25,6 +25,7 @@ console_scripts = [
"artiq_coremgmt = artiq.frontend.artiq_coremgmt:main",
"artiq_ctlmgr = artiq.frontend.artiq_ctlmgr:main",
"artiq_ddb_template = artiq.frontend.artiq_ddb_template:main",
"artiq_netboot = artiq.frontend.artiq_netboot:main",
"artiq_devtool = artiq.frontend.artiq_devtool:main",
"artiq_influxdb = artiq.frontend.artiq_influxdb:main",
"artiq_influxdb_schedule = artiq.frontend.artiq_influxdb_schedule:main",