Matrix 320 CPU Bootup Sequence

The Matrix CPU card performs the following sequence at bootup:
  1. Jumps to an entry point in EPROM.
  2. The EPROM code copies the kernel image and ISFF data acquisition code from EPROM to system RAM.
  3. Jumps to an entry point in RAM which initializes the hardware and configures the network, using the boot parameters that are stored in non-volatile RAM.
  4. Executes the usrStartup procedure, which performs the remaining steps.
  5. Fetch the data acquistion configuration from the  adamserver  process on the base system
  6. Initialize the Datel analog-to-digital card,
  7. Establish a socket connection to the ingest process on the base system
  8. Start the data acquisition processes.

Matrix Bootup Output

On bootup, the Matrix CPU card should send the following messages to the console port. If problems are encountered, connect a PC with communications software, configured for 9600 baud, no parity, 8 data bits to the console port on the front of the adam. You will need a special cable between the round 9 pin connector on the adam and the serial port on a PC.
Annotations describing the sequence are shown in red, on the right.

At this point, the Matrix is executing from RAM.
Initializing backplane net with anchor at 0x600... done.
Backplane anchor at 0x600... Attaching network interface sm0... done.
Creating proxy network:
Attaching network interface lo0... done.
NFS not included.

Adding 2461 symbols for standalone.

      ]]]]]]]]]]]  ]]]]     ]]]]]]]]]]       ]]              ]]]]         (R)
 ]     ]]]]]]]]]  ]]]]]]     ]]]]]]]]       ]]               ]]]]
 ]]     ]]]]]]]  ]]]]]]]]     ]]]]]] ]     ]]                ]]]]
 ]]]     ]]]]] ]    ]]]  ]     ]]]] ]]]   ]]]]]]]]]  ]]]] ]] ]]]]  ]]   ]]]]]
 ]]]]     ]]]  ]]    ]  ]]]     ]] ]]]]] ]]]]]]   ]] ]]]]]]] ]]]] ]]   ]]]]
 ]]]]]     ]  ]]]]     ]]]]]      ]]]]]]]] ]]]]   ]] ]]]]    ]]]]]]]    ]]]]
 ]]]]]]      ]]]]]     ]]]]]]    ]  ]]]]]  ]]]]   ]] ]]]]    ]]]]]]]]    ]]]]
 ]]]]]]]    ]]]]]  ]    ]]]]]]  ]    ]]]   ]]]]   ]] ]]]]    ]]]] ]]]]    ]]]]
 ]]]]]]]]  ]]]]]  ]]]    ]]]]]]]      ]     ]]]]]]]  ]]]]    ]]]]  ]]]] ]]]]]
 ]]]]]]]]]]]]]]]]]]]]]]]]]]]]]       Development System
 ]]]]]]]]]]]]]]]]]]]]]]]]]]]       VxWorks version 5.1.1
 ]]]]]]]]]]]]]]]]]]]]]]]]]]       KERNEL: WIND version 2.4
 ]]]]]]]]]]]]]]]]]]]]]]]]]       Copyright Wind River Systems, Inc., 1984-1993

                               CPU: Matrix MD-CPU320 BETA.  Processor #0.
                              Memory Size: 0x200000.  BSP version 1.0.

start of usrStartup routine
usrStartup ...
calls adamserver  hosts
calls adamserver  rdate
starts adamstatus RPC process
-> 0x1c2e78 (startup): Tick_Init -> SYSTEM_TT = 0
calls adamserver rgmtsecs
0x1c2e78 (startup): gmt_tt_set entered, SYSTEM_TT=0x14
0x1c2e78 (startup): gmt_tt_set finished
initializes Datel A2D card
Initializing DATEL DVME-601...
0x1c2e78 (startup): ** Received DATEL DVME-601 EXECUTIVE OFF Acknowledge **
0x1c2e78 (startup): ** Received DATEL DVME-601 EXECUTIVE ON Acknowledge **0x1c2e78
downloads adats/datel2.s02
(startup): ** DATEL DVME-601 Subroutine Module Downloader: datel/datel2.s02
0x1c2e78 (startup): ** DATEL DVME-601 Module Download ACK0x1c2e78 (startup): ** DATEL DVME-601 Module Download Completed. s02 size=15007 bytes
** DATEL DVME-601 Send function block to run program
** DATEL DVME-601 Execute downloaded program

** DATEL DVME-601 initialization done
0x1c2e78 (startup): HAND_COMMAND = 80
0x1c2e78 (startup): AdPend -> DATEL not ready to suspend
0x1c2e78 (startup): HAND_COMMAND = 80

calls adamserver  getanalogcfg
calls adamserver  get_ttl_output_cfg
calls adamserver  configint  to
get values for "datel_base_chan" and
0x1c2e78 (startup): Datel_Config> DOWNLOADING CONFIGURATION
00 00 00 20 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
0x1c2e78 (startup): Datel_Config> Sending command to datel
0x1c2e78 (startup): Datel config loaded
0x1c2e78 (startup): Datel_Config> 1 channels set active, buffer size is 16
0x1c2e78 (startup):
Datel_InstHandler-> initialize done
establishes socket connection to ingest process
sync> Server's address is
0x1c2e78 (startup): <134> adatsSock SO_SNDBUF len=4096

0x1c2e78 (startup): <134> adatsSock SO_SNDBUF len=4096

sync> Connected...

waits for socket connection from Ironics processor
starts analog acquisition
0x1c2e78 (startup): HAND_COMMAND = 20
0x1c2e78 (startup): AdStart -> START A/D
0x1af0f8 (sync): socket link to serial card established
socket connection with Ironics processor established
prints out stack table of running tasks
  NAME        ENTRY        TID     SIZE   CUR  HIGH  MARGIN
------------ ------------ -------- ----- ----- ----- ------
tExcTask     _excTask     1fa570    7988   152   220   7768
tLogTask     _logTask     1f7c70    4988   156   892   4096
tRlogind     _rlogind     1c8e70    4988   508   716   4272
startup      _usrStartup  1c2e78    6324  3280  4048   2276
tNetTask     _netTask     1edae4    9988    88   748   9240
gmt_tt_set   _gmt_tt_set  1acd08    1988   136  1188    800
sync         _sync        1af0f8    3992  1544  1852   2140
fast_write   _fast_write  1adfc8    1988   156   488   1500
fast_buffer  _fast_buffer 1ad668    1988   232   884   1104
tPortmapd    _portmapd    1c7958    4988   308  2612   2376
tShell       _shell       1c5718    9324   804   924   8400
status       _status      1ac3a8    2992   100   808   2184
adamstatus   _adamstatus  1c0d68    2488   288  1572    916
INTERRUPT                           1000     0   384    616
0x1c2e78 (startup): <134> ragwort booted
usrStartup done.
Successful boot!

Datel Code

The data acquisition code for the Datel analog-to-digital processor is stored in a file called  datel2.s02.  This is an ASCII file of machine code encoded into Motorola S records.  This file is copied from the base system to the adam using the UNIX remote shell or FTP. See the User boot parameter. The datel2.s02 file then must exist in the  adats/datel subdirectory of the  home directory for that user, and the user must have (at least) read access to the file.

Matrix Boot Parameters

Several parameters are stored in  non-volatile RAM on the Matrix card. These include the hostname and IP addresses of the adam (known in the VxWorks operating system as the "target"), and the hostname and IP address of the base server (known in VxWorks as the "host").

Displaying Boot Parameters

To dislay the current value of the boot parameters, do "bootParamsShow(0x700)" at the VxWorks prompt (->):

-> bootParamsShow(0x700)

boot device          : med                                      Name of network device, med or ppp
processor number     : 0                                           Always 0
host name            : aster                                 Hostname of base server
inet on ethernet (e) :     IP address & netmask of Matrix ethernet card
inet on backplane (b):     IP address & netmask of Matrix on backplane network
host inet (h)        :         IP address of base server
user (u)             : aster                                 Username of aster account on base server
flags (f)            : 0x108                                 Boot flags
target name (tn)     : ragwort                            Hostname of adam

value = 1 = 0x1

Other parameters may be displayed, but are not used in the present version of software on the adams.

Changing Boot Parameters

To change the boot parameters, use the "bootChange" command.  The parameters are saved in non-volatile, battery-backed RAM on the Matrix, so
they will be retained after power down.

-> bootChange

'.' = clear field;  '-' = go to previous field;  ^D = quit

boot device          : med
processor number     : 0
host name            : aster
file name            :
inet on ethernet (e) :>
inet on backplane (b):
host inet (h)        :
gateway inet (g)     :
user (u)             : aster
ftp password (pw) (blank = use rsh):
flags (f)            : 0x108
target name (tn)     : ragwort
startup script (s)   :
other (o)            :

value = 0 = 0x0

As you are prompted for the value of each parameter, type in its value, followed by a carriage return. Use back space to correct typos. To clear an unused parameter, enter a  period.  Do a "bootParamsShow(0x700)" afterwards to verify.

If your network uses a non-default netmask, you can specifiy the netmask with the  "inet on ethernet" and "inet on backplane" parameters, by following the IP address by a colon and then the netmask in hex notation.  For example to set the netmask to ffffff00 (octal: for an adam on the NCAR network, do:

inet on ethernet (e) :
inet on backplane (b):

Set the netmask for the target only, do not specify it with the "host inet (h)" parameter.

After setting the boot parameters, reboot the adam.

Displaying Boot Parameters in non-volatile RAM

The bootChange command copies the boot parameters to non-volatile SRAM, at address 0xffe20900. These can be displayed with the command

-> bootParamsShow(0xffe20900)

Once, displaying the boot parameters in NV SRAM seemed to help a sick adam. The boot sequence was failing because the boot parameters were jibberish, even though I had run bootChange several times. After displaying the bad parameters in SRAM, then running bootChange, the problem cleared up.

User Boot Parameter

The processes on the adam will run under the user name specified by the"user (u)" boot parameter, and it is the user name for processes that are run from the console port on the Matrix or Ironics. The adam fetches the datel2.s02 file from the base system using either FTP or the UNIX remote shell, using that user name, so a user account with a name specified by the "user (u)" boot parameter must exist on the base server.

If the "ftp passwd (pw)" parameter is non-blank, the adam will try to fetch the file with FTP.

If the ftp passwd parameter is a blank, the adam will fetch the file using a remote shell and the base system must provide remote shell access, without a password, to the user account on the adam. Create a ".rhosts" file in the home directory of the user on the base system. Enter the names of the adams needing remote shell access in the .rhosts file, one adam name per line.

To test whether the remote shell permissions are correct, try:

> rlogin "basename"

from the VxWorks shell prompt, where basename is the host name of the base system.  If the remote shell permissions are
correct, you will not be prompted for a password. Do logout to logout.

Neither the FTP or remote shell methods offer much security. To improve security, one method is to run tcp_wrappers on the base system, denying FTP or remote shell access to outside hosts, but listing the adam names in the /etc/hosts.allow file.  Get the advice of a system administrator about tcp_wrappers and security.

Displaying IV3234 Ironics Boot Parameters from Matrix

The 16 port IV3234 Ironics' memory is accessible from the Matrix card at address 0x20400000.  Therefore you can also display the Ironic's boot parameters from the Matrix (but you can't change them from the Matrix):

-> bootParamsShow(0x20400700)

Displaying IV1624 Ironics Boot Parameters from Matrix

The 8 port IV1624 Ironics' memory is accessible from the Matrix card at address 0xf0a00000.  To display the Ironic's boot parameters from the Matrix:

-> bootParamsShow(0xf0a00700)

Remote Login

The Matrix and Ironics cards accept remote logins via rlogin, not telnet. "aster" is the only account enabled for remote logins on the Matrix or Ironics cards, so enter aster when prompted for a VxWorks login: The version of VxWorks on the VME cards ignores any -l user parameter on incoming rlogins.

If you then wish to login into other systems as another user, do iam "newname" at the VxWorks prompt to change your user name. This would be useful, for example, if the user boot parameter is set to something other than "aster", and you wish to test remote logins to other systems from an rlogin session on the adam.