Add can-dev-mapping-helper 42/25142/1 9.99.3 jellyfish/9.99.3 jellyfish_9.99.3
authorScott Murray <scott.murray@konsulko.com>
Wed, 19 Aug 2020 22:37:51 +0000 (18:37 -0400)
committerScott Murray <scott.murray@konsulko.com>
Wed, 19 Aug 2020 22:37:51 +0000 (18:37 -0400)
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 <scott.murray@konsulko.com>
Change-Id: Ife02f75f57ac7bbdee6b02217e2ab657fe8c36e0

recipes-apis/agl-service-can-low-level/agl-service-can-low-level_git.bbappend [new file with mode: 0644]
recipes-apis/agl-service-can-low-level/can-dev-mapping-helper_1.0.bb [new file with mode: 0644]
recipes-apis/agl-service-can-low-level/files/can-dev-mapping-helper.conf [new file with mode: 0644]
recipes-apis/agl-service-can-low-level/files/can-dev-mapping-helper.service [new file with mode: 0644]
recipes-apis/agl-service-can-low-level/files/can-dev-mapping-helper.sh [new file with mode: 0644]
recipes-config/cluster-lin-bridging-config/cluster-lin-bridging-config.bb
recipes-kernel/sllin/files/sllin-demo-virtual.service [deleted file]
recipes-kernel/sllin/files/sllin-demo.service
recipes-kernel/sllin/files/start_lin_demo.sh
recipes-kernel/sllin/sllin.bb
recipes-platform/packagegroups/packagegroup-agl-demo.bb

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 (file)
index 0000000..4f28210
--- /dev/null
@@ -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 (file)
index 0000000..37793fd
--- /dev/null
@@ -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 (file)
index 0000000..c89cc4d
--- /dev/null
@@ -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 (file)
index 0000000..0436716
--- /dev/null
@@ -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 (file)
index 0000000..c81014f
--- /dev/null
@@ -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
index 2b6567a..315da40 100644 (file)
@@ -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 (file)
index 7882421..0000000
+++ /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
index 2f2f5ac..e3e7432 100644 (file)
@@ -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
  
index 26f64c0..c7627ca 100755 (executable)
@@ -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
index 7c4313f..0478b21 100644 (file)
@@ -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"
index 664878b..7fb098a 100644 (file)
@@ -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 ?= " \