lirc: Fixed build issues with recent systems

Now runs as unprivileged user
Improved startup script
This commit is contained in:
Alan Mizrahi 2013-03-11 23:38:53 +09:00
parent 3ce60520c4
commit 731ee8b18b
12 changed files with 396 additions and 22 deletions

View File

@ -1,12 +1,6 @@
drwxr-xr-x root/root etc/
drwxr-xr-x root/root etc/rc.d/
-rwxr-xr-x root/root etc/rc.d/lircd
drwxr-xr-x root/root lib/
drwxr-xr-x root/root lib/modules/
drwxr-xr-x root/root lib/modules/<kernel-version>/
drwxr-xr-x root/root lib/modules/<kernel-version>/misc/
-rw-r--r-- root/root lib/modules/<kernel-version>/misc/lirc_dev.ko
-rw-r--r-- root/root lib/modules/<kernel-version>/misc/lirc_serial.ko
drwxr-xr-x root/root usr/
drwxr-xr-x root/root usr/bin/
-rwxr-xr-x root/root usr/bin/ircat

View File

@ -1,3 +1,8 @@
8f59ad9b5931b23dced6925272a519ce irxevent_name.diff
087a7d102e1c96bf1179f38db2b0b237 kernel-2.6.39.patch
9ee196bd03ea44af5a752fb0cc6ca96a linux-3.8.patch
b232aef26f23fe33ea8305d276637086 lirc-0.9.0.tar.bz2
b8936af7efea355f95cabcc67798e4be lircd
1f8b104a2365d9f93404b143f499059b lirc_atiusb-kfifo.patch
eba5edd29ca9e8a69d62d86e248f95a0 lirc_serial.patch
1cce37e18e3f6f46044abab29016d18f lirc_wpc8769l.patch
aca36f475fe6486d2b710f3556dce379 lircd
b70cc9640505205446ec47b7d4779f38 lircd-handle-large-config.patch

View File

@ -1,13 +1,21 @@
# Description: Linux Infrared Remote Control
# URL: http://www.lirc.org/
# Maintainer: Alan Mizrahi, alan at mizrahi dot com dot ve
#
# Depends on:
name=lirc
version=0.9.0
release=1
source=(http://download.sourceforge.net/$name/$name-$version.tar.bz2 irxevent_name.diff lircd)
release=2
source=(
http://download.sourceforge.net/$name/$name-$version.tar.bz2
kernel-2.6.39.patch
linux-3.8.patch
lirc_atiusb-kfifo.patch
lirc_wpc8769l.patch
lirc_serial.patch
lircd-handle-large-config.patch
lircd
)
# Possible drivers:
#
@ -28,12 +36,25 @@ LIRC_DRIVER=serial
build() {
cd lirc-$version
# Patch to let irxevent use different program names
patch -p1 -i $SRC/irxevent_name.diff
patch -p1 -i $SRC/lirc_serial.patch
patch -p1 -i $SRC/lirc_wpc8769l.patch
patch -p1 -i $SRC/lircd-handle-large-config.patch
patch -p1 -i $SRC/lirc_atiusb-kfifo.patch
patch -p1 -i $SRC/kernel-2.6.39.patch
patch -p1 -i $SRC/linux-3.8.patch
./configure --prefix=/usr --mandir=/usr/man --disable-static --with-driver=$LIRC_DRIVER
make
./configure \
--prefix=/usr \
--mandir=/usr/man \
--disable-static \
--with-transmitter \
--enable-sandboxed \
--with-syslog=LOG_DAEMON \
--with-driver=$LIRC_DRIVER
make -j 1
make DESTDIR=$PKG install
install -D -m 755 $SRC/lircd $PKG/etc/rc.d/lircd
rm -rf $PKG/dev $PKG/var
# Uncomment this line if you want to use the kernel module(s) provided by lirc
rm -rf $PKG/lib
}

View File

@ -8,8 +8,8 @@ Please refer to the LIRC website for more details.
PRE-INSTALL
This port builds lirc using the serial driver by default.
Just edit the Pkgfile to set LIRC_DRIVER line to your needs.
Just change the LIRC_DRIVER line in the Pkgfile to suit your needs.
POST-INSTALL
PRECAUTION

54
lirc/kernel-2.6.39.patch Normal file
View File

@ -0,0 +1,54 @@
diff -ru lirc-0.9.0/drivers//lirc_atiusb/lirc_atiusb.c lirc-0.9.0.new/drivers//lirc_atiusb/lirc_atiusb.c
--- lirc-0.9.0/drivers//lirc_atiusb/lirc_atiusb.c 2011-03-25 23:28:18.000000000 +0100
+++ lirc-0.9.0.new/drivers//lirc_atiusb/lirc_atiusb.c 2011-06-07 17:02:20.356580306 +0200
@@ -48,7 +48,6 @@
#include <linux/slab.h>
#include <linux/module.h>
#include <linux/kmod.h>
-#include <linux/smp_lock.h>
#include <linux/completion.h>
#include <linux/uaccess.h>
#include <linux/usb.h>
diff -ru lirc-0.9.0/drivers//lirc_i2c/lirc_i2c.c lirc-0.9.0.new/drivers//lirc_i2c/lirc_i2c.c
--- lirc-0.9.0/drivers//lirc_i2c/lirc_i2c.c 2011-03-25 23:28:18.000000000 +0100
+++ lirc-0.9.0.new/drivers//lirc_i2c/lirc_i2c.c 2011-06-07 17:04:19.725933627 +0200
@@ -555,8 +555,8 @@
kfree(ir);
return -EINVAL;
}
- printk(KERN_INFO "lirc_i2c: chip 0x%x found @ 0x%02x (%s)\n",
- adap->id, addr, ir->c.name);
+ printk(KERN_INFO "lirc_i2c: chip found @ 0x%02x (%s)\n",
+ addr, ir->c.name);
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 31)
/* register device */
diff -ru lirc-0.9.0/drivers//lirc_wpc8769l/lirc_wpc8769l.c lirc-0.9.0.new/drivers//lirc_wpc8769l/lirc_wpc8769l.c
--- lirc-0.9.0/drivers//lirc_wpc8769l/lirc_wpc8769l.c 2011-03-25 23:28:18.000000000 +0100
+++ lirc-0.9.0.new/drivers//lirc_wpc8769l/lirc_wpc8769l.c 2011-06-07 17:07:23.984935411 +0200
@@ -361,14 +361,14 @@
size = count << 3;
ldata = (unsigned long *) data_buf;
- next_one = generic_find_next_le_bit(ldata, size, 0);
+ next_one = find_next_zero_bit_le(ldata, size, 0);
if (next_one > 0)
put_pulse_bit(next_one
* WPC8769L_USECS_PER_BIT);
while (next_one < size) {
- next_zero = generic_find_next_zero_le_bit(ldata,
+ next_zero = find_next_zero_bit_le(ldata,
size, next_one + 1);
put_space_bit(
@@ -376,7 +376,7 @@
* WPC8769L_USECS_PER_BIT);
if (next_zero < size) {
- next_one = generic_find_next_le_bit(ldata,
+ next_one = find_next_bit_le(ldata,
size, next_zero + 1);
put_pulse_bit(

80
lirc/linux-3.8.patch Normal file
View File

@ -0,0 +1,80 @@
diff -upr lirc-0.9.0.orig/drivers/lirc_serial/lirc_serial.c lirc-0.9.0/drivers/lirc_serial/lirc_serial.c
--- lirc-0.9.0.orig/drivers/lirc_serial/lirc_serial.c 2013-02-21 02:36:25.000000000 +0200
+++ lirc-0.9.0/drivers/lirc_serial/lirc_serial.c 2013-02-21 02:39:55.000000000 +0200
@@ -1103,12 +1103,12 @@ static struct lirc_driver driver = {
static struct platform_device *lirc_serial_dev;
-static int __devinit lirc_serial_probe(struct platform_device *dev)
+static int lirc_serial_probe(struct platform_device *dev)
{
return 0;
}
-static int __devexit lirc_serial_remove(struct platform_device *dev)
+static int lirc_serial_remove(struct platform_device *dev)
{
return 0;
}
@@ -1159,7 +1159,7 @@ static int lirc_serial_resume(struct pla
static struct platform_driver lirc_serial_driver = {
.probe = lirc_serial_probe,
- .remove = __devexit_p(lirc_serial_remove),
+ .remove = lirc_serial_remove,
.suspend = lirc_serial_suspend,
.resume = lirc_serial_resume,
.driver = {
diff -upr lirc-0.9.0.orig/drivers/lirc_sir/lirc_sir.c lirc-0.9.0/drivers/lirc_sir/lirc_sir.c
--- lirc-0.9.0.orig/drivers/lirc_sir/lirc_sir.c 2013-02-21 02:36:25.000000000 +0200
+++ lirc-0.9.0/drivers/lirc_sir/lirc_sir.c 2013-02-21 02:38:24.000000000 +0200
@@ -1290,19 +1290,19 @@ static int init_lirc_sir(void)
return 0;
}
-static int __devinit lirc_sir_probe(struct platform_device *dev)
+static int lirc_sir_probe(struct platform_device *dev)
{
return 0;
}
-static int __devexit lirc_sir_remove(struct platform_device *dev)
+static int lirc_sir_remove(struct platform_device *dev)
{
return 0;
}
static struct platform_driver lirc_sir_driver = {
.probe = lirc_sir_probe,
- .remove = __devexit_p(lirc_sir_remove),
+ .remove = lirc_sir_remove,
.driver = {
.name = "lirc_sir",
.owner = THIS_MODULE,
diff -upr lirc-0.9.0.orig/drivers/lirc_wpc8769l/lirc_wpc8769l.c lirc-0.9.0/drivers/lirc_wpc8769l/lirc_wpc8769l.c
--- lirc-0.9.0.orig/drivers/lirc_wpc8769l/lirc_wpc8769l.c 2013-02-21 02:36:25.000000000 +0200
+++ lirc-0.9.0/drivers/lirc_wpc8769l/lirc_wpc8769l.c 2013-02-21 02:39:39.000000000 +0200
@@ -930,12 +930,12 @@ static int wpc8769l_acpi_detect(void)
#ifdef MODULE
static struct platform_device *lirc_wpc8769l_platform_dev;
-static int __devinit lirc_wpc8769l_probe(struct platform_device *dev)
+static int lirc_wpc8769l_probe(struct platform_device *dev)
{
return 0;
}
-static int __devexit lirc_wpc8769l_remove(struct platform_device *dev)
+static int lirc_wpc8769l_remove(struct platform_device *dev)
{
return 0;
}
@@ -963,7 +963,7 @@ static int lirc_wpc8769l_resume(struct p
static struct platform_driver lirc_wpc8769l_platform_driver = {
.probe = lirc_wpc8769l_probe,
- .remove = __devexit_p(lirc_wpc8769l_remove),
+ .remove = lirc_wpc8769l_remove,
.suspend = lirc_wpc8769l_suspend,
.resume = lirc_wpc8769l_resume,
.driver = {

View File

@ -0,0 +1,31 @@
From ec3c5660e67c122e2d5eb9cfa838c9709fccf8e0 Mon Sep 17 00:00:00 2001
From: Jason Martin <publicmsu@gmail.com>
Date: Fri, 3 Jun 2011 00:12:51 -0400
Subject: [PATCH] lirc_atiusb: fix buffer alloc to work with new kfifo
I came across posts with regards to lirc_atiusb and its compatibility
with newer kernels, and their use of kfifo.I spent a little bit of time
this evening, and was able to correct the issues with the driver, and
now have a functioning lirc_atiusb device under the 2.6.38 kernel.
Signed-off-by: Jarod Wilson <jarod@redhat.com>
---
drivers/lirc_atiusb/lirc_atiusb.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/drivers/lirc_atiusb/lirc_atiusb.c b/drivers/lirc_atiusb/lirc_atiusb.c
index 52080de..bf2b631 100644
--- a/drivers/lirc_atiusb/lirc_atiusb.c
+++ b/drivers/lirc_atiusb/lirc_atiusb.c
@@ -1048,7 +1048,7 @@ static struct atirf_dev *new_irctl(struct usb_interface *intf)
goto new_irctl_failure_check;
}
- if (lirc_buffer_init(driver->rbuf, dclen, 1)) {
+ if (lirc_buffer_init(driver->rbuf, dclen, 2)) {
mem_failure = 4;
goto new_irctl_failure_check;
}
--
1.7.0.1

13
lirc/lirc_serial.patch Normal file
View File

@ -0,0 +1,13 @@
--- lirc-0.9.0/drivers/lirc_serial/lirc_serial.c.orig 2013-03-11 23:21:07.238776562 +0900
+++ lirc-0.9.0/drivers/lirc_serial/lirc_serial.c 2013-03-11 23:21:41.245768838 +0900
@@ -66,7 +66,10 @@
#include <linux/poll.h>
#include <linux/platform_device.h>
+#include <linux/version.h>
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 4, 0)
#include <asm/system.h>
+#endif
#include <linux/io.h>
#include <linux/irq.h>
#include <linux/fcntl.h>

88
lirc/lirc_wpc8769l.patch Normal file
View File

@ -0,0 +1,88 @@
From 413e83bf504fe9a9a177f27742220cfcb184b034 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Juan=20Jes=C3=BAs=20Garc=C3=ADa=20de=20Soria=20Lucena?= <skandalfo@gmail.com>
Date: Wed, 30 Mar 2011 16:46:35 -0400
Subject: [PATCH] Make lirc_wpc8769l functional again
Signed-off-by: Jarod Wilson <jarod@redhat.com>
---
drivers/lirc_wpc8769l/lirc_wpc8769l.c | 28 +++++++++++++++++-----------
1 files changed, 17 insertions(+), 11 deletions(-)
diff --git a/drivers/lirc_wpc8769l/lirc_wpc8769l.c b/drivers/lirc_wpc8769l/lirc_wpc8769l.c
index f820d11..4d04063 100644
--- a/drivers/lirc_wpc8769l/lirc_wpc8769l.c
+++ b/drivers/lirc_wpc8769l/lirc_wpc8769l.c
@@ -816,10 +816,6 @@ static int set_use_inc(void *data)
/* Reset last timeout value. */
lastus = 0;
- /* Init the read buffer. */
- if (lirc_buffer_init(&rbuf, sizeof(lirc_t), RBUF_LEN) < 0)
- return -ENOMEM;
-
/* Acquire the IRQ. */
result = request_irq(irq, irq_handler,
IRQF_DISABLED | IRQF_SHARED,
@@ -863,9 +859,6 @@ static void set_use_dec(void *data)
/* Free the IRQ. */
free_irq(irq, THIS_MODULE);
dprintk("Freed IRQ %d\n", irq);
-
- /* Free the RX buffer. */
- lirc_buffer_free(&rbuf);
}
static struct lirc_driver driver = {
@@ -1065,19 +1058,29 @@ static int __init lirc_wpc8769l_module_init(void)
/* Do load-time checks. */
wpc8769l_power_up_and_check_if_we_woke_us_up();
+ /* Init the read buffer. */
+ if (lirc_buffer_init(&rbuf, sizeof(lirc_t), RBUF_LEN) < 0) {
+ rc = -ENOMEM;
+ goto exit_platform_exit;
+ }
+
/* Configure the driver hooks. */
driver.features = LIRC_CAN_REC_MODE2;
+ driver.dev = &lirc_wpc8769l_platform_dev->dev;
driver.minor = lirc_register_driver(&driver);
if (driver.minor < 0) {
eprintk("lirc_register_driver failed!\n");
rc = -EIO;
- goto exit_platform_exit;
+ goto exit_release_buffer;
}
iprintk("Driver loaded.\n");
return 0; /* Everything OK. */
+exit_release_buffer:
+ lirc_buffer_free(&rbuf);
+
exit_platform_exit:
lirc_wpc8769l_platform_exit();
@@ -1095,12 +1098,15 @@ module_init(lirc_wpc8769l_module_init);
static void __exit lirc_wpc8769l_module_exit(void)
{
- /* Unregister the platform driver and device. */
- lirc_wpc8769l_platform_exit();
-
/* Unregister the LIRC driver. */
lirc_unregister_driver(driver.minor);
+ /* Free the buffer. */
+ lirc_buffer_free(&rbuf);
+
+ /* Unregister the platform driver and device. */
+ lirc_wpc8769l_platform_exit();
+
/* Release the second range. */
if (baseport2)
release_region(baseport2, WPC8769L_IO_REGION_2_SIZE);
--
1.7.0.1

View File

@ -3,15 +3,54 @@
# /etc/rc.d/lircd: start/stop/restart lirc daemon
#
NAME=lirc
USER=lirc
GROUP=lirc
RUNDIR=/var/run/lirc
PIDFILE=$RUNDIR/lircd.pid
CONFIG=/etc/lircd.conf
DEVICE=/dev/usbirboy
PARAMS="--device=$DEVICE --output=$RUNDIR/lircd --pidfile=$PIDFILE --permission=660 --allow-simulate $CONFIG"
case "$1" in
start)
/usr/sbin/lircd -p 666 /etc/lircd.conf
[ -d $RUNDIR ] || install -d -m 750 -o $USER -g $GROUP $RUNDIR || exit 1
if [ -f $PIDFILE ]; then
pid=$(< $PIDFILE)
if [ ! -d /proc/$pid -o -z "$pid" ]; then
echo "$NAME: removing stale pidfile $PIDFILE" >&2
rm -f $PIDFILE
fi
fi
if [ -f $PIDFILE ]; then
echo "$NAME already running with pid $pid" >&2
exit 1
fi
chown $USER:$GROUP $DEVICE
/usr/bin/sudo -b -H -u $USER /usr/sbin/lircd $PARAMS
;;
stop)
if [ -f /var/run/lircd.pid ]; then
kill $(< /var/run/lircd.pid) && rm -f /var/run/lircd.pid
if [ -f $PIDFILE ]; then
pid=$(< $PIDFILE)
if [ ! -d /proc/$pid -o -z "$pid" ]; then
echo "$NAME: removing stale pidfile $PIDFILE" >&2
rm -f $PIDFILE
else
kill $pid
t=0
while [ -d /proc/$pid -a $t -lt 10 ]; do
sleep 0.5
let t++
done
if [ -d /proc/$pid ]; then
echo "$NAME still running with pid $pid" >&2
else
rm -f $PIDFILE
fi
fi
else
return 1
echo "$NAME is not running" >&2
fi
;;
restart)

View File

@ -0,0 +1,39 @@
From 5efb56bf22a5077db564c766ba7cc37bc269231d Mon Sep 17 00:00:00 2001
From: Jarod Wilson <jarod@redhat.com>
Date: Wed, 6 Apr 2011 11:04:12 -0400
Subject: [PATCH] lircd: handle larger config files in write_socket better
Pointed out by Michael Zanetti on list, irsend LIST has issues with long
config files, which didn't exist in maintainer mode, as we were using a
do while loop to make sure we spit out everything. Just use that loop
all the time.
Signed-off-by: Jarod Wilson <jarod@redhat.com>
---
daemons/lircd.c | 8 ++------
1 files changed, 2 insertions(+), 6 deletions(-)
diff --git a/daemons/lircd.c b/daemons/lircd.c
index 6c21a3a..ddcca05 100644
--- a/daemons/lircd.c
+++ b/daemons/lircd.c
@@ -231,14 +231,10 @@ inline int write_socket(int fd, const char *buf, int len)
int done, todo = len;
while (todo) {
-#ifdef SIM_REC
do {
done = write(fd, buf, todo);
- }
- while (done < 0 && errno == EAGAIN);
-#else
- done = write(fd, buf, todo);
-#endif
+ } while (done < 0 && errno == EAGAIN);
+
if (done <= 0)
return (done);
buf += done;
--
1.7.0.1

10
lirc/pre-install Normal file
View File

@ -0,0 +1,10 @@
#!/bin/sh
# check for lirc group or add one
getent group lirc || /usr/sbin/groupadd -g 112 lirc
# check for lirc user or add one
getent passwd lirc || /usr/sbin/useradd -g lirc -u 112 -d /var/empty -s /bin/false -c "LIRC User" lirc
# lock the account
/usr/bin/passwd -l lirc