summaryrefslogtreecommitdiffstats
path: root/configs/platform-mipsel/run
diff options
context:
space:
mode:
Diffstat (limited to 'configs/platform-mipsel/run')
-rwxr-xr-xconfigs/platform-mipsel/run121
1 files changed, 121 insertions, 0 deletions
diff --git a/configs/platform-mipsel/run b/configs/platform-mipsel/run
new file mode 100755
index 0000000..36dc6de
--- /dev/null
+++ b/configs/platform-mipsel/run
@@ -0,0 +1,121 @@
+#!/bin/bash
+
+platformconfig=selected_platformconfig
+# fallback to platformconfig in the same dir as this script
+if [ ! -e "$platformconfig" ]; then
+ platformconfig=$(dirname $0)/platformconfig
+fi
+
+#
+# we need information about the platform
+#
+if [ ! -e "$platformconfig" ]; then
+ echo "error: selected_platformconfig does not exist"
+ echo " please use 'ptxdist platform ...' or 'ptxdist --platformconfig=...'"
+ exit 1
+fi
+
+source $platformconfig
+
+if [ -n "${PTXCONF_PLATFORM}" ]; then
+ PTXDIST_PLATFORMDIR="./platform-${PTXCONF_PLATFORM}"
+else
+ PTXDIST_PLATFORMDIR="."
+fi
+
+if [ ! -e "${PTXDIST_PLATFORMDIR}/images/vmlinuz-malta" ]; then
+ echo "error: run 'ptxdist go' first"
+ exit 1
+fi
+
+# the emulator to run
+QEMU_EXEC="${PTXDIST_PLATFORMDIR}/sysroot-host/bin/qemu-system-mipsel"
+
+if [ ! -e "${QEMU_EXEC}" ]; then
+ echo "error: enable and install 'host-qemu' first"
+ exit 1
+fi
+
+# the port a 'telned' would connect to (in the emulated sysem)
+TELNET_INTERNAL_PORT=23
+# port QEMU opens at the host side to give access to the ${TELNET_INTERNAL_PORT}
+TELNET_EXTERNAL_PORT=4444
+
+# dito for ssh
+SSH_INTERNAL_PORT=22
+SSH_EXTERNAL_PORT=4445
+
+# check if vde is available for networking
+if [ -z "${VDE_SOCKET}" ]; then
+ for dir in $(ls -d /var/run/vde2/*.ctl 2>/dev/null); do
+ if [ -r "${dir}" ]; then
+ VDE_SOCKET="${dir}"
+ fi
+ done
+fi
+if [ -n "${VDE_SOCKET}" ]; then
+ # make sure qemu supports vde networking
+ if ${QEMU_EXEC} --help | grep -q -- '-net.*vde'; then
+ QEMU_NET=( -netdev vde,id=net1,sock=${VDE_SOCKET} )
+ fi
+fi
+
+# fall back to user network if necessary
+if [ -z "${QEMU_NET}" ]; then
+ QEMU_NET=(-netdev user,id=net1,hostfwd=tcp:127.0.0.1:${TELNET_EXTERNAL_PORT}-:${TELNET_INTERNAL_PORT},hostfwd=tcp:127.0.0.1:${SSH_EXTERNAL_PORT}-:${SSH_INTERNAL_PORT} )
+fi
+
+BASE_CMDLINE="console=ttyS0,115200"
+
+# Machine to emulate
+QEMU_ARGS=( -M malta -m 256 -serial stdio -monitor null -device qemu-xhci,id=xhci)
+# disable graphics output
+QEMU_ARGS[${#QEMU_ARGS[@]}]="-nographic"
+# Exit qemu on reboot
+QEMU_ARGS[${#QEMU_ARGS[@]}]="-no-reboot"
+# Configure networking
+QEMU_ARGS=( "${QEMU_ARGS[@]}" -net nic,netdev=net1 "${QEMU_NET[@]}" )
+# Set base time to test NTP and time handling
+QEMU_ARGS=( "${QEMU_ARGS[@]}" -rtc base=2021-01-01 )
+
+QEMU_LINUX_ARGS=( -kernel ${PTXDIST_PLATFORMDIR}/images/vmlinuz-malta -dtb ${PTXDIST_PLATFORMDIR}/images/qemu-malta.dtb-bb )
+# the barebox device tree has a state node for bootchooser
+QEMU_BAREBOX_ARGS=( -bios ${PTXDIST_PLATFORMDIR}/images/barebox-qemu-malta.img )
+
+check_hd() {
+ if [ ! -e "${PTXDIST_PLATFORMDIR}/images/malta.hdimg" ]; then
+ echo "error: malta.hdimg is missing. Run 'ptxdist images' first"
+ exit 1
+ fi
+}
+
+run_qemu_nfs() {
+ exec ${QEMU_EXEC} \
+ "${QEMU_ARGS[@]}" \
+ "${QEMU_EXTRA_ARGS[@]}" \
+ "${QEMU_LINUX_ARGS[@]}" \
+ -append "root=/dev/nfs nfsroot=/root,v3,tcp,port=2049,mountport=2049 ip=dhcp ${BASE_CMDLINE}"
+}
+
+run_qemu_hda() {
+ check_hd
+ exec ${QEMU_EXEC} \
+ "${QEMU_ARGS[@]}" \
+ -drive file=${PTXDIST_PLATFORMDIR}/images/malta.hdimg,index=0,media=disk,format=raw \
+ "${QEMU_EXTRA_ARGS[@]}" \
+ "${QEMU_LINUX_ARGS[@]}" \
+ -append "root=/dev/sda1 rootfstype=ext4 rootwait ${BASE_CMDLINE}"
+}
+
+run_qemu_barebox() {
+ check_hd
+ exec ${QEMU_EXEC} \
+ "${QEMU_ARGS[@]}" \
+ "${QEMU_EXTRA_ARGS[@]}" \
+ "${QEMU_BAREBOX_ARGS[@]}"
+}
+
+target="${1:-hda}"
+
+#set -x
+run_qemu_${target}