This questions is about writing a startup kernel into the satellite's startup_kernel config key.

While running a startup_kernel on the master crate only is possible, that waits until the satellite links comes online, and then executes all necessary initializations on all destinations, this takes some time. In this case around 12s. See log in the end.

It would be better for our case if each destination (master and its satellites) has their own startup_kernel they run when coming up.
As artiq_coremgmt in ARTIQ 8 cannot reach the satellites, my question is now:

Is there another way to write a startup/idle kernel directly to satellites?

System Info:

  • OS: NixOS
  • ARTIQ version: v8.8999+37a41b2
  • Master: Kasli SoC
  • 2x Satellite: Kasli SoC

Relevant master log below. Startup kernel starts at around 4s (marked with stars), but Satellite links comes online. Some core_log messages added in startup_kernel.py to see what happens.

                     __________   __
                    / ___/__  /  / /
                    \__ \  / /  / /
                   ___/ / / /__/ /___
                  /____/ /____/_____/

                 (C) 2020-2022 M-Labs

[     0.019990s]  INFO(szl): Simple Zynq Loader starting...
....
[     4.062785s]  INFO(runtime::comms): Loading startup kernel...
[     4.068548s]  INFO(runtime::rtio_mgt::drtio): [LINK#0] link RX became up, pinging
[     4.076067s]  INFO(runtime::comms): Starting startup kernel...
[     4.081815s]  INFO(ksupport::kernel::core1): kernel starting
[     4.111360s]  INFO(ksupport::kernel::api): kernel: Waiting on rtio destination 2..
[     5.087655s]  INFO(ksupport::kernel::api): kernel: Waiting on rtio destination 2..
[     6.087633s]  INFO(ksupport::kernel::api): kernel: Waiting on rtio destination 2..
[     7.087608s]  INFO(ksupport::kernel::api): kernel: Waiting on rtio destination 2..
[     8.087585s]  INFO(ksupport::kernel::api): kernel: Waiting on rtio destination 2..
[     9.087565s]  INFO(ksupport::kernel::api): kernel: Waiting on rtio destination 2..
[    10.087536s]  INFO(ksupport::kernel::api): kernel: Waiting on rtio destination 2..
[    10.644982s]  INFO(runtime::rtio_mgt::drtio): [LINK#0] remote replied after 33 packets
[    10.680238s]  INFO(runtime::rtio_mgt::drtio): [LINK#0] link initialization completed
[    10.687964s]  INFO(runtime::rtio_mgt::drtio): [LINK#1] link RX became up, pinging
[    11.087517s]  INFO(ksupport::kernel::api): kernel: Waiting on rtio destination 2..
[    11.648981s]  INFO(runtime::rtio_mgt::drtio): [LINK#1] remote replied after 4 packets
[    11.684140s]  INFO(runtime::rtio_mgt::drtio): [LINK#1] link initialization completed
[    11.691790s]  INFO(runtime::rtio_mgt::drtio): [DEST#0] destination is up
[    11.698510s]  INFO(runtime::rtio_mgt::drtio): [DEST#1] destination is up
[    11.705234s]  INFO(runtime::rtio_mgt::drtio): [DEST#1] buffer space is 128
[    11.712043s]  INFO(runtime::rtio_mgt::drtio): [DEST#2] destination is up
[    11.718775s]  INFO(runtime::rtio_mgt::drtio): [DEST#2] buffer space is 128
[    12.087491s]  INFO(ksupport::kernel::api): kernel: Submitting kernel to satellite 2
[    12.095392s]  INFO(ksupport::kernel::api): kernel: Now running satellite 2 DC voltage init.
[    12.103748s]  INFO(ksupport::kernel::api): kernel: Done running satellite 2 DC voltage init.
[    13.604827s]  INFO(ksupport::kernel::api): kernel: Initializing Fastino 0 on master
[    13.612395s]  INFO(ksupport::kernel::api): kernel: done with startup on all subkernels and master.
[    14.124918s]  INFO(ksupport::kernel::core1): kernel finished
[    14.130568s]  INFO(runtime::comms): Startup kernel finished!
[    16.136072s]  INFO(libboard_zynq::eth): eth: got Link { speed: S100, duplex: Full }

Since you are using Kasli-SoCs, the core device storage can also be written to just by extracting the SD card and writing to it manually. See details in e.g. the ARTIQ-Zynq README.

That said, the satellite firmware/gateware is not designed to run independent kernels that are not subkernels assigned from the master, and I don't think the startup_kernel key will necessarily do anything if written to. Someone else will probably know better.

    Thanks for the reply.

    architeuthis That said, the satellite firmware/gateware is not designed to run independent kernels that are not subkernels assigned from the master, and I don't think the startup_kernel key will necessarily do anything if written to.

    This is good to know. Any idea who to ask for this?

      jkiethe

      The satellites do not run startup_kernel or idle_kernel at this time.

      Hope that clears things up!