summaryrefslogtreecommitdiffstats
path: root/configs/platform-mips/run
diff options
context:
space:
mode:
authorOleksij Rempel <o.rempel@pengutronix.de>2020-02-16 09:38:21 +0100
committerRobert Schwebel <r.schwebel@pengutronix.de>2020-02-16 11:31:56 +0100
commit521707e129e9d9039b430a201a33d45af143a6d7 (patch)
treef0b1d7cb1aadff978b9775a53d2ce56f1d0aaa31 /configs/platform-mips/run
parente6d07898c3595d7b4f2b9cad989231cd01f72b0e (diff)
downloadDistroKit-521707e129e9d9039b430a201a33d45af143a6d7.tar.gz
DistroKit-521707e129e9d9039b430a201a33d45af143a6d7.tar.xz
platform-mips: add basic qemu malta support
Currently this platform can build rootfs and run only barebox. Other parts need more work, but even on this stage we would be able to make toolchain and barebox regression tests. Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
Diffstat (limited to 'configs/platform-mips/run')
-rwxr-xr-xconfigs/platform-mips/run121
1 files changed, 121 insertions, 0 deletions
diff --git a/configs/platform-mips/run b/configs/platform-mips/run
new file mode 100755
index 0000000..2d3b855
--- /dev/null
+++ b/configs/platform-mips/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/linuximage" ]; then
+ echo "error: run 'ptxdist go' first"
+ exit 1
+fi
+
+# the emulator to run
+QEMU_EXEC="${PTXDIST_PLATFORMDIR}/sysroot-host/bin/qemu-system-mips"
+
+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 loglevel=5 systemd.log_level=warning systemd.show_status=auto"
+
+# Machine to emulate
+QEMU_ARGS=( -M malta -m 256 -serial stdio -monitor null)
+# 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=2000-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}