Browse Source

backports: add linux-backports driver package

* needed to copy over the oe-core kernel-module classes
  and modify them because there was no other way to use them and
  name the packages kernel-module-backports

Related: SYS#850
neels/inmarsat
Henning Heinold 7 years ago
committed by Holger Hans Peter Freyther
parent
commit
5297f12bc1
  1. 187
      classes/sysmocom-kernel-module-split.bbclass
  2. 12
      classes/sysmocom-module.bbclass
  3. 43
      recipes-bsp/backports/backports_3.18.1.1.bb
  4. 15
      recipes-bsp/backports/files/dont-export-clk_enable-twice.patch
  5. 17
      recipes-bsp/backports/files/scatterwalk-api-update.patch

187
classes/sysmocom-kernel-module-split.bbclass

@ -0,0 +1,187 @@
pkg_postinst_modules () {
if [ -z "$D" ]; then
depmod -a ${KERNEL_VERSION}
else
depmodwrapper -a -b $D ${KERNEL_VERSION}
fi
}
pkg_postrm_modules () {
if [ -z "$D" ]; then
depmod -a ${KERNEL_VERSION}
else
depmodwrapper -a -b $D ${KERNEL_VERSION}
fi
}
autoload_postinst_fragment() {
if [ x"$D" = "x" ]; then
modprobe %s || true
fi
}
do_install_append() {
install -d ${D}${sysconfdir}/modules-load.d/ ${D}${sysconfdir}/modprobe.d/
}
PACKAGESPLITFUNCS_prepend = "split_kernel_module_packages "
KERNEL_MODULES_META_PACKAGE ?= "kernel-modules"
KERNEL_MODULES_PACKAGE_PREFIX ?= "kernel-module-%s"
python split_kernel_module_packages () {
import re
modinfoexp = re.compile("([^=]+)=(.*)")
kerverrexp = re.compile('^(.*-hh.*)[\.\+].*$')
depmodpat0 = re.compile("^(.*\.k?o):..*$")
depmodpat1 = re.compile("^(.*\.k?o):\s*(.*\.k?o)\s*$")
depmodpat2 = re.compile("^(.*\.k?o):\s*(.*\.k?o)\s*\\\$")
depmodpat3 = re.compile("^\t(.*\.k?o)\s*\\\$")
depmodpat4 = re.compile("^\t(.*\.k?o)\s*$")
def extract_modinfo(file):
import tempfile, subprocess
tempfile.tempdir = d.getVar("WORKDIR", True)
tf = tempfile.mkstemp()
tmpfile = tf[1]
cmd = "%sobjcopy -j .modinfo -O binary %s %s" % (d.getVar("HOST_PREFIX", True) or "", file, tmpfile)
subprocess.call(cmd, shell=True)
f = open(tmpfile)
l = f.read().split("\000")
f.close()
os.close(tf[0])
os.unlink(tmpfile)
vals = {}
for i in l:
m = modinfoexp.match(i)
if not m:
continue
vals[m.group(1)] = m.group(2)
return vals
def parse_depmod():
dvar = d.getVar('PKGD', True)
kernelver = d.getVar('KERNEL_VERSION', True)
kernelver_stripped = kernelver
m = kerverrexp.match(kernelver)
if m:
kernelver_stripped = m.group(1)
staging_kernel_dir = d.getVar("STAGING_KERNEL_DIR", True)
system_map_file = "%s/boot/System.map-%s" % (dvar, kernelver)
if not os.path.exists(system_map_file):
system_map_file = "%s/System.map-%s" % (staging_kernel_dir, kernelver)
if not os.path.exists(system_map_file):
bb.fatal("System.map-%s does not exist in '%s/boot' nor STAGING_KERNEL_DIR '%s'" % (kernelver, dvar, staging_kernel_dir))
cmd = "depmod -n -a -b %s -F %s %s" % (dvar, system_map_file, kernelver_stripped)
f = os.popen(cmd, 'r')
deps = {}
line = f.readline()
while line:
if not depmodpat0.match(line):
line = f.readline()
continue
m1 = depmodpat1.match(line)
if m1:
deps[m1.group(1)] = m1.group(2).split()
else:
m2 = depmodpat2.match(line)
if m2:
deps[m2.group(1)] = m2.group(2).split()
line = f.readline()
m3 = depmodpat3.match(line)
while m3:
deps[m2.group(1)].extend(m3.group(1).split())
line = f.readline()
m3 = depmodpat3.match(line)
m4 = depmodpat4.match(line)
deps[m2.group(1)].extend(m4.group(1).split())
line = f.readline()
f.close()
return deps
def get_dependencies(file, pattern, format):
# file no longer includes PKGD
file = file.replace(d.getVar('PKGD', True) or '', '', 1)
# instead is prefixed with /lib/modules/${KERNEL_VERSION}
file = file.replace("/lib/modules/%s/" % d.getVar('KERNEL_VERSION', True) or '', '', 1)
if file in module_deps:
dependencies = []
for i in module_deps[file]:
m = re.match(pattern, os.path.basename(i))
if not m:
continue
on = legitimize_package_name(m.group(1))
dependency_pkg = format % on
dependencies.append(dependency_pkg)
return dependencies
return []
def frob_metadata(file, pkg, pattern, format, basename):
vals = extract_modinfo(file)
dvar = d.getVar('PKGD', True)
# If autoloading is requested, output /etc/modules-load.d/<name>.conf and append
# appropriate modprobe commands to the postinst
autoload = d.getVar('module_autoload_%s' % basename, True)
if autoload:
name = '%s/etc/modules-load.d/%s.conf' % (dvar, basename)
f = open(name, 'w')
for m in autoload.split():
f.write('%s\n' % m)
f.close()
postinst = d.getVar('pkg_postinst_%s' % pkg, True)
if not postinst:
bb.fatal("pkg_postinst_%s not defined" % pkg)
postinst += d.getVar('autoload_postinst_fragment', True) % autoload
d.setVar('pkg_postinst_%s' % pkg, postinst)
# Write out any modconf fragment
modconf = d.getVar('module_conf_%s' % basename, True)
if modconf:
name = '%s/etc/modprobe.d/%s.conf' % (dvar, basename)
f = open(name, 'w')
f.write("%s\n" % modconf)
f.close()
files = d.getVar('FILES_%s' % pkg, True)
files = "%s /etc/modules-load.d/%s.conf /etc/modprobe.d/%s.conf" % (files, basename, basename)
d.setVar('FILES_%s' % pkg, files)
if "description" in vals:
old_desc = d.getVar('DESCRIPTION_' + pkg, True) or ""
d.setVar('DESCRIPTION_' + pkg, old_desc + "; " + vals["description"])
rdepends = bb.utils.explode_dep_versions2(d.getVar('RDEPENDS_' + pkg, True) or "")
for dep in get_dependencies(file, pattern, format):
if not dep in rdepends:
rdepends[dep] = []
d.setVar('RDEPENDS_' + pkg, bb.utils.join_deps(rdepends, commasep=False))
module_deps = parse_depmod()
module_regex = '^(.*)\.k?o$'
module_pattern = d.getVar("KERNEL_MODULES_PACKAGE_PREFIX", True) or "kernel-module-%s"
postinst = d.getVar('pkg_postinst_modules', True)
postrm = d.getVar('pkg_postrm_modules', True)
modules = do_split_packages(d, root='/lib/modules', file_regex=module_regex, output_pattern=module_pattern, description='%s kernel module', postinst=postinst, postrm=postrm, recursive=True, hook=frob_metadata, extra_depends='kernel-%s' % (d.getVar("KERNEL_VERSION", True)))
if modules:
metapkg = d.getVar('KERNEL_MODULES_META_PACKAGE', True)
d.appendVar('RDEPENDS_' + metapkg, ' '+' '.join(modules))
# If modules-load.d and modprobe.d are empty at this point, remove them to
# avoid warnings. removedirs only raises an OSError if an empty
# directory cannot be removed.
dvar = d.getVar('PKGD', True)
for dir in ["%s/etc/modprobe.d" % (dvar), "%s/etc/modules-load.d" % (dvar), "%s/etc" % (dvar)]:
if len(os.listdir(dir)) == 0:
os.rmdir(dir)
}

12
classes/sysmocom-module.bbclass

@ -0,0 +1,12 @@
DEPENDS += "virtual/kernel"
inherit module-base sysmocom-kernel-module-split
addtask make_scripts after do_patch before do_compile
do_make_scripts[lockfiles] = "${TMPDIR}/kernel-scripts.lock"
do_make_scripts[deptask] = "do_populate_sysroot"
# add all splitted modules to PN RDEPENDS, PN can be empty now
KERNEL_MODULES_META_PACKAGE = "${PN}"
FILES_${PN} = ""
ALLOW_EMPTY_${PN} = "1"

43
recipes-bsp/backports/backports_3.18.1.1.bb

@ -0,0 +1,43 @@
DESCRIPTION = "hello-world-mod tests the module.bbclass mechanism."
LICENSE = "GPLv2"
LIC_FILES_CHKSUM = "file://COPYING;md5=d7810fab7487fb0aad327b76f1be7cd7"
inherit sysmocom-module
PR = "r0"
SRC_URI = "http://www.kernel.org/pub/linux/kernel/projects/backports/stable/v3.18.1/backports-3.18.1-1.tar.xz \
file://dont-export-clk_enable-twice.patch \
file://scatterwalk-api-update.patch \
file://defconfig \
"
SRC_URI[md5sum] = "6cef5f2c800e12441d2cba9fa42b6a5b"
SRC_URI[sha256sum] = "ff3d4d5192c4d57d7415dfcd60e02ea4fa21e0de224ae0ce2b5b9f2e9c815783"
S = "${WORKDIR}/backports-3.18.1-1"
do_configure() {
unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS CC
cp ${WORKDIR}/defconfig ${S}/.config
oe_runmake oldconfig KLIB_BUILD=${STAGING_KERNEL_DIR}
}
do_compile() {
unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
oe_runmake KLIB_BUILD=${STAGING_KERNEL_DIR} \
CC="${KERNEL_CC}" LD="${KERNEL_LD}" \
AR="${KERNEL_AR}" \
${MAKE_TARGETS}
}
do_install() {
unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
oe_runmake DEPMOD=echo KLIB="${D}" \
KLIB_BUILD=${STAGING_KERNEL_DIR} \
CC="${KERNEL_CC}" LD="${KERNEL_LD}" \
install
}
KERNEL_MODULES_META_PACKAGE = "kernel-modules-backports"
KERNEL_MODULES_PACKAGE_PREFIX = "kernel-module-backports-%s"

15
recipes-bsp/backports/files/dont-export-clk_enable-twice.patch

@ -0,0 +1,15 @@
--- /home/alphaone/sysmocom/scm/backports-3.17.1-1/compat/compat-3.6.c 2014-10-25 15:39:13.000000000 +0200
+++ ./compat/compat-3.6.c 2015-01-29 00:42:11.611124528 +0100
@@ -148,6 +148,7 @@
}
EXPORT_SYMBOL_GPL(sg_alloc_table_from_pages);
+#if 0
/* whoopsie ! */
#ifndef CONFIG_COMMON_CLK
int clk_enable(struct clk *clk)
@@ -161,3 +162,4 @@
}
EXPORT_SYMBOL_GPL(clk_disable);
#endif
+#endif

17
recipes-bsp/backports/files/scatterwalk-api-update.patch

@ -0,0 +1,17 @@
--- /home/alphaone/sysmocom/scm/backports-3.17.1-1/compat/crypto-ccm.c 2014-10-25 15:39:13.000000000 +0200
+++ ./compat/crypto-ccm.c 2015-01-29 00:34:06.584003696 +0100
@@ -247,12 +247,12 @@
scatterwalk_start(&walk, sg_next(walk.sg));
n = scatterwalk_clamp(&walk, len);
}
- data_src = scatterwalk_map(&walk);
+ data_src = scatterwalk_map(&walk, 0);
compute_mac(tfm, data_src, n, pctx);
len -= n;
- scatterwalk_unmap(data_src);
+ scatterwalk_unmap(data_src, 0);
scatterwalk_advance(&walk, n);
scatterwalk_done(&walk, 0, len);
if (len)
Loading…
Cancel
Save