forked from M-Labs/artiq
Rename artiq_coreconfig → artiq_coretool; add log subcommand.
This commit is contained in:
parent
b2f720da67
commit
ad7cbc4394
|
@ -11,15 +11,26 @@ def to_bytes(string):
|
||||||
|
|
||||||
|
|
||||||
def get_argparser():
|
def get_argparser():
|
||||||
parser = argparse.ArgumentParser(description="ARTIQ core device config "
|
parser = argparse.ArgumentParser(description="ARTIQ core device "
|
||||||
"remote access")
|
"remote access tool")
|
||||||
|
parser.add_argument("--ddb", default="ddb.pyon",
|
||||||
|
help="device database file")
|
||||||
|
|
||||||
subparsers = parser.add_subparsers(dest="action")
|
subparsers = parser.add_subparsers(dest="action")
|
||||||
subparsers.required = True
|
subparsers.required = True
|
||||||
p_read = subparsers.add_parser("read",
|
|
||||||
|
# Log Read command
|
||||||
|
subparsers.add_parser("log",
|
||||||
|
help="read from the core device log ring buffer")
|
||||||
|
|
||||||
|
# Configuration Read command
|
||||||
|
p_read = subparsers.add_parser("cfg-read",
|
||||||
help="read key from core device config")
|
help="read key from core device config")
|
||||||
p_read.add_argument("key", type=to_bytes,
|
p_read.add_argument("key", type=to_bytes,
|
||||||
help="key to be read from core device config")
|
help="key to be read from core device config")
|
||||||
p_write = subparsers.add_parser("write",
|
|
||||||
|
# Configuration Write command
|
||||||
|
p_write = subparsers.add_parser("cfg-write",
|
||||||
help="write key-value records to core "
|
help="write key-value records to core "
|
||||||
"device config")
|
"device config")
|
||||||
p_write.add_argument("-s", "--string", nargs=2, action="append",
|
p_write.add_argument("-s", "--string", nargs=2, action="append",
|
||||||
|
@ -31,14 +42,17 @@ def get_argparser():
|
||||||
metavar=("KEY", "FILENAME"),
|
metavar=("KEY", "FILENAME"),
|
||||||
help="key and file whose content to be written to "
|
help="key and file whose content to be written to "
|
||||||
"core device config")
|
"core device config")
|
||||||
subparsers.add_parser("erase", help="erase core device config")
|
|
||||||
p_delete = subparsers.add_parser("delete",
|
# Configuration Delete command
|
||||||
|
p_delete = subparsers.add_parser("cfg-delete",
|
||||||
help="delete key from core device config")
|
help="delete key from core device config")
|
||||||
p_delete.add_argument("key", nargs=argparse.REMAINDER,
|
p_delete.add_argument("key", nargs=argparse.REMAINDER,
|
||||||
default=[], type=to_bytes,
|
default=[], type=to_bytes,
|
||||||
help="key to be deleted from core device config")
|
help="key to be deleted from core device config")
|
||||||
parser.add_argument("--ddb", default="ddb.pyon",
|
|
||||||
help="device database file")
|
# Configuration Erase command
|
||||||
|
subparsers.add_parser("cfg-erase", help="erase core device config")
|
||||||
|
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
|
|
||||||
|
@ -48,23 +62,25 @@ def main():
|
||||||
try:
|
try:
|
||||||
comm = dmgr.get("comm")
|
comm = dmgr.get("comm")
|
||||||
|
|
||||||
if args.action == "read":
|
if args.action == "log":
|
||||||
|
print(comm.get_log())
|
||||||
|
elif args.action == "cfg-read":
|
||||||
value = comm.flash_storage_read(args.key)
|
value = comm.flash_storage_read(args.key)
|
||||||
if not value:
|
if not value:
|
||||||
print("Key {} does not exist".format(args.key))
|
print("Key {} does not exist".format(args.key))
|
||||||
else:
|
else:
|
||||||
print(value)
|
print(value)
|
||||||
elif args.action == "erase":
|
elif args.action == "cfg-write":
|
||||||
comm.flash_storage_erase()
|
|
||||||
elif args.action == "delete":
|
|
||||||
for key in args.key:
|
|
||||||
comm.flash_storage_remove(key)
|
|
||||||
elif args.action == "write":
|
|
||||||
for key, value in args.string:
|
for key, value in args.string:
|
||||||
comm.flash_storage_write(key, value)
|
comm.flash_storage_write(key, value)
|
||||||
for key, filename in args.file:
|
for key, filename in args.file:
|
||||||
with open(filename, "rb") as fi:
|
with open(filename, "rb") as fi:
|
||||||
comm.flash_storage_write(key, fi.read())
|
comm.flash_storage_write(key, fi.read())
|
||||||
|
elif args.action == "cfg-delete":
|
||||||
|
for key in args.key:
|
||||||
|
comm.flash_storage_remove(key)
|
||||||
|
elif args.action == "cfg-erase":
|
||||||
|
comm.flash_storage_erase()
|
||||||
finally:
|
finally:
|
||||||
dmgr.close_devices()
|
dmgr.close_devices()
|
||||||
|
|
|
@ -11,4 +11,4 @@ This storage area is used to store the core device MAC address, IP address and e
|
||||||
The flash storage area is one sector (64 kB) large and is organized as a list
|
The flash storage area is one sector (64 kB) large and is organized as a list
|
||||||
of key-value records.
|
of key-value records.
|
||||||
|
|
||||||
This flash storage space can be accessed by using the artiq_coreconfig.py :ref:`core-device-configuration-tool`.
|
This flash storage space can be accessed by using the artiq_coretool.py :ref:`core-device-access-tool`.
|
||||||
|
|
|
@ -289,9 +289,9 @@ To flash the ``idle`` kernel:
|
||||||
|
|
||||||
* Write it into the core device configuration flash storage: ::
|
* Write it into the core device configuration flash storage: ::
|
||||||
|
|
||||||
$ artiq_coreconfig write -f idle_kernel idle.elf
|
$ artiq_coretool cfg-write -f idle_kernel idle.elf
|
||||||
|
|
||||||
.. note:: You can find more information about how to use the ``artiq_coreconfig`` tool on the :ref:`Utilities <core-device-configuration-tool>` page.
|
.. note:: You can find more information about how to use the ``artiq_coretool`` utility on the :ref:`Utilities <core-device-access-tool>` page.
|
||||||
|
|
||||||
Installing the host-side software
|
Installing the host-side software
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
@ -93,60 +93,62 @@ This tool compiles key/value pairs into a binary image suitable for flashing int
|
||||||
:ref: artiq.frontend.artiq_mkfs.get_argparser
|
:ref: artiq.frontend.artiq_mkfs.get_argparser
|
||||||
:prog: artiq_mkfs
|
:prog: artiq_mkfs
|
||||||
|
|
||||||
.. _core-device-configuration-tool:
|
.. _core-device-access-tool:
|
||||||
|
|
||||||
Core device configuration tool
|
Core device access tool
|
||||||
------------------------------
|
-----------------------
|
||||||
|
|
||||||
The artiq_coreconfig tool allows to read, write and remove key-value records from the :ref:`core-device-flash-storage`.
|
The artiq_coretool utility allows to perform maintenance on the core device:
|
||||||
|
|
||||||
It also allows to erase the entire flash storage area.
|
* read core device logs;
|
||||||
|
* as well as read, write and remove key-value records from the :ref:`core-device-flash-storage`;
|
||||||
|
* erase the entire flash storage area.
|
||||||
|
|
||||||
To use this tool, you need to specify a ``ddb.pyon`` DDB file which contains a ``comm`` device (an example is provided in ``artiq/examples/master/ddb.pyon``).
|
To use this tool, you need to specify a ``ddb.pyon`` DDB file which contains a ``comm`` device (an example is provided in ``artiq/examples/master/ddb.pyon``).
|
||||||
This tells the tool how to connect to the core device (via serial or via TCP) and with which parameters (baudrate, serial device, IP address, TCP port).
|
This tells the tool how to connect to the core device (via serial or via TCP) and with which parameters (baudrate, serial device, IP address, TCP port).
|
||||||
When not specified, the artiq_coreconfig tool will assume that there is a file named ``ddb.pyon`` in the current directory.
|
When not specified, the artiq_coretool utility will assume that there is a file named ``ddb.pyon`` in the current directory.
|
||||||
|
|
||||||
|
|
||||||
To read the record whose key is ``mac``::
|
To read the record whose key is ``mac``::
|
||||||
|
|
||||||
$ artiq_coreconfig read mac
|
$ artiq_coretool cfg-read mac
|
||||||
|
|
||||||
To write the value ``test_value`` in the key ``my_key``::
|
To write the value ``test_value`` in the key ``my_key``::
|
||||||
|
|
||||||
$ artiq_coreconfig write -s my_key test_value
|
$ artiq_coretool cfg-write -s my_key test_value
|
||||||
$ artiq_coreconfig read my_key
|
$ artiq_coretool cfg-read my_key
|
||||||
b'test_value'
|
b'test_value'
|
||||||
|
|
||||||
You can also write entire files in a record using the ``-f`` parameter. This is useful for instance to write the ``idle`` kernel in the flash storage::
|
You can also write entire files in a record using the ``-f`` parameter. This is useful for instance to write the ``idle`` kernel in the flash storage::
|
||||||
|
|
||||||
$ artiq_coreconfig write -f idle_kernel idle.elf
|
$ artiq_coretool cfg-write -f idle_kernel idle.elf
|
||||||
$ artiq_coreconfig read idle_kernel | head -c9
|
$ artiq_coretool cfg-read idle_kernel | head -c9
|
||||||
b'\x7fELF
|
b'\x7fELF
|
||||||
|
|
||||||
You can write several records at once::
|
You can write several records at once::
|
||||||
|
|
||||||
$ artiq_coreconfig write -s key1 value1 -f key2 filename -s key3 value3
|
$ artiq_coretool cfg-write -s key1 value1 -f key2 filename -s key3 value3
|
||||||
|
|
||||||
To remove the previously written key ``my_key``::
|
To remove the previously written key ``my_key``::
|
||||||
|
|
||||||
$ artiq_coreconfig delete my_key
|
$ artiq_coretool cfg-delete my_key
|
||||||
|
|
||||||
You can remove several keys at once::
|
You can remove several keys at once::
|
||||||
|
|
||||||
$ artiq_coreconfig delete key1 key2
|
$ artiq_coretool cfg-delete key1 key2
|
||||||
|
|
||||||
To erase the entire flash storage area::
|
To erase the entire flash storage area::
|
||||||
|
|
||||||
$ artiq_coreconfig erase
|
$ artiq_coretool cfg-erase
|
||||||
|
|
||||||
You don't need to remove a record in order to change its value, just overwrite
|
You don't need to remove a record in order to change its value, just overwrite
|
||||||
it::
|
it::
|
||||||
|
|
||||||
$ artiq_coreconfig write -s my_key some_value
|
$ artiq_coretool cfg-write -s my_key some_value
|
||||||
$ artiq_coreconfig write -s my_key some_other_value
|
$ artiq_coretool cfg-write -s my_key some_other_value
|
||||||
$ artiq_coreconfig read my_key
|
$ artiq_coretool cfg-read my_key
|
||||||
b'some_other_value'
|
b'some_other_value'
|
||||||
|
|
||||||
.. argparse::
|
.. argparse::
|
||||||
:ref: artiq.frontend.artiq_coreconfig.get_argparser
|
:ref: artiq.frontend.artiq_coretool.get_argparser
|
||||||
:prog: artiq_coreconfig
|
:prog: artiq_coretool
|
||||||
|
|
2
setup.py
2
setup.py
|
@ -26,7 +26,7 @@ requirements = [
|
||||||
scripts = [
|
scripts = [
|
||||||
"artiq_client=artiq.frontend.artiq_client:main",
|
"artiq_client=artiq.frontend.artiq_client:main",
|
||||||
"artiq_compile=artiq.frontend.artiq_compile:main",
|
"artiq_compile=artiq.frontend.artiq_compile:main",
|
||||||
"artiq_coreconfig=artiq.frontend.artiq_coreconfig:main",
|
"artiq_coretool=artiq.frontend.artiq_coretool:main",
|
||||||
"artiq_ctlmgr=artiq.frontend.artiq_ctlmgr:main",
|
"artiq_ctlmgr=artiq.frontend.artiq_ctlmgr:main",
|
||||||
"artiq_gui=artiq.frontend.artiq_gui:main",
|
"artiq_gui=artiq.frontend.artiq_gui:main",
|
||||||
"artiq_master=artiq.frontend.artiq_master:main",
|
"artiq_master=artiq.frontend.artiq_master:main",
|
||||||
|
|
Loading…
Reference in New Issue