diff options
Diffstat (limited to 'configs/platform-mipsel/run')
-rwxr-xr-x | configs/platform-mipsel/run | 121 |
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} |