initial commit

master
Sebastien Bourdeauducq 2020-10-15 16:05:00 +08:00
commit 398b448a8c
3 changed files with 64 additions and 0 deletions

View File

50
artiq_netboot/artiq_netboot.py Executable file
View File

@ -0,0 +1,50 @@
#!/usr/bin/env python3
import argparse
import socket
import struct
import os
def send_file(sock, filename):
with open(filename, "rb") as input_file:
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")
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")
# Note that on softcore systems, the main gateware cannot be replaced
# with -g. This option is used for loading the RTM FPGA from the AMC
# on Sayma, and the PL on Zynq.
parser.add_argument("-g", "--gateware", nargs=1,
help="gateware 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:
sock.sendall(b"F")
send_file(sock, args.firmware[0])
if args.gateware is not None:
sock.sendall(b"G")
send_file(sock, args.gateware[0])
if args.boot:
sock.sendall(b"B")
finally:
sock.close()
if __name__ == "__main__":
main()

14
setup.py Executable file
View File

@ -0,0 +1,14 @@
#!/usr/bin/env python3
from setuptools import setup, find_packages
setup(
name="artiq_netboot",
author="M-Labs",
description="Simple netboot tool compatible with ARTIQ/MiSoC and SZL bootloaders",
license="LGPLv3+",
packages=find_packages(),
entry_points={
"console_scripts": ["artiq_client = artiq.frontend.artiq_client:main"],
}
)