forked from M-Labs/artiq
1
0
Fork 0

Rename artiq_coreconfig → artiq_coretool; add log subcommand.

This commit is contained in:
whitequark 2015-08-02 16:35:49 +03:00
parent 62fdc75d2d
commit 8d0222c297
5 changed files with 57 additions and 39 deletions

View File

@ -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()

View File

@ -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`.

View File

@ -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
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

View File

@ -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

View File

@ -27,7 +27,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",