[OE-core] [PATCH 5/5] systemd-serialgetty: change to handle SERIAL_CONSOLES

Paul Eggleton paul.eggleton at linux.intel.com
Tue Apr 30 16:53:01 UTC 2013


SERIAL_CONSOLES is now set from SERIAL_CONSOLE if not already set.

This is a little bit gnarly because we have to create a separate service
file for each different baud rate; assume that the first baud rate is
the default, thus preserving the previous behaviour in the event there
is only one baud rate in use.

This change also installs the service file before modifying it in place,
allowing do_install to re-execute properly; additionally the service
file now has the correct permissions (i.e. no execute bit set).

Signed-off-by: Paul Eggleton <paul.eggleton at linux.intel.com>
---
 meta/recipes-core/systemd/systemd-serialgetty.bb | 45 ++++++++++++------------
 1 file changed, 23 insertions(+), 22 deletions(-)

diff --git a/meta/recipes-core/systemd/systemd-serialgetty.bb b/meta/recipes-core/systemd/systemd-serialgetty.bb
index 96cbf31..37c49b1 100644
--- a/meta/recipes-core/systemd/systemd-serialgetty.bb
+++ b/meta/recipes-core/systemd/systemd-serialgetty.bb
@@ -8,37 +8,38 @@ SERIAL_CONSOLE ?= "115200 ttyS0"
 
 SRC_URI = "file://serial-getty@.service"
 
-def get_serial_console_value(d, index):
-    c = d.getVar('SERIAL_CONSOLE', True)
-
-    if len(c):
-        return c.split()[index]
-
-    return ""
-
-def get_baudrate(d):
-    return get_serial_console_value(d, 0)
-
-def get_console(d):
-    return get_serial_console_value(d, 1)
-
 do_install() {
-	if [ ! ${@get_baudrate(d)} = "" ]; then
-		sed -i -e s/\@BAUDRATE\@/${@get_baudrate(d)}/g ${WORKDIR}/serial-getty at .service
+	if [ ! -z "${SERIAL_CONSOLES}" ] ; then
+		default_baudrate=`echo "${SERIAL_CONSOLES}" | sed 's/\;.*//'`
 		install -d ${D}${systemd_unitdir}/system/
 		install -d ${D}${sysconfdir}/systemd/system/getty.target.wants/
-		install ${WORKDIR}/serial-getty at .service ${D}${systemd_unitdir}/system/
-
-		# enable the service
-		ln -sf ${systemd_unitdir}/system/serial-getty at .service \
-			${D}${sysconfdir}/systemd/system/getty.target.wants/serial-getty@${@get_console(d)}.service
+		install -m 0644 ${WORKDIR}/serial-getty at .service ${D}${systemd_unitdir}/system/
+		sed -i -e s/\@BAUDRATE\@/$default_baudrate/g ${D}${systemd_unitdir}/system/serial-getty at .service
+
+		tmp="${SERIAL_CONSOLES}"
+		for entry in $tmp ; do
+			baudrate=`echo $entry | sed 's/\;.*//'`
+			ttydev=`echo $entry | sed -e 's/^[0-9]*\;//' -e 's/\;.*//'`
+			if [ "$baudrate" = "$default_baudrate" ] ; then
+				# enable the service
+				ln -sf ${systemd_unitdir}/system/serial-getty at .service \
+					${D}${sysconfdir}/systemd/system/getty.target.wants/serial-getty@$ttydev.service
+			else
+				# install custom service file for the non-default baudrate
+				install -m 0644 ${WORKDIR}/serial-getty at .service ${D}${systemd_unitdir}/system/serial-getty$baudrate at .service
+				sed -i -e s/\@BAUDRATE\@/$baudrate/g ${D}${systemd_unitdir}/system/serial-getty$baudrate at .service
+				# enable the service
+				ln -sf ${systemd_unitdir}/system/serial-getty$baudrate at .service \
+					${D}${sysconfdir}/systemd/system/getty.target.wants/serial-getty$baudrate@$ttydev.service
+			fi
+		done
 	fi
 }
 
 RDEPENDS_${PN} = "systemd"
 
 # This is a machine specific file
-FILES_${PN} = "${systemd_unitdir}/system/serial-getty at .service ${sysconfdir}"
+FILES_${PN} = "${systemd_unitdir}/system/*.service ${sysconfdir}"
 PACKAGE_ARCH = "${MACHINE_ARCH}"
 
 # As this package is tied to systemd, only build it when we're also building systemd.
-- 
1.8.1.2





More information about the Openembedded-core mailing list