From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: From: Oleksij Rempel Date: Wed, 5 Feb 2020 08:14:53 +0100 Message-Id: <20200205071453.24804-4-o.rempel@pengutronix.de> In-Reply-To: <20200205071453.24804-1-o.rempel@pengutronix.de> References: <20200205071453.24804-1-o.rempel@pengutronix.de> MIME-Version: 1.0 Subject: [DistroKit] [PATCH v1 3/3] platform-mips: add qemu support for malta List-Id: DistroKit Mailinglist List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: distrokit-bounces@pengutronix.de Sender: "DistroKit" To: pmamonov@gmail.com, antonynpavlov@gmail.com, distrokit@pengutronix.de, rsh@pengutronix.de, mol@pengutronix.de Cc: Oleksij Rempel port platform-v7a qemu scripts to MIPS QEMU Malta. Currently it was tested only with barebox Signed-off-by: Oleksij Rempel --- configs/platform-mips/qemu-common | 92 +++++++++++++++++++++++++ configs/platform-mips/run | 111 ++++++++++++++++++++++++++++++ 2 files changed, 203 insertions(+) create mode 100755 configs/platform-mips/qemu-common create mode 100755 configs/platform-mips/run diff --git a/configs/platform-mips/qemu-common b/configs/platform-mips/qemu-common new file mode 100755 index 0000000..86e2584 --- /dev/null +++ b/configs/platform-mips/qemu-common @@ -0,0 +1,92 @@ +#!/bin/bash +# +# This is sourced by the run scripts. + +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 + +if [ ! -e "${PTXDIST_PLATFORMDIR}/images/hd.img" ]; then + echo "error: run 'ptxdist images' first" + exit 1 +fi + +#if [ ! -e "${PTXDIST_PLATFORMDIR}/images/nor0.img" ]; then +# echo "error: run 'ptxdist images' first" +# exit 1 +#fi + +# the emulator to run +QEMU_EXEC="${PTXDIST_PLATFORMDIR}/sysroot-host/bin/qemu-system-arm" + +if [ ! -e "${QEMU_EXEC}" ]; then + echo "error: enable and install 'host-qemu' first" + exit 1 +fi + +# disable this, if you want to have some graphics output +QEMU_NOGRAPHIC=-nographic + +# Machine to emulate: The default kernel is prepared to run on "versatile pb" +QEMU_MACHINE=vexpress-a9 + +# +# 'user mode' network related settings +# +PLATFORM_IP="10.0.2.7" + +# +# *_INTERNAL_PORT: the port a service would connect (in the emulated system) +# *_EXTERNAL_PORT: port QEMU opens at the host side to give access to the ${*_INTERNAL_PORT} +# +TELNET_INTERNAL_PORT=23 +TELNET_EXTERNAL_PORT=20023 + +HTTP_INTERNAL_PORT=80 +HTTP_EXTERNAL_PORT=20080 + +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 + if ${QEMU_EXEC} --help | grep -q -- '-net vde'; then + QEMU_NET="-net vde,vlan=1,sock=${VDE_SOCKET}" + fi +fi +if [ -z "${QEMU_NET}" ]; then + QEMU_NET="-net user,vlan=1" + PLATFORM_IP="" +fi + +QEMU_REDIR=" \ + -redir tcp:${TELNET_EXTERNAL_PORT}:${PLATFORM_IP}:${TELNET_INTERNAL_PORT} \ + -redir tcp:${HTTP_EXTERNAL_PORT}:${PLATFORM_IP}:${HTTP_INTERNAL_PORT} \ +" diff --git a/configs/platform-mips/run b/configs/platform-mips/run new file mode 100755 index 0000000..c417f04 --- /dev/null +++ b/configs/platform-mips/run @@ -0,0 +1,111 @@ +#!/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/linuximage -dtb ${PTXDIST_PLATFORMDIR}/images/malta-v2p-ca9.dtb ) +# 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_barebox() { + check_hd + exec ${QEMU_EXEC} \ + "${QEMU_ARGS[@]}" \ + "${QEMU_EXTRA_ARGS[@]}" \ + "${QEMU_BAREBOX_ARGS[@]}" +} + +target="${1:-9p}" + +#set -x +run_qemu_${target} -- 2.25.0 _______________________________________________ DistroKit mailing list DistroKit@pengutronix.de