From 8b67634527da89eb181311e6077556ee7cfb8de6 Mon Sep 17 00:00:00 2001 From: Ramon Moesching Date: Thu, 14 Feb 2019 13:54:29 +0100 Subject: [PATCH] socket-uart: refelct origin uart as pseudo tty device on local host Bind pseudo tty and origin uart with socat usage (tcp socket) Socat is started by systemd service. BugzID: 52063 Signed-off-by: Ramon Moesching --- recipes-core/images/netmodule-linux-image.bb | 1 + .../socket-uart/files/socat-socket-uart | 16 +++++++ .../socket-uart/files/socket-uart.service | 22 ++++++++++ .../socket-uart/socket-uart_0.0.1.bb | 44 +++++++++++++++++++ 4 files changed, 83 insertions(+) create mode 100644 recipes-extended/socket-uart/files/socat-socket-uart create mode 100644 recipes-extended/socket-uart/files/socket-uart.service create mode 100644 recipes-extended/socket-uart/socket-uart_0.0.1.bb diff --git a/recipes-core/images/netmodule-linux-image.bb b/recipes-core/images/netmodule-linux-image.bb index 5727ec0..7c3896f 100644 --- a/recipes-core/images/netmodule-linux-image.bb +++ b/recipes-core/images/netmodule-linux-image.bb @@ -95,6 +95,7 @@ IMAGE_INSTALL_append_am335x-nmhw21 = " \ libgpiod \ battery-test \ cryptodev-module \ + socket-uart \ " FPGA_INSTALL = " \ diff --git a/recipes-extended/socket-uart/files/socat-socket-uart b/recipes-extended/socket-uart/files/socat-socket-uart new file mode 100644 index 0000000..451bfdc --- /dev/null +++ b/recipes-extended/socket-uart/files/socat-socket-uart @@ -0,0 +1,16 @@ +#!/bin/sh - +if [ -x "$(command -v socat)" ]; then + echo "start listening socket-uart services with server IP $SOCAT_SOCKET_UART_IP on port $SOCAT_SOCKET_UART_PORT" + cmd='socat -s pty,link=/dev/ttyUM0,rawer tcp:$SOCAT_SOCKET_UART_IP:$SOCAT_SOCKET_UART_PORT' + + if [[ -n $SOCAT_SOCKET_UART_MSS ]]; then + eval $cmd,mss=$SOCAT_SOCKET_UART_MSS + else + eval $cmd + fi + +else + echo "socat command not available on your target or environment" + # return 1 so that systemd knows the service failed to start + exit 1 +fi diff --git a/recipes-extended/socket-uart/files/socket-uart.service b/recipes-extended/socket-uart/files/socket-uart.service new file mode 100644 index 0000000..2da460a --- /dev/null +++ b/recipes-extended/socket-uart/files/socket-uart.service @@ -0,0 +1,22 @@ +[Unit] +Description=Bind uart socket with pseudo tty based on socat + +[Service] +Type=forking +ExecStart=/usr/bin/socat-socket-uart +PIDFile=/var/run/socket-uart.pid + +#KillSignal=SIGQUIT + +Environment=SOCAT_SOCKET_UART_IP='192.168.1.42' SOCAT_SOCKET_UART_PORT='2204' SOCAT_SOCKET_UART_MSS='256' + +ExecReload=/bin/kill -HUP $MAINPID +Restart=on-failure +RestartSec=10 + +[Unit] +Wants=network-online.target +After=network-online.target + +[Install] +WantedBy=multi-user.target diff --git a/recipes-extended/socket-uart/socket-uart_0.0.1.bb b/recipes-extended/socket-uart/socket-uart_0.0.1.bb new file mode 100644 index 0000000..c9164af --- /dev/null +++ b/recipes-extended/socket-uart/socket-uart_0.0.1.bb @@ -0,0 +1,44 @@ +inherit systemd +SUMMARY = "Bind socket-uart with speudo tty based on socat" +DESCRIPTION = "Bind to origin uart which is provided as socket-uart as pseudo tty based on socat" +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302 \ + " +SRC_URI = " \ + file://socket-uart.service \ + file://socat-socket-uart \ + " + +S = "${WORKDIR}" + +RDEPENS = "socat" + +# Override variable from local.conf with +# SOCAT_SOCKET_UART_DEFAULT_IP_pn-socket-uart = "6.6.6.6" +# SOCAT_SOCKET_UART_DEFAULT_PORT_pn-socket-uart = "2222" +# Don'"t set mss +# SOCAT_SOCKET_UART_DEFAULT_MSS_pn-socket-uart = "" + +SOCAT_SOCKET_UART_DEFAULT_IP ??= "192.168.1.42" +SOCAT_SOCKET_UART_DEFAULT_PORT ??= "2204" +SOCAT_SOCKET_UART_DEFAULT_MSS ??= "" + +SYSTEMD_SERVICE_${PN} = "socket-uart.service" + +do_configure() { + sed -i "s/SOCAT_SOCKET_UART_IP='192.168.1.42'/SOCAT_SOCKET_UART_IP='${SOCAT_SOCKET_UART_DEFAULT_IP}'/g" ${S}/socket-uart.service + sed -i "s/SOCAT_SOCKET_UART_PORT='2204'/SOCAT_SOCKET_UART_PORT='${SOCAT_SOCKET_UART_DEFAULT_PORT}'/g" ${S}/socket-uart.service + sed -i "s/SOCAT_SOCKET_UART_MSS='256'/SOCAT_SOCKET_UART_MSS='${SOCAT_SOCKET_UART_DEFAULT_MSS}'/g" ${S}/socket-uart.service +} + +do_install() { + install -d ${D}/lib/systemd/system + install -m 644 ${WORKDIR}/socket-uart.service ${D}/lib/systemd/system/ + + install -d ${D}/usr/bin/ + install -m 744 ${WORKDIR}/socat-socket-uart ${D}/usr/bin/ +} + +# Add all SOCAT_SOCKET_* variables to sstate hash calculation and force package_write_rpm exectution from scratch everytime +do_configure[vardeps] = "SOCAT_SOCKET_UART_DEFAULT_IP SOCAT_SOCKET_UART_DEFAULT_PORT SOCAT_SOCKET_UART_DEFAULT_MSS" +do_package_write_rpm[nostamp] = "1"