summaryrefslogtreecommitdiffstats
path: root/recipes/char-driver
diff options
context:
space:
mode:
Diffstat (limited to 'recipes/char-driver')
-rw-r--r--recipes/char-driver/char-driver.bb65
-rw-r--r--recipes/char-driver/char-driver/makefile.patch26
-rw-r--r--recipes/char-driver/char-driver/sysctl.patch34
3 files changed, 125 insertions, 0 deletions
diff --git a/recipes/char-driver/char-driver.bb b/recipes/char-driver/char-driver.bb
new file mode 100644
index 0000000000..d0d5f84739
--- /dev/null
+++ b/recipes/char-driver/char-driver.bb
@@ -0,0 +1,65 @@
+# FIXME, consider using kernel staging directory instead of KERNEL_SOURCE which is
+# located in the work directory. see module.bbclass
+
+DESCRIPTION = "char-driver and userspace program"
+PRIORITY = "optional"
+SECTION = "base"
+LICENSE = "GPL"
+RDEPENDS = "kernel (${KERNEL_VERSION})"
+DEPENDS = "virtual/kernel"
+
+PR = "r3"
+
+SRC_URI = "http://www.davehylands.com/gumstix-wiki/char-driver/char-driver-2.6.21.tar.gz \
+ file://makefile.patch;patch=1 \
+# file://sysctl.patch;patch=1 \
+ "
+
+S = "${WORKDIR}/char-driver"
+
+inherit module-base
+
+addtask builddir after do_fetch before do_unpack
+addtask movesrc after do_unpack before do_patch
+
+EXTRA_OEMAKE = 'CROSS_COMPILE="${CROSS_COMPILE}" \
+ KERNELDIR="${KERNEL_SOURCE}" \
+ CC="${CC}" \
+ '
+
+PARALLEL_MAKE = ""
+
+do_builddir () {
+ mkdir -p ${S}
+}
+
+do_movesrc () {
+ cd ${WORKDIR}
+ mv char-driver*.c sample.c char-driver*.h Makefile ${S}
+}
+
+do_configure () {
+ echo "Nothing to configure for char-driver"
+}
+
+do_compile () {
+ unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
+ cd ${S}
+ oe_runmake
+}
+
+do_install () {
+ # install programs to bindir
+ install -m 0755 -d ${D}${bindir}
+ install -m 0755 ${S}/sample ${D}${bindir}
+
+ # kernel module installs with other modules
+ install -m 0755 -d ${D}${base_libdir}/modules/${KERNEL_VERSION}/extra/
+ # use cp instead of install so the driver doesn't get stripped
+ cp ${S}/char-driver.ko ${D}${base_libdir}/modules/${KERNEL_VERSION}/extra/
+}
+
+PACKAGES = "${PN}"
+FILES_${PN} = "${bindir}/sample"
+FILES_${PN} += "${base_libdir}/modules/${KERNEL_VERSION}/extra/char-driver.ko"
+
diff --git a/recipes/char-driver/char-driver/makefile.patch b/recipes/char-driver/char-driver/makefile.patch
new file mode 100644
index 0000000000..d2d8e3c705
--- /dev/null
+++ b/recipes/char-driver/char-driver/makefile.patch
@@ -0,0 +1,26 @@
+--- char-driver/Makefile.orig 2008-03-09 14:38:02.000000000 -0600
++++ char-driver/Makefile 2008-03-09 14:39:04.000000000 -0600
+@@ -19,10 +19,10 @@
+
+ PWD := $(shell pwd)
+
+-GUMSTIX_BUILDROOT = $(PWD)/../gumstix-buildroot
+-BUILD_ARM = $(wildcard $(GUMSTIX_BUILDROOT)/build_arm*)
+-KERNELDIR ?= $(wildcard $(BUILD_ARM)/linux-*)
+-CROSS_COMPILE = $(BUILD_ARM)/staging_dir/bin/arm-linux-
++#GUMSTIX_BUILDROOT = $(PWD)/../gumstix-buildroot
++#BUILD_ARM = $(wildcard $(GUMSTIX_BUILDROOT)/build_arm*)
++#KERNELDIR ?= $(wildcard $(BUILD_ARM)/linux-*)
++#CROSS_COMPILE = $(BUILD_ARM)/staging_dir/bin/arm-linux-
+
+ default: user-apps kernel-module
+
+@@ -31,7 +31,7 @@
+ user-apps: sample
+
+ TARGET_ARCH=-Os -march=armv5te -mtune=xscale -Wa,-mcpu=xscale
+-CC = $(CROSS_COMPILE)gcc
++#CC = $(CROSS_COMPILE)gcc
+
+ sample: sample.c
+
diff --git a/recipes/char-driver/char-driver/sysctl.patch b/recipes/char-driver/char-driver/sysctl.patch
new file mode 100644
index 0000000000..1c7a7600ba
--- /dev/null
+++ b/recipes/char-driver/char-driver/sysctl.patch
@@ -0,0 +1,34 @@
+--- char-driver/char-driver.c.orig 2008-03-09 13:05:30.000000000 -0600
++++ char-driver/char-driver.c 2008-03-09 13:04:33.000000000 -0600
+@@ -26,7 +26,6 @@
+ /* ---- Include Files ---------------------------------------------------- */
+
+ #include <linux/module.h>
+-#include <linux/config.h>
+ #include <linux/init.h>
+ #include <linux/fs.h>
+ #include <linux/spinlock.h>
+@@ -426,12 +425,17 @@
+ printk( "sample driver allocated major:%d minor:%d\n", MAJOR( gSampleDevNum ), MINOR( gSampleDevNum ));
+
+ // Register our proc entries.
+-
+- gSysCtlHeader = register_sysctl_table( gSysCtl, 0 );
+- if ( gSysCtlHeader != NULL )
+- {
+- gSysCtlHeader->ctl_table->child->de->owner = THIS_MODULE;
+- }
++#if USE_SYSCTL
++ #if ( LINUX_VERSION_CODE <= KERNEL_VERSION( 2, 6, 20 ))
++ gSysCtlHeader = register_sysctl_table( gSysCtl, 0 );
++ if ( gSysCtlHeader != NULL )
++ {
++ gSysCtlHeader->ctl_table->child->de->owner = THIS_MODULE;
++ }
++ #else
++ gSysCtlHeader = register_sysctl_table( gSysCtl );
++ #endif
++#endif
+
+ // Register our device. The device becomes "active" as soon as cdev_add
+ // is called.