From 5bdba822918cfffb69c0e1983661c32586bed590 Mon Sep 17 00:00:00 2001 From: Scott Murray Date: Wed, 19 Aug 2020 18:37:51 -0400 Subject: [PATCH] Add can-dev-mapping-helper Changes: - Add a can-dev-mapping-helper.sh script and systemd unit to drive it, the script checks if the CAN devices specified in the low-can configuration file /etc/dev-mapping.conf exist, and if not brings up corresponding virtual CAN devices. - Add a systemd over-ride conf file for agl-service-can-low-level that makes can-dev-mapping-helper a dependency. This should ensure that the low-can binding always starts even if there are no physical CAN hardware devices. - Added a Before statement to sllin-demo.service to ensure that it will run before can-dev-mapping-helper and ensure that lin_config can create sllin0 correctly. - Removed the sllin-demo-virtual systemd unit, as it will no longer be required with can-dev-mapping-helper. - Updated the /var/run paths in sllin-demo.service and associated start_lin_demo.sh script to quiet systemd warnings about /var/run usage. Bug-AGL: SPEC-3540 Signed-off-by: Scott Murray Change-Id: Ife02f75f57ac7bbdee6b02217e2ab657fe8c36e0 --- .../agl-service-can-low-level_git.bbappend | 10 ++++++ .../can-dev-mapping-helper_1.0.bb | 21 +++++++++++++ .../files/can-dev-mapping-helper.conf | 3 ++ .../files/can-dev-mapping-helper.service | 6 ++++ .../files/can-dev-mapping-helper.sh | 36 ++++++++++++++++++++++ .../cluster-lin-bridging-config.bb | 1 - .../sllin/files/sllin-demo-virtual.service | 12 -------- recipes-kernel/sllin/files/sllin-demo.service | 3 +- recipes-kernel/sllin/files/start_lin_demo.sh | 3 +- recipes-kernel/sllin/sllin.bb | 7 ----- .../packagegroups/packagegroup-agl-demo.bb | 6 ++-- 11 files changed, 83 insertions(+), 25 deletions(-) create mode 100644 recipes-apis/agl-service-can-low-level/agl-service-can-low-level_git.bbappend create mode 100644 recipes-apis/agl-service-can-low-level/can-dev-mapping-helper_1.0.bb create mode 100644 recipes-apis/agl-service-can-low-level/files/can-dev-mapping-helper.conf create mode 100644 recipes-apis/agl-service-can-low-level/files/can-dev-mapping-helper.service create mode 100644 recipes-apis/agl-service-can-low-level/files/can-dev-mapping-helper.sh delete mode 100644 recipes-kernel/sllin/files/sllin-demo-virtual.service diff --git a/recipes-apis/agl-service-can-low-level/agl-service-can-low-level_git.bbappend b/recipes-apis/agl-service-can-low-level/agl-service-can-low-level_git.bbappend new file mode 100644 index 000000000..4f2821043 --- /dev/null +++ b/recipes-apis/agl-service-can-low-level/agl-service-can-low-level_git.bbappend @@ -0,0 +1,10 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/files:" + +SRC_URI += "file://can-dev-mapping-helper.conf" + +do_install_append() { + install -D -m 0644 ${WORKDIR}/can-dev-mapping-helper.conf \ + ${D}${sysconfdir}/systemd/system/afm-service-agl-service-can-low-level-.service.d/can-dev-mapping-helper.conf +} + +RDEPENDS_${PN} += "can-dev-mapping-helper" diff --git a/recipes-apis/agl-service-can-low-level/can-dev-mapping-helper_1.0.bb b/recipes-apis/agl-service-can-low-level/can-dev-mapping-helper_1.0.bb new file mode 100644 index 000000000..37793fd6f --- /dev/null +++ b/recipes-apis/agl-service-can-low-level/can-dev-mapping-helper_1.0.bb @@ -0,0 +1,21 @@ +SUMMARY = "Systemd unit for agl-service-can-low-level CAN device helper" +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302" + +inherit systemd allarch + +SRC_URI = "file://can-dev-mapping-helper.service \ + file://can-dev-mapping-helper.sh \ +" + +do_configure[noexec] = "1" +do_compile[noexec] = "1" + +do_install() { + install -D -m 0644 ${WORKDIR}/${BPN}.service ${D}${systemd_system_unitdir}/${BPN}.service + install -D -m 0755 ${WORKDIR}/${BPN}.sh ${D}${sbindir}/${BPN}.sh +} + +FILES_${PN} += "${systemd_system_unitdir}" + +RDEPENDS_${PN} += "bash" diff --git a/recipes-apis/agl-service-can-low-level/files/can-dev-mapping-helper.conf b/recipes-apis/agl-service-can-low-level/files/can-dev-mapping-helper.conf new file mode 100644 index 000000000..c89cc4d87 --- /dev/null +++ b/recipes-apis/agl-service-can-low-level/files/can-dev-mapping-helper.conf @@ -0,0 +1,3 @@ +[Unit] +Wants=can-dev-mapping-helper.service +After=can-dev-mapping-helper.service diff --git a/recipes-apis/agl-service-can-low-level/files/can-dev-mapping-helper.service b/recipes-apis/agl-service-can-low-level/files/can-dev-mapping-helper.service new file mode 100644 index 000000000..0436716cb --- /dev/null +++ b/recipes-apis/agl-service-can-low-level/files/can-dev-mapping-helper.service @@ -0,0 +1,6 @@ +[Unit] +Description=CAN interface helper + +[Service] +ExecStart=/usr/sbin/can-dev-mapping-helper.sh +Type=oneshot diff --git a/recipes-apis/agl-service-can-low-level/files/can-dev-mapping-helper.sh b/recipes-apis/agl-service-can-low-level/files/can-dev-mapping-helper.sh new file mode 100644 index 000000000..c81014f3e --- /dev/null +++ b/recipes-apis/agl-service-can-low-level/files/can-dev-mapping-helper.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +# +# Script to bring up CAN interfaces configured in /etc/dev-mapping.conf +# as vcan interfaces if no physical interface is present. +# + +vcan_up() { + if [ -n "$1" ]; then + echo "Bringing up $1 as virtual CAN device" + ip link add dev $1 type vcan + ip link set up $1 + fi +} + +if [ ! -f /etc/dev-mapping.conf ]; then + exit 0 +fi + +hs=$(grep ^hs= /etc/dev-mapping.conf |cut -d= -f2 |tr -d '"') +ls=$(grep ^ls= /etc/dev-mapping.conf |cut -d= -f2 |tr -d '"') + +if [ -n "$hs" ]; then + echo "Checking $hs" + if ! ifconfig $hs >/dev/null 2>&1; then + vcan_up $hs + fi +fi +if [ -n "$ls" -a "$ls" != "$hs" ]; then + echo "Checking $ls" + if ! ifconfig $ls >/dev/null 2>&1; then + vcan_up $ls + fi +fi + +exit 0 diff --git a/recipes-config/cluster-lin-bridging-config/cluster-lin-bridging-config.bb b/recipes-config/cluster-lin-bridging-config/cluster-lin-bridging-config.bb index 2b6567a7a..315da400f 100644 --- a/recipes-config/cluster-lin-bridging-config/cluster-lin-bridging-config.bb +++ b/recipes-config/cluster-lin-bridging-config/cluster-lin-bridging-config.bb @@ -25,5 +25,4 @@ FILES_${PN} += "${systemd_system_unitdir}" RDEPENDS_${PN} = " \ can-utils \ sllin \ - sllin-virtual \ " diff --git a/recipes-kernel/sllin/files/sllin-demo-virtual.service b/recipes-kernel/sllin/files/sllin-demo-virtual.service deleted file mode 100644 index 788242197..000000000 --- a/recipes-kernel/sllin/files/sllin-demo-virtual.service +++ /dev/null @@ -1,12 +0,0 @@ -[Unit] -Description=LIN demo configuration (virtual) -ConditionPathExists=!/dev/ttyUSB0 -After=afm-system-daemon.service - -[Service] -Type=oneshot -ExecStart=/usr/bin/start_lin_demo.sh -RemainAfterExit=yes - -[Install] -WantedBy=multi-user.target diff --git a/recipes-kernel/sllin/files/sllin-demo.service b/recipes-kernel/sllin/files/sllin-demo.service index 2f2f5ac23..e3e7432f3 100644 --- a/recipes-kernel/sllin/files/sllin-demo.service +++ b/recipes-kernel/sllin/files/sllin-demo.service @@ -2,10 +2,11 @@ Description=LIN demo configuration ConditionPathExists=/dev/ttyUSB0 After=afm-system-daemon.service +Before=can-dev-mapping-helper.service [Service] Type=forking -PIDFile=/var/run/lin_config.pid +PIDFile=/run/lin_config/lin_config.pid ExecStart=/usr/bin/start_lin_demo.sh RemainAfterExit=yes diff --git a/recipes-kernel/sllin/files/start_lin_demo.sh b/recipes-kernel/sllin/files/start_lin_demo.sh index 26f64c0a1..c7627ca74 100755 --- a/recipes-kernel/sllin/files/start_lin_demo.sh +++ b/recipes-kernel/sllin/files/start_lin_demo.sh @@ -4,7 +4,8 @@ if [ -c /dev/ttyUSB0 ]; then sleep 1 /usr/bin/lin_config -c /etc/lin_config.conf -a sllin:/dev/ttyUSB0 - pidof lin_config > /var/run/lin_config.pid + mkdir -p /run/lin_config/ + pidof lin_config > /run/lin_config/lin_config.pid sleep 1 else ip link add dev sllin0 type vcan diff --git a/recipes-kernel/sllin/sllin.bb b/recipes-kernel/sllin/sllin.bb index 7c4313f16..0478b21a7 100644 --- a/recipes-kernel/sllin/sllin.bb +++ b/recipes-kernel/sllin/sllin.bb @@ -18,7 +18,6 @@ SRC_URI_append = " \ file://0003-Allow-recent-kernels-newer-4.11.x-to-build.patch;pnum=2 \ file://0001-Disable-sllin-driver-debug-log.patch;pnum=2 \ file://sllin-demo.service \ - file://sllin-demo-virtual.service \ file://start_lin_demo.sh \ file://lin_config.conf \ " @@ -30,22 +29,16 @@ SLLINBAUDRATE ??= "9600" module_conf_sllin = "options sllin baudrate=${SLLINBAUDRATE}" SYSTEMD_SERVICE_${PN} = "sllin-demo.service" -SYSTEMD_SERVICE_${PN}-virtual = "sllin-demo-virtual.service" do_install_append () { install -d 644 ${D}/${bindir} install -m 755 ${WORKDIR}/start_lin_demo.sh ${D}/${bindir}/start_lin_demo.sh install -d ${D}${systemd_system_unitdir} install -m 0644 ${WORKDIR}/sllin-demo.service ${D}${systemd_system_unitdir}/ - install -m 0644 ${WORKDIR}/sllin-demo-virtual.service ${D}${systemd_system_unitdir}/ install -d ${D}${sysconfdir} install -m 0644 ${WORKDIR}/lin_config.conf ${D}${sysconfdir}/ } -PACKAGES =+ "${PN}-virtual" - FILES_${PN} += "${bindir}/start_lin_demo.sh ${sysconfdir}/lin_config.conf" -FILES_${PN}-virtual = "${systemd_system_unitdir}/sllin-demo-virtual.service" - RDEPENDS_${PN} += "lin-config" diff --git a/recipes-platform/packagegroups/packagegroup-agl-demo.bb b/recipes-platform/packagegroups/packagegroup-agl-demo.bb index 664878b84..7fb098ad6 100644 --- a/recipes-platform/packagegroups/packagegroup-agl-demo.bb +++ b/recipes-platform/packagegroups/packagegroup-agl-demo.bb @@ -23,10 +23,10 @@ MOST_DRIVERS_cyclone5 ?= "" # HVAC dependencies ################### -LIN_DRIVERS ??= " sllin sllin-virtual" +LIN_DRIVERS ??= " sllin" # These boards use different kernels - needs to be checked -LIN_DRIVERS_dra7xx-evm ?= "sllin-virtual" -LIN_DRIVERS_dragonboard-410c ?= "sllin-virtual" +LIN_DRIVERS_dra7xx-evm ?= "" +LIN_DRIVERS_dragonboard-410c ?= "" # UNICENS service UNICENS ?= " \ -- 2.16.6