From e8fd8715e450ee2a3a411d7abb886bbb2dc4b124 Mon Sep 17 00:00:00 2001 From: Sven Rademakers Date: Tue, 28 May 2024 11:22:00 +0100 Subject: [PATCH] factory: add more tests --- tp2bmc/board/tp2bmc/factory_install.scr | 38 ++++---- .../factory_overlay/files_to_delete.txt | 2 - .../001-device_tree_and_eeprom_test.sh | 18 ++-- .../upper/factory/002-rtc-test.sh | 6 +- .../upper/factory/003-bmc_ethernet_test.sh | 4 +- ...es_test.sh => 004-node_flash_mode_test.sh} | 21 +++-- .../005-node1_and_4_peripheral_test.sh | 14 --- .../upper/factory/005-node_ethernet_test.sh | 85 +++++++++++++++++ .../upper/factory/006-node_ethernet_test.sh | 9 -- .../upper/factory/006-node_peripheral_test.sh | 91 +++++++++++++++++++ .../upper/factory/007-fan-test.sh | 5 + .../upper/factory/008-key1_test.sh | 6 ++ .../factory_overlay/upper/factory/config.sh | 15 +++ .../upper/factory/erase_eeprom.sh | 2 +- .../upper/factory/flash_eeprom.sh | 50 ++++++++++ .../factory_overlay/upper/factory/helpers.sh | 70 ++++++++++++++ .../factory/install_official_firmware.sh | 19 ++++ .../upper/factory/run_all_tests.sh | 15 ++- tp2bmc/board/tp2bmc/post_image.sh | 3 +- tp2bmc/configs/tp2bmc_defconfig | 1 + tp2bmc/package/bmc_installer/bmc_installer.mk | 5 +- 21 files changed, 401 insertions(+), 78 deletions(-) rename tp2bmc/board/tp2bmc/factory_overlay/upper/factory/{004-all_nodes_test.sh => 004-node_flash_mode_test.sh} (63%) delete mode 100755 tp2bmc/board/tp2bmc/factory_overlay/upper/factory/005-node1_and_4_peripheral_test.sh create mode 100755 tp2bmc/board/tp2bmc/factory_overlay/upper/factory/005-node_ethernet_test.sh delete mode 100755 tp2bmc/board/tp2bmc/factory_overlay/upper/factory/006-node_ethernet_test.sh create mode 100755 tp2bmc/board/tp2bmc/factory_overlay/upper/factory/006-node_peripheral_test.sh create mode 100755 tp2bmc/board/tp2bmc/factory_overlay/upper/factory/007-fan-test.sh create mode 100755 tp2bmc/board/tp2bmc/factory_overlay/upper/factory/008-key1_test.sh create mode 100755 tp2bmc/board/tp2bmc/factory_overlay/upper/factory/config.sh create mode 100755 tp2bmc/board/tp2bmc/factory_overlay/upper/factory/flash_eeprom.sh create mode 100755 tp2bmc/board/tp2bmc/factory_overlay/upper/factory/install_official_firmware.sh diff --git a/tp2bmc/board/tp2bmc/factory_install.scr b/tp2bmc/board/tp2bmc/factory_install.scr index 74a0c2646..32540e054 100644 --- a/tp2bmc/board/tp2bmc/factory_install.scr +++ b/tp2bmc/board/tp2bmc/factory_install.scr @@ -3,31 +3,27 @@ # read hardware version from EEPROM tpi_info hw_version tpi_hw_version -ubi part ubi - if test -z "$tpi_crc_ok"; then echo eeprom crc failure, rewrite version ${eeprom_ver} run burn_eeprom fi -linux_bootpart=2 -if load ${devtype} ${devnum}:${linux_bootpart} ${loadaddr} /boot/turing-pi2.itb \ - && load ${devtype} ${devnum}:${distro_bootpart} ${ramdisk_addr_r} /boot/install.img -then - if ubi check rootfs - then - # if there is a rootfs partition on the ubi volume, - # We assume flashing is done. - echo turing-pi firmware already installed.. - # boot "normally". let the boot.scr scan the rootfs partition on the - # SDcard and boot it. `boot_unlocked` signals that we want to release the write - # protection on the boot partition and eeprom. - env set boot_unlocked 0 - else - # run installer - env set bootargs "loglevel=4 skip_confirm no_eject" - bootm ${loadaddr}#config-${tpi_hw_version:-v2.4.0} ${ramdisk_addr_r} - fi +install_magic=0x12341234 +install_addr=0x0709010C +mw ${loadaddr} ${install_magic} + +if cmp ${loadaddr} ${install_addr} 1; then + echo post firmware install, skipping factory boot + mw ${install_addr} 0x00000000 + md ${install_addr} + ubi part ubi + env set devtype ubi + env set devnum 0 + run bootcmd_ubi_primary else - echo "Unable to load /boot/turing-pi2.itb or boot/install.img" + echo booting factory image + # let the boot.scr scan the rootfs partition on the + # SDcard and boot it. `boot_unlocked` signals that we want to release the write + # protection on the boot partition and eeprom. + env set boot_unlocked 0 fi diff --git a/tp2bmc/board/tp2bmc/factory_overlay/files_to_delete.txt b/tp2bmc/board/tp2bmc/factory_overlay/files_to_delete.txt index 01be07e9c..e69de29bb 100755 --- a/tp2bmc/board/tp2bmc/factory_overlay/files_to_delete.txt +++ b/tp2bmc/board/tp2bmc/factory_overlay/files_to_delete.txt @@ -1,2 +0,0 @@ -etc/init.d/S11bmc-otg -etc/init.d/S50sshd diff --git a/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/001-device_tree_and_eeprom_test.sh b/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/001-device_tree_and_eeprom_test.sh index 7f8d1f11b..a82b6fac0 100755 --- a/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/001-device_tree_and_eeprom_test.sh +++ b/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/001-device_tree_and_eeprom_test.sh @@ -1,15 +1,6 @@ #!/bin/bash -source helpers.sh -ASSERT_VERSION=4111 -ASSERT_MODEL_NAME="Turing Pi 2 (v2.5.1)" - -model=$(< /proc/device-tree/model tr -d '\0') - -if [[ "$model" != "$ASSERT_MODEL_NAME" ]]; then - echo "Error: '$model' != 'Turing Pi 2 (v2.5.1)'" - exit 1 -fi +source config.sh eeprom=$(ls /sys/bus/i2c/devices/*/eeprom) result=$(dd if="$eeprom" bs=1 skip=8 count=2 2>/dev/null | hexdump -e '1/1 "%02x"') @@ -18,3 +9,10 @@ if [[ "$result" != "$ASSERT_VERSION" ]]; then echo "Error: expected eeprom version '$ASSERT_VERSION' got '$result'" exit 1 fi + +model=$(< /proc/device-tree/model tr -d '\0') + +if [[ "$model" != "$ASSERT_MODEL_NAME" ]]; then + echo "Error: got '$model', expected '$ASSERT_MODEL_NAME'" + exit 1 +fi diff --git a/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/002-rtc-test.sh b/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/002-rtc-test.sh index 54e2f9ec1..6576635a9 100755 --- a/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/002-rtc-test.sh +++ b/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/002-rtc-test.sh @@ -4,14 +4,14 @@ set -e # Check if /sys/class/rtc/rtc0 exists if [ -d "/sys/class/rtc/rtc0" ]; then - echo "RTC Information:" + echo -e "\tRTC Information:" # Read and print various RTC attributes - echo "Name: $(cat /sys/class/rtc/rtc0/name)" + echo -e "\tName: $(cat /sys/class/rtc/rtc0/name)" #echo "Date and Time: $(cat /sys/class/rtc/rtc0/date) $(cat /sys/class/rtc/rtc0/time)" #echo "Alarm: $(cat /sys/class/rtc/rtc0/wakealarm)" #echo "Since Epoch: $(cat /sys/class/rtc/rtc0/since_epoch)" - echo "Max User Freq: $(cat /sys/class/rtc/rtc0/max_user_freq)" + echo -e "\tMax User Freq: $(cat /sys/class/rtc/rtc0/max_user_freq)" else echo "Error: /sys/class/rtc/rtc0 directory does not exist. No RTC information available." exit 1 diff --git a/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/003-bmc_ethernet_test.sh b/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/003-bmc_ethernet_test.sh index 666b78a8a..02aab9403 100755 --- a/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/003-bmc_ethernet_test.sh +++ b/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/003-bmc_ethernet_test.sh @@ -12,8 +12,8 @@ if [ -z "$gateway" ]; then fi mac=$(ifconfig eth0 | grep HWaddr | awk '{print $5}') -echo -e "interface:\t'eth0'" -echo -e "MAC: \t\t'${mac}'" +echo -e "\tinterface:\t'eth0'" +echo -e "\tMAC: \t\t'${mac}'" ping -c 4 "${gateway}" > /dev/null diff --git a/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/004-all_nodes_test.sh b/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/004-node_flash_mode_test.sh similarity index 63% rename from tp2bmc/board/tp2bmc/factory_overlay/upper/factory/004-all_nodes_test.sh rename to tp2bmc/board/tp2bmc/factory_overlay/upper/factory/004-node_flash_mode_test.sh index ee7d6e1f2..aa0174fbd 100755 --- a/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/004-all_nodes_test.sh +++ b/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/004-node_flash_mode_test.sh @@ -2,7 +2,7 @@ source helpers.sh get_latest_device_sys() { - ls -lt /sys/class/block | grep -v 'total' | head -n 1 | awk '{print $9}' + ls -lt /sys/class/block | grep -v 'total' | head -n 1 } verify_msd_connection() { @@ -15,7 +15,7 @@ verify_msd_connection() { if [ ! -f "$mount_point/$file1" ] && [ ! -f "$mount_point/$file2" ]; then echo "Error: cannot find $file1 or $file2 on mount" - tpi power off > /dev/null + tpi power off > /dev/null exit 1 fi @@ -28,20 +28,25 @@ last_added_device=$(get_latest_device_sys) for n in {1..4} do - tpi advanced msd --node "${n}" > /dev/null + echo -en "\tNode $n" + res=$(tpi advanced msd --node "${n}") exit_code=$? - sleep 2 + sleep 3 new_block=$(get_latest_device_sys) if [[ "$last_added_device" == "$new_block" ]]; then + echo "$res" + echo -e "\n$(uart_output_node "${n}")" echo "Error: can not detect node $n over USB" - tpi power off > /dev/null + tpi power off > /dev/null exit 1 fi + partition=$(echo "$new_block" | awk '{print $9}') # start.elf should be present on the boot partition of the cm4 rpi - # boot.scr should be present on the RK1 - verify_msd_connection "${new_block}1" "start.elf" "boot.scr" + # network-config should be present on the RK1 + verify_msd_connection "${partition}1" "start.elf" "network-config" + tpi power off --node "${n}" > /dev/null - echo "Node $n ok" + echo " => OK" done diff --git a/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/005-node1_and_4_peripheral_test.sh b/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/005-node1_and_4_peripheral_test.sh deleted file mode 100755 index f7a0a9e27..000000000 --- a/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/005-node1_and_4_peripheral_test.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash -source helpers.sh - -tpi power off > /dev/null -tpi power on --node 1 > /dev/null -confirm "Do you see video output on your HDMI monitor?" -confirm "Connect an USB peripheral to USB_HOST NODE 1 port. login to the raspberry pi module on NODE 1. Does it detect the connected USB device?" - -tpi power off --node 1 > /dev/null -tpi power on --node 4 > /dev/null - -confirm "Connect an USB peripheral to one of the USB3X2 ports. login to the module on NODE 4. Does it detect the connected USB device?" - -tpi power off > /dev/null diff --git a/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/005-node_ethernet_test.sh b/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/005-node_ethernet_test.sh new file mode 100755 index 000000000..761dbfc33 --- /dev/null +++ b/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/005-node_ethernet_test.sh @@ -0,0 +1,85 @@ +#!/bin/bash + +source helpers.sh +source config.sh + + +retrieve_ip_from_uart() { + local n="$1" + local tty="/dev/ttyS${n}" + + USERNAME="$RK1_USERNAME" + PASSWORD="$RK1_PASSWORD" + + # login + sleep 2 + echo "${USERNAME}" > "${tty}" + sleep 1 + echo "${PASSWORD}" > "${tty}" + sleep 3 + print_ipv4="ip -4 addr show | grep -oP '(?<=inet\\s)\\d+(\\.\\d+){3}'" + echo "$print_ipv4" > "/dev/ttyS${n}" + sleep 1 + return_line=$(tpi uart --node "${n}" get | tail -n 2 | head -n 1) + echo "$return_line" | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}' +} + +get_ip_and_ping() { + local n="$1" + local ip + + wait_until_booted $n + if [[ $? -ne 0 ]]; then + echo "$(uart_output_node "$n")" + echo "Error: Timeout occurred waiting for node ${n} to boot" + exit 1 + fi + + local node_ip_var="NODE${n}_IP" + local node_ip_value=$(eval echo \$$node_ip_var) + + if [ -z "$node_ip_value" ]; then + echo -e "\tnode ${n}: getting ip from uart" + ip=$(retrieve_ip_from_uart "$n") + else + ip="$node_ip_value" + fi + + # Ping the IP address + ping -c 4 "$ip" > /dev/null + if [ "$?" -ne 0 ]; then + echo "$(uart_output_node "$n")" + echo "Error: could not ping node $n" + exit 1 + fi + + echo -e "\tNode $n $ip => OK" +} + +node1_test() { + get_ip_and_ping "1" +} + +node2_test() { + get_ip_and_ping "2" +} + +node3_test() { + get_ip_and_ping "3" +} + +node4_test() { + get_ip_and_ping "4" +} + +tpi power off > /dev/null +tpi power on > /dev/null + +echo -e "\tWaiting for modules to boot, this can take up to a minute.." +sleep 15 + +node1_test +node2_test +node3_test +node4_test + diff --git a/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/006-node_ethernet_test.sh b/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/006-node_ethernet_test.sh deleted file mode 100755 index c8226cc78..000000000 --- a/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/006-node_ethernet_test.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash - -source helpers.sh -set -e - -tpi power on > /dev/null -confirm "Are all Red power leds on?" -confirm "Go to your router, can you see all nodes in your DHCP list" -tpi power off > /dev/null diff --git a/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/006-node_peripheral_test.sh b/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/006-node_peripheral_test.sh new file mode 100755 index 000000000..0f2352118 --- /dev/null +++ b/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/006-node_peripheral_test.sh @@ -0,0 +1,91 @@ +#!/bin/bash + +source helpers.sh +BMC_OTG="08DE:1234" +RK1_USB="2207:350b" + +assert_pci_devices() { + local devices=$(get_pci_devices "$1" | grep -v '^$') + local count="$2" + line_count=$(echo "$devices" | wc -l) + # Exit with an error if there are fewer than 2 lines + if [ "$line_count" -lt "${count}" ]; then + echo "Error: Fewer than ${count} (got ${line_count}) PCI devices connected " + echo -e "\tFound:" + echo -e "\t${devices}" + echo "Error: Node ${n}: could not detect NVMe or MPCIE device" + exit 1 + fi + +} + +print_usb_names() { + local usb_devices="$1" + # Loop through each line and print the name of the USB device + echo "$usb_devices" | while IFS= read -r line; do + # Extract and print the device name (fields starting from 7th position) + local dev=$(echo "$line" | awk '{for(i=7;i<=NF;i++) printf $i" "; print ""}') + echo -e "\t\t${dev}" + done +} + +usb_dev_test() { + tpi advanced msd --node 4 >/dev/null + tpi usb device --node 4 > /dev/null + confirm "plug the USB cable from 'BMC_USB_OTG' to the 'USB_DEV' port" + devices=$(get_usb_devices "1") + if echo "$devices" | grep -q "ID ${RK1_USB}"; then + echo -e "\tUSB_DEV => OK" + else + echo "$devices" + echo "Error: Could not detect 'USB_DEV' port" + exit 1 + fi +} + +node1_tests() { + result=$(send_command "1" "lsusb -d ${BMC_OTG}") + if [[ $? -ne 0 ]]; then + echo "$result" + echo "Error: NODE1_USB_HOST or BMC_USB_OTG port not responding" + exit 1 + fi + confirm "Do you see video output on the HDMI port?" + confirm "Do you see video output on the DSI port?" + assert_pci_devices "1" "2" + echo -e "\tNODE1 => OK" +} + +node2_tests() { + assert_pci_devices "2" "2" + echo -e "\tNODE2 => OK" +} + +node3_tests() { + assert_pci_devices "3" "1" + echo -e "\tNODE3 => OK" +} + +node4_tests() { + usb_devices=$(get_usb_devices 4) + line_count=$(echo "$usb_devices" | wc -l) + # Exit with an error if there are fewer than 2 lines + if [ "$line_count" -lt 4 ]; then + echo "Error: Fewer than 4(${line_count}) USB devices connected to NODE4" + echo "got: ${usb_devices}" + exit 1 + fi + + echo -e "\tUSB3X2 NODE4" + print_usb_names "$usb_devices" + echo -e "\tUSB3X2 NODE4 => OK" + assert_pci_devices "4" "1" + echo -e "\tNODE4 => OK" + +} + +#node1_tests +#node2_tests +#node3_tests +#node4_tests +usb_dev_test diff --git a/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/007-fan-test.sh b/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/007-fan-test.sh new file mode 100755 index 000000000..47eca2f26 --- /dev/null +++ b/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/007-fan-test.sh @@ -0,0 +1,5 @@ +#!/bin/bash +source helpers.sh + +confirm "Is the fan working?" +confirm "Switch the 'FAN VOL SWITCH'. Is the speed changing?" diff --git a/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/008-key1_test.sh b/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/008-key1_test.sh new file mode 100755 index 000000000..1a6676204 --- /dev/null +++ b/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/008-key1_test.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +set -e +source helpers.sh +tpi power on > /dev/null +question "Press 'Key1'. Do the red light go off?" diff --git a/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/config.sh b/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/config.sh new file mode 100755 index 000000000..ef28e0f99 --- /dev/null +++ b/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/config.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +ASSERT_VERSION=4111 +ASSERT_MODEL_NAME="Turing Pi 2 (v2.5.1)" + +# the amount allowed to wait for a module to boot (in secs) +WAITING_TIMEOUT=60 +RK1_USERNAME=ubuntu +RK1_PASSWORD=Turingpi123 +FINGERPRINT="ubuntu login:" + +NODE1_IP="" +NODE2_IP="" +NODE3_IP="" +NODE4_IP="" diff --git a/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/erase_eeprom.sh b/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/erase_eeprom.sh index f3d63777d..d0727ec91 100755 --- a/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/erase_eeprom.sh +++ b/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/erase_eeprom.sh @@ -2,6 +2,6 @@ set -e eeprom=$(ls /sys/bus/i2c/devices/*/eeprom) -dd if=/dev/zero bs=1 count=48 of="$eeprom" +dd if=/dev/zero bs=1 count=48 | tr '\0' '\377' > "$eeprom" echo "EEPROM erased successfully" diff --git a/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/flash_eeprom.sh b/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/flash_eeprom.sh new file mode 100755 index 000000000..a0085e958 --- /dev/null +++ b/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/flash_eeprom.sh @@ -0,0 +1,50 @@ +#!/bin/bash + +# Function to convert hex to little-endian format +to_le() { + local hex=$1 + echo $hex | sed 's/../& /g' | tac -s ' ' | tr -d ' ' +} + +# Function to calculate CRC32 +crc32() { + local data=$1 + echo -n "$data" | xxd -r -p | crc32 +} + +# Set up fields +reserved="0000" +hdr_version="0000" +hw_version="1141" +factory_serial="3132333435363738" # ASCII for "12345678" +product_name=$(printf 'MyProduct' | xxd -p | sed 's/../& /g' | awk '{ printf "%s ", $0 } END { for (i = 0; i < (16 - NF); i++) printf "00 " }') +mac="001A2B3C4D5E" + +# Calculate factory_date (days since May 1, 2024) +base_date=$(date -d "2024-05-01" +%s) +current_date=$(date +%s) +factory_date=$(( (current_date - base_date) / 86400 )) +factory_date=$(printf '%04x' $factory_date) +factory_date=$(to_le $factory_date) + +# Construct the struct without CRC32 +struct="${reserved}${hdr_version}${hw_version}${factory_date}${factory_serial}${product_name}${mac}" + +# Calculate CRC32 starting after the crc32 field (first 6 bytes are reserved and crc32 itself) +crc32=$(echo $struct | xxd -r -p | tail -c +7 | crc32) +crc32=$(printf '%08x' $crc32) +crc32=$(to_le $crc32) + +# Final struct with CRC32 +struct="${reserved}${crc32}${hdr_version}${hw_version}${factory_date}${factory_serial}${product_name}${mac}" + +# Write the struct to a binary file +echo $struct | xxd -r -p > /tmp/board_info.bin + +# Check if the binary file was created +if [[ -f "board_info.bin" ]]; then + echo "Binary file 'board_info.bin' created successfully." +else + echo "Failed to create the binary file." +fi + diff --git a/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/helpers.sh b/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/helpers.sh index ed847cde7..b6e726ef7 100755 --- a/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/helpers.sh +++ b/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/helpers.sh @@ -1,5 +1,7 @@ #!/bin/bash +source config.sh + try_again() { if [ -n "$1" ]; then echo "=> $1" @@ -40,3 +42,71 @@ confirm() { fi done } + +send_command() { + local n="$1" + local cmd="$2" + + if [ -z "$RK1_USERNAME" ];then + echo "set \$RK1_USERNAME in config.sh" + return 1 + fi + + if [ -z "$RK1_PASSWORD" ];then + echo "set \$RK1_PASSWORD in config.sh" + return 1 + fi + + local node_ip_var="NODE${n}_IP" + local node_ip_value=$(eval echo \$$node_ip_var) + + sshpass -p "$RK1_PASSWORD" ssh -o StrictHostKeyChecking=no "${RK1_USERNAME}@${node_ip_value}" "$cmd" +} + +uart_output_node() { + local n="$1" + tpi uart get --node ${n} | head +} + +wait_until_booted() { + local node="$1" + + start_time=$(date +%s) + while true; do + current_time=$(date +%s) + elapsed=$((current_time - start_time)) + + if [[ $elapsed -ge $WAITING_TIMEOUT ]]; then + return 1 + fi + + last_line=$(tpi uart --node ${node} get | tail -n 1) + if [[ "$last_line" == *"${FINGERPRINT}"* ]]; then + return 0 + fi + + sleep 1 + done +} + +get_usb_devices() { + local node="$1" + + result=$(send_command $node "lsusb") + if [[ $? -ne 0 ]]; then + echo "Error: USB3X2 NODE4 ports error: ${result}" + exit 1 + fi + # dont include the controller on the bus + echo "$result" | grep -v 'Device 001' +} + +get_pci_devices() { + local n="$1" + result=$(send_command "$n" "lspci | grep -v RK3588 | grep -v 'PCI bridge: Broadcom Inc'") + if [[ $? -ne 0 ]]; then + echo "Error: could not get pci information on Node ${n}" + exit 1 + fi + echo "$result" +} diff --git a/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/install_official_firmware.sh b/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/install_official_firmware.sh new file mode 100755 index 000000000..92d5fa93f --- /dev/null +++ b/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/install_official_firmware.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +source helpers.sh + +echo "You are about to install the official firmware.." +question + +./install_firmware +if [[ $? -ne 0 ]]; then + echo -e "${RED} installation of firmware failed!${NC}" + exit 1 +fi + +# insert cookie to be picked up by bootloader. +# This signals the bootloader not load the factory image, but too boot from +# flash +install_magic=0x12341234 +install_addr=0x0709010C +devmem $install_addr 32 $install_magic diff --git a/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/run_all_tests.sh b/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/run_all_tests.sh index d9f3ca309..e725ad65b 100755 --- a/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/run_all_tests.sh +++ b/tp2bmc/board/tp2bmc/factory_overlay/upper/factory/run_all_tests.sh @@ -1,4 +1,7 @@ #!/bin/bash + +source helpers.sh + # Define color codes RED='\033[0;31m' YELLOW='\033[0;33m' @@ -28,15 +31,15 @@ for FILE in "$TEST_DIR"/[0-9][0-9][0-9]-*; do "$FILE" EXIT_CODE=$? - # Increment the counter - ((nr_of_executed_tests++)) echo -ne " [${test_id}] " if [[ $EXIT_CODE -ne 0 ]]; then echo -e "${RED}FAILED${NC} exited with code $EXIT_CODE" break else - echo -e "${GREEN}PASSED${NC}" + echo -e "${GREEN}PASSED${NC}" + # Increment the counter + ((nr_of_executed_tests++)) fi else NON_EXECUTABLE_FILES+=("$FILE") @@ -52,6 +55,10 @@ fi if [[ $EXIT_CODE -eq 0 ]]; then echo -e "${GREEN}(${nr_of_executed_tests}/${nr_of_executed_tests}) tests PASSED. ALL GOOD!${NC}" -fi +else exit $EXIT_CODE +fi + +source install_official_firmware.sh +echo "THIS IS THE END, PRESS 'BMC_RESET'" diff --git a/tp2bmc/board/tp2bmc/post_image.sh b/tp2bmc/board/tp2bmc/post_image.sh index 546e573bf..98fa1f579 100755 --- a/tp2bmc/board/tp2bmc/post_image.sh +++ b/tp2bmc/board/tp2bmc/post_image.sh @@ -26,8 +26,7 @@ create_sdcard() { factory_sdcard() { # prepare factory overlay partition - rm -rf "factory_overlay" && \ - cp -r "$BOARD_DIR"/factory_overlay . + cp -r "$BOARD_DIR"/factory_overlay . # Git doesnt support c nodes, manually create them from a .txt file while IFS= read -r line diff --git a/tp2bmc/configs/tp2bmc_defconfig b/tp2bmc/configs/tp2bmc_defconfig index 77de6a3f7..bae3f26fb 100644 --- a/tp2bmc/configs/tp2bmc_defconfig +++ b/tp2bmc/configs/tp2bmc_defconfig @@ -106,6 +106,7 @@ BR2_PACKAGE_START_STOP_DAEMON=y BR2_PACKAGE_TREE=y BR2_PACKAGE_UTIL_LINUX_BINARIES=y BR2_PACKAGE_UTIL_LINUX_UUIDD=y +BR2_PACKAGE_SSHPASS=y # Custom packages BR2_PACKAGE_BMCD=y diff --git a/tp2bmc/package/bmc_installer/bmc_installer.mk b/tp2bmc/package/bmc_installer/bmc_installer.mk index 608a44a37..b73e054e1 100644 --- a/tp2bmc/package/bmc_installer/bmc_installer.mk +++ b/tp2bmc/package/bmc_installer/bmc_installer.mk @@ -4,16 +4,17 @@ # ########################################################### -BMC_INSTALLER_VERSION = 217a36ef4c040ffcb04cd22f8cfacf409b6540d9 +BMC_INSTALLER_VERSION = 60b14cb86733b0cce133a36c470130cc0dbca97e BMC_INSTALLER_SITE = $(call github,turing-machines,BMC-Installer,$(BMC_INSTALLER_VERSION)) BMC_INSTALLER_LICENSE = Apache-2.0 BMC_INSTALLER_LICENSE_FILES = LICENSE BMC_INSTALLER_INSTALL_STAGING = YES BMC_INSTALLER_INSTALL_TARGET = NO -BMC_INSTALLER_CARGO_BUILD_OPTS = --bin=sdcard +BMC_INSTALLER_CARGO_BUILD_OPTS = --bin=sdcard --bin=sdcard_userspace define BMC_INSTALLER_INSTALL_STAGING_CMDS $(INSTALL) -D -m 0755 $(@D)/target/$(RUSTC_TARGET_NAME)/$(if $(BR2_ENABLE_DEBUG),debug,release)/sdcard $(STAGING_DIR)/initramfs/install/init + $(INSTALL) -D -m 0755 $(@D)/target/$(RUSTC_TARGET_NAME)/$(if $(BR2_ENABLE_DEBUG),debug,release)/sdcard_userspace $(BINARIES_DIR)/factory_overlay/upper/factory/install_firmware endef $(eval $(cargo-package))