summaryrefslogtreecommitdiff
path: root/packages/linux/nslu2-kernel.inc
diff options
context:
space:
mode:
Diffstat (limited to 'packages/linux/nslu2-kernel.inc')
-rw-r--r--packages/linux/nslu2-kernel.inc248
1 files changed, 248 insertions, 0 deletions
diff --git a/packages/linux/nslu2-kernel.inc b/packages/linux/nslu2-kernel.inc
index e69de29bb2..efd04513a7 100644
--- a/packages/linux/nslu2-kernel.inc
+++ b/packages/linux/nslu2-kernel.inc
@@ -0,0 +1,248 @@
+# nslu2-kernel.inc
+#
+# Standard definitions for any NSLU2 Linux kernel.
+# Include this file in a .bb which specifies, at least,
+# PN,PV,PR for the desired kernel
+#
+# Define the following *before* including this file as
+# required:
+#
+# N2K_EXTRA_FILES - kernel-tree path of extra files to install
+# N2K_FILES - kernel-tree path of files to install, defaults to:
+# drivers/i2c/chips/x1205-rtc.c
+# arch/arm/mach-ixp4xx/nslu2-io.c
+# arch/arm/mach-ixp4xx/nslu2-setup.c
+# arch/arm/mach-ixp4xx/nslu2-pci.c
+# arch/arm/mach-ixp4xx/nslu2-part.c
+# include/asm-arm/arch-ixp4xx/nslu2.h
+# ${N2K_EXTRA_FILES}
+#
+# N2K_EXTRA_PATCHES - list of patches to apply (can include
+# patches to the files installed above)
+# N2K_PATCHES - full list of patches to apply, defaults to:
+# file://nslu2_2.6.11.patch;patch=1
+# file://usbnet.patch;patch=1
+# file://ixp4xx_copy_from.patch;patch=1
+# file://anonymiser.patch;patch=1
+# ${N2K_EXTRA_PATCHES}
+#
+# N2K_SUFFIX - the suffix to add after 'zImage-' in the
+# deploy/images directory - defaults to "openslug"
+#
+# Notice that the N2K_PATCHES list is appropriate for
+# openslug-kernel_2.6.11.2 and probably nothing else.
+#
+# DEFAULT_PREFERENCE is set automagically in this file as
+# follows:
+#
+# 10 For *released* kernels
+# 8 For mm or ac patched versions of released kernels
+# 6 For rc patched kernels (release candidates)
+# 4 For mm or ac patched rc (release candidate) kernels
+# 2 For pre or bk versions
+# 0 For mm or ac patched pre or bk versions
+#
+# --------------------------------------------------------------
+#
+# Within this file bitbake variables local to the file are
+# named N2K_FOO
+#
+SECTION = "kernel"
+DESCRIPTION = "Linux kernel for the Linksys NSLU2 device"
+LICENSE = "GPL"
+MAINTAINER = "John Bowler <jbowler@acm.org>"
+
+# Linux kernel source has the general form linux-X.Y.Z-patchP,
+# X.Y is the major version number, Z (which may have multiple
+# parts) is a sub-version and 'patch' is something like 'mm' or
+# 'ac' with a patch version. The original bz2 archive will be
+# in a directory/file vX.Y/linux-X.Y.Z.tar.bz2. The unpacked
+# source will be in the directory linux-X.Y.Z and this directory
+# name corresponds to the module directory (in /lib/modules).
+#
+# The corresponding .bb file should be called:
+#
+# package_X.Y.Z-patchP
+#
+# Giving PN=package PV=X.Y.Z-patchP (and PR is set in the .bb
+# file). Files, including the all important defconfig, are
+# searched for in the following directories (last one first):
+#
+# openslug-kernel-2.6.11.2
+# nslu2-kernel/files
+# nslu2-kernel/X.Y
+# nslu2-kernel/X.Y.Z
+# nslu2-kernel/X.Y.Z-patch
+# nslu2-kernel/X.Y.Z-patchP
+# package-X.Y.Z-patchP
+#
+# This allows sharing of patch files and other useful source!
+# To share a file or patch with an earlier version put it in
+# the shared directory - e.g. to use foo.patch on 2.6.11.2 and
+# 2.6.11.4 it should be in directory nslu2-kernel/2.6.11.
+#
+# Note that when there are multiple patches the X.Y.Z-patch form
+# uses base-patch (e.g. 2.6.12-mm) whereas X.Y.Z-patchP has the
+# full form, for example 2.6.12-rc3-mm1 (in the same case).
+
+#PN=package-name
+#PV=package-version (full)
+
+# The patch has the general form (rcN|preN|acN|mmN|bkN)* with the
+# separate patch items being separated by '-' characters. The
+# rc patch is first and has the important property that it
+# requires the *preceding* kernel base version and that this
+# will be the source directory name.
+python () {
+ # The patches list may be empty. This code starts with the base
+ # kernel version and steps through the patches. Because the rc and
+ # pre patches actually require the *preceding* kernel version the code
+ # fixes that up appropriately.
+ pv = bb.data.getVar("PV",d,1).split('-')
+ kernel = pv[0].split('.')
+ base = pv[0]
+ name = [base]
+ major = '.'.join(name[0].split('.')[0:2])
+ patch_uri = [ None ]
+ filedir = "${FILE_DIRNAME}/nslu2-kernel/%s"
+ filepath = [ filedir % major ]
+ pref = 10
+ mmac = 0
+ for patch in pv[1:]:
+ name.append(patch)
+ pname = '-'.join(name)
+ if patch[0:2] == "rc" or patch[0:3] == "pre":
+ patch_uri.append("ftp://ftp.kernel.org/pub/linux/kernel/v%s/testing/patch-%s.bz2;patch=1;pname=%s" % (major, pname, pname))
+ kernel[-1] = kernel[-1] - 1
+ if patch[0:2] == "rc" and pref == 10:
+ pref = 6
+ filepath[0:0] = [ filedir % (name[0] + "-rc") ]
+ else:
+ pref = 2
+ elif patch[0:2] == "bk":
+ patch_uri.append("ftp://ftp.kernel.org/pub/linux/kernel/v%s/snapshots/patch-%s.bz2;patch=1;pname=%s" % (major, pname, pname))
+ pref = 2
+ elif patch[0:2] == "ac":
+ patch_uri.append("ftp://ftp.kernel.org/pub/linux/kernel/people/alan/linux-%s/%s/patch-%s" % (major, base, pname))
+ mmac = 2
+ filepath[0:0] = [ filedir % (name[0] + "-ac") ]
+ elif patch[0:2] == "mm":
+ patch_uri.append("ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/%s/%s/%s/%s.bz2;patch=1;pname=%s" % (major, base, pname, pname, pname))
+ mmac = 2
+ filepath[0:0] = [ filedir % (name[0] + "-mm") ]
+ else:
+ raise bb.build.FuncFailed("nslu2-kernel: patch %s not recognized in %s" % (patch, '-'.join(pv)))
+ filepath[0:0] = [ filedir % pname ]
+ base = pname
+
+ base = '.'.join(kernel)
+ patch_uri[0] = "ftp://ftp.kernel.org/pub/linux/kernel/v%s/linux-%s.tar.bz2" % (major, base)
+ filepath[-1:-1] = [ filedir % base ]
+ filepath[-1:-1] = [ filedir % "files" ]
+
+ bb.data.setVar("N2K_SRCMAJ", major, d)
+ # bb.note("N2K_SRCMAJ := %s" % major)
+ bb.data.setVar("N2K_SRCVER", base, d)
+ # bb.note("N2K_SRCVER := %s" % base)
+ bb.data.setVar("N2K_SRCURI", ' '.join(patch_uri), d)
+ # bb.note("N2K_SRCURI := %s" % ' '.join(patch_uri))
+ bb.data.setVar("N2K_FILESPATH", ':'.join(filepath), d)
+ # bb.note("N2K_FILESPATH := %s" % ' '.join(filepath))
+ bb.data.setVar("DEFAULT_PREFERENCE", pref-mmac)
+ # bb.note("DEFAULT_PREFERENCE := %s" % pref-mmac)
+}
+
+# FILESPATH: this list is in order last-searched-first, therefore
+# the first entry is the *latest* and/or most specific
+FILESPATH = "${FILE_DIRNAME}/${P}:${N2K_FILESPATH}:${FILE_DIRNAME}/openslug-kernel-2.6.11.2"
+
+# The working directory will be the 'base' version (which may not be the
+# same as implied by the PV variable because it corresponds to the prior
+# minor version for rc and pre patched versions).
+S = "${WORKDIR}/linux-${N2K_SRCVER}"
+
+# N2K_FILES is a list of additional files added to the source, these are
+# put in place before the patches, so may themselves be patched. The list
+# gives the path name relative to the base of the kernel source tree, the
+# base file name is used to *find* the file.
+N2K_EXTRA_FILES ?=
+N2K_FILES ?= "\
+ drivers/i2c/chips/x1205-rtc.c \
+ arch/arm/mach-ixp4xx/nslu2-io.c \
+ arch/arm/mach-ixp4xx/nslu2-setup.c \
+ arch/arm/mach-ixp4xx/nslu2-pci.c \
+ arch/arm/mach-ixp4xx/nslu2-part.c \
+ include/asm-arm/arch-ixp4xx/nslu2.h \
+ ${N2K_EXTRA_FILES}"
+
+N2K_SRCFILES = "${@( ' '.join([ ("file://" + n2k_file.split('/')[-1]) for n2k_file in bb.data.getVar("N2K_FILES",d,1).split(None) ]) )}"
+
+# N2K_PATCHES is a list of additional patches, the list specified
+# here comes from the openslug-2.6.11.2 kernel, typically extra
+# patches will be required and very often patches will need to
+# be removed (i.e. the default is typically not very useful!)
+N2K_EXTRA_PATCHES ?=
+N2K_PATCHES ?= "\
+ file://nslu2_2.6.11.patch;patch=1 \
+ file://usbnet.patch;patch=1 \
+ file://ixp4xx_copy_from.patch;patch=1 \
+ file://anonymiser.patch;patch=1 \
+ ${N2K_EXTRA_PATCHES}"
+
+N2K_SUFFIX ?= "openslug"
+
+SRC_URI = ${N2K_SRCURI}
+SRC_URI += ${N2K_SRCFILES}
+SRC_URI += ${N2K_PATCHES}
+SRC_URI += "file://defconfig"
+
+COMPATIBLE_HOST = 'arm.*-linux'
+
+inherit kernel
+
+ARCH = "arm"
+KERNEL_IMAGETYPE = "zImage"
+CMDLINE_CONSOLE ?= "ttyS0,115200n8"
+CMDLINE_ROOT ?= "root=/dev/mtdblock4 rw rootfstype=jffs2 mem=32M@0x00000000 init=/linuxrc"
+#CMDLINE_ROOT ?= "root=/dev/ram0 rw rootfstype=ext2,jffs2 initrd=0x01000000,10M init=/linuxrc mem=32M@0x00000000"
+CMDLINE = "${CMDLINE_ROOT} ${CMDLINE_CONSOLE}"
+
+# Add the architecture compiler flags to KERNEL_CC and KERNEL_LD as
+# required. Notice that this has to be done for each separately built
+# module as well!
+KERNEL_CC += "${TARGET_CC_ARCH} -mno-thumb-interwork"
+# KERNEL_LD +=
+
+# By putting the added files in place in a separate task before
+# do_patch it becomes possible to patch these files.
+do_unpacklocal() {
+ for f in ${N2K_FILES}
+ do
+ s="$(basename "$f")"
+ install -m 0644 "${WORKDIR}/$s" "${S}/$f"
+ done
+}
+
+addtask unpacklocal before do_patch after do_unpack
+
+do_configure_prepend() {
+ install -m 0644 ${WORKDIR}/defconfig ${S}/.config
+ echo "CONFIG_CMDLINE=\"${CMDLINE}\"" >> ${S}/.config
+ rm -rf ${S}/include/asm-arm/arch ${S}/include/asm-arm/proc \
+ ${S}/include/asm-arm/.proc ${S}/include/asm-arm/.arch
+}
+
+do_deploy[dirs] = "${S}"
+do_deploy() {
+ install -d ${DEPLOY_DIR}/images
+ install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR}/images/${KERNEL_IMAGETYPE}-${N2K_SUFFIX}
+}
+
+addtask deploy before do_build after do_compile
+
+python () {
+ # Don't build the kernel unless we're targeting an nslu2
+ mach = bb.data.getVar("MACHINE", d, 1)
+ if mach != 'nslu2':
+ raise bb.parse.SkipPackage("OpenSlug only builds for the Linksys NSLU2")
+}