Installation of PSI/Eiger embedded server and firmwares ======================================================= Requirements ------------ The following elements are required in order to perform an upgrade of the PSI/Eiger embedded server and firmwares (FWs): * The detector names are expected to be in registered in the *hosts* name service (*/etc/hosts*, DNS), and reachable through the IPv4 layer. * The *${EIGER_HOME}/eiger_setup.sh* is installed and sourced in *opid00* account, defining *EIGER_CONFIG*, *EIGER_MODULES* * The *GitLab Hardware/sls_detectors* project is expected to be installed in *${EIGER_HOME}/esrf/sls_detectors*. The different Git submodules are recursiverly cloned, so *Lima/camera/slsdetector/slsDetectorPackage* is available. Please refer to :doc:`installation` in order to fulfill these requirements. SSH keys -------- Backup the current PSI/Eiger-500k modules Linux root account SSH *authorized_keys* and check that the *opid00@lisgeiger1* SSH public key is included: :: lisgeiger1:~ % \ EIGER_MODULE_TOP=$(echo ${EIGER_MODULES} | cut -f1 -d" ") cat ~/.ssh/id_dsa.pub echo if [ $(echo ${EIGER_MODULES} | wc -w) -eq 2 ]; then det_name="500k$(echo ${EIGER_MODULES} | sed 's/ \?beb/_/g')" else det_name="2m" fi; base_dir="${HOME}/eiger/psi_eiger_${det_name}" this_dir="${base_dir}/$(date +%Y-%m-%d-%H%M)" mkdir -p ${this_dir} && cd ${this_dir} for m in ${EIGER_MODULES}; do ssh -x root@${m} cat .ssh/authorized_keys > ssh_authorized_keys_${m} done cat ssh_authorized_keys_${EIGER_MODULE_TOP} ssh-dss AAAAB3NzaC1kc3MAAACBALGVR0qC2i/HgaJl4fuiwmOVrq46Bz3bs+o3/jdw/dqMaPjx35Ha shyC4zS+2wHyZVSjwTMIbVT8LPsNMGxL40ZxqWaAUyzn0XnjJMe3XT7h+yyx+iLUXvyCK489PAwT0srE iWbGNeQTgEYiwX+jqezQTiwss2sgypOrrwIrGrZBAAAAFQDjOUdgHjbCc1UMW37Zu+7b/AV1cQAAAIAu tumVMJlCqWv30RRscEVMxGuv7UYanyMSnp+fI6pIfAKfcme/tGGKYiiF6biHVmDKcL+tnYloZvuDvfM+ T7k1vMIf9UcX9ZglJu+6B1N7ZRV8wO9ZKCHcTeVkNqbTu7clhsjjEjwO/EWQrPv7aZPSu8hcJr/dFfP3 AskvvG04rgAAAIEAjS61ZiP1iGoP0UhJCf4uHDnGra41mvMyqGBFwji93XON49UmVYXVFfYcWeoDzpaH JQguFttMCNduiXmZfDYITld+86c9aWCR6g7re977ElFTbutWe+isu/ZFINXOvDEHmBUKd7++4lGDCjsM NOQQmG/Ftsi4jE2iWBaI91oyTQI= opid00@lisgeiger1 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAxHKsWjHzIsIt0Pt1lkZA9Px5x0v6e2ZzCh+AEiQz1nk0 l7kU6K0IzKvYbAj6HnQB3/epYHz6SBRrpsMQcFPHgtQIKlTzeKHNqS6pHBKxKR77jGGq70i7SWZsSBXP 1/8QxUhV9CNbFJKAkEmvXa5ZO1fKgtiXYXR26X72foOKwZzOtPzOqz2IQ6icxqTMELK1H4R+s0Rvuurl lDibdzo5g3xuV9bu/HLYt19zUgIR0KoTzpZEyPSiNwNizUy5oqXiNL4ZdcCjsSwQ1lYDwbzrg5brQA8W onqu5dtK4/LSh97jJ7u2V7LCUPr1KZj7OUy1FOHg2MUUjJbJApAMAffXgQ== root@pc6698 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA2cWXxdmZHHfBq0n7iE4aNB6iyHWIUSA1EbLbuCfGhSog cn+uTeRXdAQfBvHXAp2JbR+mX30ftMzq28TfWlMKPWvKgcEwh05WbhL9swRIj7+FTryxnZG+LDDpIAUg kaGEmrX/9gtQ0wBwsbWPPPuHP6rlvSfoX2QPl6DSEt4AJqKf2QJNfm1SdqpQZOK5bG77VcEt3GRob9Mu d4j9Y+Tb8CWnruDQl6+Z66ccWwjCI5mlhKkjzgkaJytURcvEP4y+htqpeW6maoXJmvtS900+SCv1dqTe lbiSd2hRMx2ElZ7WCdaspHwkxwYyDtaPyHrGYuunDUhLFk+nDBjCUcuFgQ== theidel@pc6698 ssh-dss AAAAB3NzaC1kc3MAAACBALeM8Rw5A/3q3oWqP8OuVU1H12nL+UxQiHlpQj/rQ1C02+O1x3SZ M32gJZo99s8uFb2YTlbzxYDroLdxw5Z1fM22Dsf9vUDcNcAWfXQK0JV2LIsNLJKC/s3/O51GwvtgxtC4 wMgG3MMe5kmyI34tJSuVMggcnBepssvH6oWGVNbJAAAAFQCbtQeAikwu20rUfn7eEiCOP/0p9wAAAIBE hXhaxl5Ht29VldHfYMMAjY3V1+d2XbleLl7ixOdQLcy2igssBR4w0QRz4V6p0ePCiIhzqiWf5Hvgc1u/ TBK0Rj9STI1qU1s8A6x/qdNDTbgebSeO6CNGqDTvhIdMgX7dUhgtwx4lzgbKtOtYSZ1XkMr1omwMAK9n K7xFCNu4IAAAAIBS0Is0ryjPYiOuEnWptKy9FiBYv2edS3vJ3Ln74HjzJ8FW3jT76xwEiBcaBtvXZ5kM VLyDtR3LR63i11Nnrg7nNJa43S4sng9dbBnO3f5/7Ylv2ku/vhATtMouVRn8c+xP1CMEYpGhSIw+OzrG xs33FGKr0xkL2yofwrDtHNRA/Q== theidel@pc6698 ssh-dss AAAAB3NzaC1kc3MAAACBALGVR0qC2i/HgaJl4fuiwmOVrq46Bz3bs+o3/jdw/dqMaPjx35Ha shyC4zS+2wHyZVSjwTMIbVT8LPsNMGxL40ZxqWaAUyzn0XnjJMe3XT7h+yyx+iLUXvyCK489PAwT0srE iWbGNeQTgEYiwX+jqezQTiwss2sgypOrrwIrGrZBAAAAFQDjOUdgHjbCc1UMW37Zu+7b/AV1cQAAAIAu tumVMJlCqWv30RRscEVMxGuv7UYanyMSnp+fI6pIfAKfcme/tGGKYiiF6biHVmDKcL+tnYloZvuDvfM+ T7k1vMIf9UcX9ZglJu+6B1N7ZRV8wO9ZKCHcTeVkNqbTu7clhsjjEjwO/EWQrPv7aZPSu8hcJr/dFfP3 AskvvG04rgAAAIEAjS61ZiP1iGoP0UhJCf4uHDnGra41mvMyqGBFwji93XON49UmVYXVFfYcWeoDzpaH JQguFttMCNduiXmZfDYITld+86c9aWCR6g7re977ElFTbutWe+isu/ZFINXOvDEHmBUKd7++4lGDCjsM NOQQmG/Ftsi4jE2iWBaI91oyTQI= opid00@lisgeiger1 Check that all the keys are identical: :: lisgeiger1:~/eiger/psi_eiger_500k_024_025/2018-04-01-1828 % \ md5sum ssh_authorized_keys_beb* 1c183bdaa3a2f27029fca84b9cb3b857 ssh_authorized_keys_beb024 1c183bdaa3a2f27029fca84b9cb3b857 ssh_authorized_keys_beb025 In case the *opid00@lisgeiger1* public key is not included (not the case before), add them in order to open SSH sessions automatically on the detector modules: :: lisgeiger1:~/eiger/psi_eiger_500k_024_025/2018-04-01-1828 % \ for m in ${EIGER_MODULES}; do ssh -x root@${m} sh -c '"cat >> .ssh/authorized_keys"' < ~/.ssh/id_dsa.pub done Also check that the SSH public host keys are identical (same Linux image): :: lisgeiger1:~/eiger/psi_eiger_500k_024_025/2018-04-01-1828 % \ for m in ${EIGER_MODULES}; do ssh-keygen -f ~/.ssh/known_hosts -F ${m} -l done # Host beb024 found: line 82 type RSA 1040 21:78:5d:39:d5:cc:92:7a:42:f8:4d:69:38:3b:40:40 |1|m9PYbOqjp0h4qI8tq9u9H8x7pKQ=|wXZou5Y2oMKiULF5ZOuBjV0U7oo= (RSA) # Host beb025 found: line 84 type RSA 1040 21:78:5d:39:d5:cc:92:7a:42:f8:4d:69:38:3b:40:40 |1|Hp2vpbDpXlxTjMSfxo+n+r3B+ZQ=|LaI693N3AKzUER5lgBOOwReHOpI= (RSA) *eigerDetectorServer* --------------------- Before transferring the new version of the *eigerDetectorServer*, keep track of the current versions stored on the modules: :: lisgeiger1:~/eiger/psi_eiger_500k_024_025/2018-04-01-1828 % \ server_dir="executables" server_name="eigerDetectorServer" server="${server_dir}/${server_name}" server_str=$(echo ${server} | sed 's:/:_:g') full_server="/home/root/${server}" for m in ${EIGER_MODULES}; do ssh -x root@${m} 'ls -l '${server}'*' \ > ls_${server_str}_${m}.out done cat ls_${server_str}_${EIGER_MODULE_TOP}.out echo for m in ${EIGER_MODULES}; do ssh -x root@${m} 'md5sum '${server}'*' \ > md5sum_${server_str}_${m}.out done cat md5sum_${server_str}_${EIGER_MODULE_TOP}.out echo md5sum md5sum_${server_str}_beb* -rwxr-xr-x 1 root root 280601 Jan 1 01:15 executables/eigerDetectorServer -rwxr-xr-x 1 root root 277442 Aug 26 2016 executables/eigerDetectorServer_bkp -rwxr-xr-x 1 root root 277442 Aug 26 2016 executables/eigerDetectorServerv2.0.5.14.3 -rwxr-xr-x 1 root root 280601 Jan 1 01:14 executables/eigerDetectorServerv2.3.0.16.2 4fca193db64ed991da785043e7769082 executables/eigerDetectorServer e8a39956bbcb4aac62f109188e8ddbb2 executables/eigerDetectorServer_bkp e8a39956bbcb4aac62f109188e8ddbb2 executables/eigerDetectorServerv2.0.5.14.3 4fca193db64ed991da785043e7769082 executables/eigerDetectorServerv2.3.0.16.2 754a871d0608c28aa7544230ca728f86 md5sum_executables_eigerDetectorServer_beb024.out 754a871d0608c28aa7544230ca728f86 md5sum_executables_eigerDetectorServer_beb025.out Kill the running servers and disable the automatic startup: :: lisgeiger1:~/eiger/psi_eiger_500k_024_025/2018-04-01-1828 % \ for m in ${EIGER_MODULES}; do ssh -x root@${m} killall ${server_name} done for m in ${EIGER_MODULES}; do ssh -x root@${m} sed -i '"s:^#\?\('${full_server}'\).*$:#\1 \&:"' \ /etc/init.d/board_com.sh done Force a filesystem *sync* on each host to make the changes persistent, just before power-cycling: :: lisgeiger1:~/eiger/psi_eiger_500k_024_025/2018-04-01-1828 % \ for m in ${EIGER_MODULES}; do ssh -x root@${m} sync done Power-cycle the detector and check that no *eigerDetectorServer* is running: :: lisgeiger1:~/eiger/psi_eiger_500k_024_025/2018-04-01-1828 % \ for m in ${EIGER_MODULES}; do \ ssh -x root@${m} 'ps -ef | grep '${server}' | grep -v grep'; \ done Backup the current version, and transfer the new version: :: lisgeiger1:~/eiger/psi_eiger_500k_024_025/2018-04-01-1828 % \ for m in ${EIGER_MODULES}; do ssh -x root@${m} 'mv '${server}' '${server}'_bkp' done SLS_DETECTOR_PACKAGE=${LIMA_DIR}/camera/slsdetector/slsDetectorPackage new_servers=$(cd ${SLS_DETECTOR_PACKAGE} && find -name ${server_name}v\*) (cd ${SLS_DETECTOR_PACKAGE} && md5sum ${new_servers}) echo new_server=${SLS_DETECTOR_PACKAGE}/$(echo "${new_servers}" | head -n 1) for m in ${EIGER_MODULES}; do scp ${new_server} root@${m}:${server_dir} done for m in ${EIGER_MODULES}; do ssh -x root@${m} "cp ${server_dir}/$(basename ${new_server}) ${server}" done 50ef053f1ddd0b49314479a558c9c330 ./slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv3.1.1.16.0 50ef053f1ddd0b49314479a558c9c330 ./serverBin/eigerDetectorServerv3.1.1.16.0 eigerDetectorServerv3.1.1.16.0 100% 286KB 286.2KB/s 00:00 eigerDetectorServerv3.1.1.16.0 100% 286KB 286.2KB/s 00:00 Check that all is as expected: :: lisgeiger1:~/eiger/psi_eiger_500k_024_025/2018-04-01-1828 % \ cd this_dir="${base_dir}/$(date +%Y-%m-%d-%H%M)" mkdir -p ${this_dir} && cd ${this_dir} for m in ${EIGER_MODULES}; do ssh -x root@${m} 'ls -l '${server}'*' \ > ls_${server_str}_${m}.out done cat ls_${server_str}_${EIGER_MODULE_TOP}.out echo for m in ${EIGER_MODULES}; do ssh -x root@${m} 'md5sum '${server}'*' \ > md5sum_${server_str}_${m}.out done cat md5sum_${server_str}_${EIGER_MODULE_TOP}.out echo md5sum md5sum_${server_str}_beb* -rwxr-xr-x 1 root root 293085 Jan 10 02:35 executables/eigerDetectorServer -rwxr-xr-x 1 root root 280601 Jan 1 01:15 executables/eigerDetectorServer_bkp -rwxr-xr-x 1 root root 277442 Aug 26 2016 executables/eigerDetectorServerv2.0.5.14.3 -rwxr-xr-x 1 root root 280601 Jan 1 01:14 executables/eigerDetectorServerv2.3.0.16.2 -rwxr-xr-x 1 root root 293085 Jan 10 02:34 executables/eigerDetectorServerv3.1.1.16.0 50ef053f1ddd0b49314479a558c9c330 executables/eigerDetectorServer 4fca193db64ed991da785043e7769082 executables/eigerDetectorServer_bkp e8a39956bbcb4aac62f109188e8ddbb2 executables/eigerDetectorServerv2.0.5.14.3 4fca193db64ed991da785043e7769082 executables/eigerDetectorServerv2.3.0.16.2 50ef053f1ddd0b49314479a558c9c330 executables/eigerDetectorServerv3.1.1.16.0 4168a104e53ee71f763ed5f0e0b43859 md5sum_executables_eigerDetectorServer_beb024.out 4168a104e53ee71f763ed5f0e0b43859 md5sum_executables_eigerDetectorServer_beb025.out Force a another filesystem *sync*: :: lisgeiger1:~/eiger/psi_eiger_500k_024_025/2018-04-01-1927 % \ cd for m in ${EIGER_MODULES}; do ssh -x root@${m} sync done And finally perform a *paranoid* check after power-cycling the detector: :: lisgeiger1:~ % \ prev_dir=${this_dir} this_dir="${base_dir}/$(date +%Y-%m-%d-%H%M)" mkdir -p ${this_dir} && cd ${this_dir} for m in ${EIGER_MODULES}; do ssh -x root@${m} 'md5sum '${server}'*' \ > md5sum_${server_str}_${m}.out done cd .. for m in ${EIGER_MODULES}; do (diff ${prev_dir}/md5sum_${server_str}_${m}.out ${this_dir} && echo "${m} OK" || echo "${m} changed") done beb024 OK beb025 OK Firmware flash -------------- .. note:: older modules *beb021/020* (Eiger-500k #1) and *beb074/071/064/102/072/073/087/088* (Eiger-2M) use bigger Xilinx Virtex5 FX70T FPGAs in Front-End-Board (FEB). New modules like *beb024/025* (Eiger-500k #2) use in their FEBs Xilinx Virtex5 FX30T FPGAs. For the moment **no automatic determination of the FPGA type is performed by the *eiger_flash* utility**. **To-Do**: investigate if the */febl* and */febr banks* can be read through *tftp* and add a mapping of the FW MD5 signatures in order to identify the good type. The new FWs (v18 and later) allow entering into flash mode from the Linux environment, without the need of pressing the button in the rear panel. The latestversion of the *eiger_flash* utility exploits this and enters into flash mode automatically. .. note:: In case the FW in the detector is too old (pre v18) and does not support software reset into flash mode, the *eiger_flash* utility will ask to manually push the internal buttons in the detector rear panel with a clip: :: lisgeiger1:~ % cd ~/eiger/fw_v18 lisgeiger1:~/eiger/fw_v18 % \ this_dir="${base_dir}/$(date +%Y-%m-%d-%H%M)" mkdir -p ${this_dir} eiger_flash -m beb_fiber.bit \ -l feb_l_fx70t.bit -r feb_r_fx70t.bit \ -k simpleImage.virtex440-eiger-beb-hwid1_local \ -o ${this_dir}/eiger_flash.log ${EIGER_MODULES} b69de7bbcb445d281f4ade4836028d1f beb_fiber.bit da44706da1f11a39c2eebb2c63fff752 feb_l_fx70t.bit d34fb69a1e4272d824bc2dea26efdd45 feb_r_fx70t.bit 1f27879faa7082f9ed2bb2b24b84ea99 simpleImage.virtex440-eiger-beb-hwid1_local [beb021] Executing: nc -p 3000 -u beb021 3000 [beb020] Executing: nc -p 3000 -u beb020 3000 [beb021] Not in firmware flash mode ... ping'ing ... [beb020] Not in firmware flash mode ... ping'ing ... [beb021] ping OK ... Check ssh ... [beb020] ping OK ... Check ssh ... [beb021] Checking flash-mode setup files ... [beb020] Checking flash-mode setup files ... [beb021] Remote and local files differ! [beb021] Local: 7f0e3fb00aa722d1b9c0b943b1870c70 boot_recovery [beb021] Local: 89d25988ed13fbb94dd48ed4d6b49e0d z_mem [beb021] Local: 3f95900e1928d3c59a6ec3afbc5373b0 z_mem_write [beb021] remote: No file found! [beb021] Copying flash-mode setup files ... [beb020] Remote and local files differ! [beb020] Local: 7f0e3fb00aa722d1b9c0b943b1870c70 boot_recovery [beb020] Local: 89d25988ed13fbb94dd48ed4d6b49e0d z_mem [beb020] Local: 3f95900e1928d3c59a6ec3afbc5373b0 z_mem_write [beb020] remote: No file found! [beb020] Copying flash-mode setup files ... [beb020] Starting flash-mode (boot_recovery) ... [beb021] Starting flash-mode (boot_recovery) ... [beb020] Waiting for flash-mode (20 sec) ... [beb021] Waiting for flash-mode (20 sec) ... [beb020] Restarting Ethernet connection ... [beb020] Waiting for connection (10 sec) ... [beb021] Restarting Ethernet connection ... [beb021] Waiting for connection (10 sec) ... [beb020] Executing: nc -p 3000 -u beb020 3000 [beb021] Executing: nc -p 3000 -u beb021 3000 Hosts beb021,beb020 are not in firmware flash mode! Please insert a clip into the rear panel hole until all LEDs are red, and then wait until LED #4 blinks gren/red Press any key to quit ... Run the *eiger_flash* utility to update the FEB left/right and BEB FWs, as well as the kernel image: :: lisgeiger1:~ % cd ~/eiger/fw_v20 lisgeiger1:~/eiger/fw_v20 % which eiger_flash /users/opid00/esrf/sls_detectors/eiger/scripts/eiger_flash lisgeiger1:~/eiger/fw_v20 % md5sum * b2b66c1acae90e3f2b4c4488e99d6b42 beb_copper.bit f9e6e360cfa696957cf4fd5035bed5e1 beb_fiber.bit fe59229e8ebdb5e8d76ff315cd28cc7d feb_l_fx30t.bit eb42ebe9a3c580ab12de0b2c2a7c8c5d feb_l_fx70t.bit 7a988f0e39930bf86d9af9dee060ef04 feb_r_fx30t.bit 4bf1f88d376fd9651b45c2b5b2b021eb feb_r_fx70t.bit 1f27879faa7082f9ed2bb2b24b84ea99 simpleImage.virtex440-eiger-beb-hwid1_local lisgeiger1:~/eiger/fw_v20 % \ this_dir="${base_dir}/$(date +%Y-%m-%d-%H%M)" mkdir -p ${this_dir} eiger_flash -m beb_fiber.bit \ -l feb_l_fx30t.bit -r feb_r_fx30t.bit \ -k simpleImage.virtex440-eiger-beb-hwid1_local \ -o ${this_dir}/eiger_flash.log ${EIGER_MODULES} Eiger flash - Sun Apr 1 20:28:31 2018 f9e6e360cfa696957cf4fd5035bed5e1 beb_fiber.bit fe59229e8ebdb5e8d76ff315cd28cc7d feb_l_fx30t.bit 7a988f0e39930bf86d9af9dee060ef04 feb_r_fx30t.bit 1f27879faa7082f9ed2bb2b24b84ea99 simpleImage.virtex440-eiger-beb-hwid1_local [beb024] Executing: nc -p 3000 -u beb024 3000 [beb025] Executing: nc -p 3000 -u beb025 3000 [beb024] Not in firmware flash mode ... ping'ing ... [beb025] Not in firmware flash mode ... ping'ing ... [beb024] ping OK ... Check ssh ... [beb025] ping OK ... Check ssh ... [beb024] Checking flash-mode setup files ... [beb025] Checking flash-mode setup files ... [beb024] Starting flash-mode (boot_recovery) ... [beb025] Starting flash-mode (boot_recovery) ... [beb025] Waiting for flash-mode (20 sec) ... [beb024] Waiting for flash-mode (20 sec) ... [beb025] Restarting Ethernet connection ... [beb025] Disabling eth4 ... [beb024] Restarting Ethernet connection ... [beb024] Disabling eth2 ... [beb025] Enabling eth4 ... [beb025] Waiting for connection (10 sec) ... [beb024] Enabling eth2 ... [beb024] Waiting for connection (10 sec) ... [beb025] Executing: nc -p 3000 -u beb025 3000 [beb025] Entered into flash-mode OK! [beb024] Executing: nc -p 3000 -u beb024 3000 [beb024] Entered into flash-mode OK! [beb024] Uploading MAIN_BIT beb_fiber.bit to /fw0 (4923823 bytes) [beb025] Uploading MAIN_BIT beb_fiber.bit to /fw0 (4923823 bytes) [beb024] Transferred MAIN_BIT bit file beb_fiber.bit (took 1.4 sec) [beb024] Waiting for firmware flash to finish ... [beb025] Transferred MAIN_BIT bit file beb_fiber.bit (took 1.4 sec) [beb025] Waiting for firmware flash to finish ... [beb025] Firmware flash finished OK (took 44.1 sec) [beb024] Firmware flash finished OK (took 47.1 sec) [beb024] Uploading LEFT_BIT feb_l_fx30t.bit to /febl (1689721 bytes) [beb025] Uploading LEFT_BIT feb_l_fx30t.bit to /febl (1689721 bytes) [beb024] Transferred LEFT_BIT bit file feb_l_fx30t.bit (took 0.5 sec) [beb024] Waiting for firmware flash to finish ... [beb025] Transferred LEFT_BIT bit file feb_l_fx30t.bit (took 0.5 sec) [beb025] Waiting for firmware flash to finish ... [beb024] Firmware flash finished OK (took 94.4 sec) [beb025] Firmware flash finished OK (took 95.5 sec) [beb024] Uploading RIGHT_BIT feb_r_fx30t.bit to /febr (1689721 bytes) [beb025] Uploading RIGHT_BIT feb_r_fx30t.bit to /febr (1689721 bytes) [beb025] Transferred RIGHT_BIT bit file feb_r_fx30t.bit (took 0.5 sec) [beb025] Waiting for firmware flash to finish ... [beb024] Transferred RIGHT_BIT bit file feb_r_fx30t.bit (took 0.5 sec) [beb024] Waiting for firmware flash to finish ... [beb025] Firmware flash finished OK (took 94.0 sec) [beb024] Firmware flash finished OK (took 94.3 sec) [beb024] Uploading KERNEL_LOCAL simpleImage.virtex440-eiger-beb-hwid1_local to /kernel (2068980 bytes) [beb025] Uploading KERNEL_LOCAL simpleImage.virtex440-eiger-beb-hwid1_local to /kernel (2068980 bytes) [beb024] Transferred KERNEL_LOCAL bit file simpleImage.virtex440-eiger-beb-hwid1_local (took 0.6 sec) [beb024] Waiting for firmware flash to finish ... [beb025] Transferred KERNEL_LOCAL bit file simpleImage.virtex440-eiger-beb-hwid1_local (took 0.6 sec) [beb025] Waiting for firmware flash to finish ... [beb025] Firmware flash finished OK (took 16.2 sec) [beb024] Firmware flash finished OK (took 17.3 sec) Press any key to quit ... Showing in the console for the FX30T FW: :: *** Output from beb024 console *** TFTP WRQ (write request): /fw0 Receiving bitfile for parallel flash location 0 transfer done: total len = 4923823 field 3 key='a' len= 46 system.ncd;HW_TIMEOUT=FALSE;UserID=0xFFFFFFFF field 4 key='b' len= 15 5vfx100tff1136 field 5 key='c' len= 11 2017/08/17 field 6 key='d' len= 9 14:08:39 field 7 len=4923712 Doing bitswap for Parallel Flash...done XFlash_Unlock() XFlash_Erase() XFlash_Write() Compare XFlash_Lock() Success TFTP WRQ (write request): /febl Receiving bitfile for spi flash feb left transfer done: total len = 1689721 field 3 key='a' len= 26 feb.ncd;UserID=0xFFFFFFFF field 4 key='b' len= 13 5vfx30tff665 ERROR: Bitfile is for wrong FPGA type: 5vfx30tff665 expected: 5vfx70tff665 Something went wrong. Perhaps it is a bit file for the smaller Front End FPGA, trying that... field 3 key='a' len= 26 feb.ncd;UserID=0xFFFFFFFF field 4 key='b' len= 13 5vfx30tff665 field 5 key='c' len= 11 2017/08/17 field 6 key='d' len= 9 11:19:48 field 7 len=1689632 Copying to WriteBuffer...done Chip Erase Starting address = 0x00000000 end_address = 0x00190000 len = 1689632 Chip Erase Complete Writing done.. Now reading back Compare Success TFTP WRQ (write request): /febr Receiving bitfile for spi flash feb right transfer done: total len = 1689721 field 3 key='a' len= 26 feb.ncd;UserID=0xFFFFFFFF field 4 key='b' len= 13 5vfx30tff665 ERROR: Bitfile is for wrong FPGA type: 5vfx30tff665 expected: 5vfx70tff665 Something went wrong. Perhaps it is a bit file for the smaller Front End FPGA, trying that... field 3 key='a' len= 26 feb.ncd;UserID=0xFFFFFFFF field 4 key='b' len= 13 5vfx30tff665 field 5 key='c' len= 11 2017/08/17 field 6 key='d' len= 9 11:06:48 field 7 len=1689632 Copying to WriteBuffer...done Chip Erase Starting address = 0x00000000 end_address = 0x00190000 len = 1689632 Chip Erase Complete Writing done.. Now reading back Compare Success TFTP WRQ (write request): /kernel Receiving linux kernel transfer done: total len = 2068980 Linux Kernel: len=2068980 XFlash_Unlock() XFlash_Erase() XFlash_Write() Compare XFlash_Lock() Success Console output on the FX70T FW: :: *** Output from beb024 console *** TFTP WRQ (write request): /fw0 Receiving bitfile for parallel flash location 0 transfer done: total len = 4923823 field 3 key='a' len= 46 system.ncd;HW_TIMEOUT=FALSE;UserID=0xFFFFFFFF field 4 key='b' len= 15 5vfx100tff1136 field 5 key='c' len= 11 2017/08/17 field 6 key='d' len= 9 14:08:39 field 7 len=4923712 Doing bitswap for Parallel Flash...done XFlash_Unlock() XFlash_Erase() XFlash_Write() Compare XFlash_Lock() Success TFTP WRQ (write request): /febl Receiving bitfile for spi flash feb left transfer done: total len = 3378265 field 3 key='a' len= 26 feb.ncd;UserID=0xFFFFFFFF field 4 key='b' len= 13 5vfx70tff665 field 5 key='c' len= 11 2017/08/17 field 6 key='d' len= 9 11:06:42 field 7 len=3378176 Copying to WriteBuffer...done Chip Erase Starting address = 0x00000000 end_address = 0x00330000 len = 3378176 Chip Erase Complete Writing done.. Now reading back Compare Success TFTP WRQ (write request): /febr Receiving bitfile for spi flash feb right transfer done: total len = 3378265 field 3 key='a' len= 26 feb.ncd;UserID=0xFFFFFFFF field 4 key='b' len= 13 5vfx70tff665 field 5 key='c' len= 11 2017/08/17 field 6 key='d' len= 9 11:06:39 field 7 len=3378176 Copying to WriteBuffer...done Chip Erase Starting address = 0x00000000 end_address = 0x00330000 len = 3378176 Chip Erase Complete Writing done.. Now reading back Compare Success TFTP WRQ (write request): /kernel Receiving linux kernel transfer done: total len = 2068980 Linux Kernel: len=2068980 XFlash_Unlock() XFlash_Erase() XFlash_Write() Compare XFlash_Lock() Success .. note:: **To-Do** add a *ManualEthernetConnection* restart in case the modules are not directly connected to the backend computer, or just not defined in the *eiger_flash* utility. Start the *eigerDetectorServer* and check that everything is OK: :: lisgeiger1:~ % \ for m in ${EIGER_MODULES}; do ssh -x root@${m} 'nohup '${server}' > /dev/null 2>&1 &' done Once verified that the new server runs fine with the new firmware, restore automatic startup: :: lisgeiger1:~ % \ for m in ${EIGER_MODULES}; do ssh -x root@${m} sed -i '"s:^#\?\('${full_server}'\).*$:\1 \&:"' \ /etc/init.d/board_com.sh done for m in ${EIGER_MODULES}; do ssh -x root@${m} sync done Power-cycle the detector and verify that the servers start automatically: :: lisgeiger1:~ % \ for m in ${EIGER_MODULES}; do \ ssh -x root@${m} 'ps -ef | grep '${server}' | grep -v grep'; \ done 961 root 0:00 /home/root/executables/eigerDetectorServer 965 root 0:00 /home/root/executables/eigerDetectorServer -stopserver 961 root 0:00 /home/root/executables/eigerDetectorServer 965 root 0:00 /home/root/executables/eigerDetectorServer -stopserver