summaryrefslogtreecommitdiffstats
path: root/remote/modules/kernel-system
diff options
context:
space:
mode:
Diffstat (limited to 'remote/modules/kernel-system')
-rw-r--r--remote/modules/kernel-system/TODO3
-rw-r--r--remote/modules/kernel-system/module.build114
-rw-r--r--remote/modules/kernel-system/module.conf3
-rw-r--r--remote/modules/kernel-system/module.conf.opensuse6
-rw-r--r--remote/modules/kernel-system/module.conf.ubuntu6
-rwxr-xr-xremote/modules/kernel-system/patch-speaker6
6 files changed, 138 insertions, 0 deletions
diff --git a/remote/modules/kernel-system/TODO b/remote/modules/kernel-system/TODO
new file mode 100644
index 00000000..7665abac
--- /dev/null
+++ b/remote/modules/kernel-system/TODO
@@ -0,0 +1,3 @@
+make the modules load in stage31/init since we dont know which ones are compiled within kernel and which need to be loaded explicitly
+
+Idea: do it like DRM stuff, with pci-ids.
diff --git a/remote/modules/kernel-system/module.build b/remote/modules/kernel-system/module.build
new file mode 100644
index 00000000..d542a80d
--- /dev/null
+++ b/remote/modules/kernel-system/module.build
@@ -0,0 +1,114 @@
+# overloaded get_kernel_version function
+get_kernel_version(){
+ pinfo "KERNEL_CURRENT_VERSION: ${KERNEL_CURRENT_VERSION}"
+ [ -z "${KERNEL_CURRENT_VERSION}" ] && perror "KERNEL_CURRENT_VERSION is not set, 'uname -r' output: '$(uname -r)'. Aborting..."
+
+ # set SYS_UTS_RELEASE and SYS_KERNEL correctly
+ declare -rg SYS_UTS_RELEASE="${KERNEL_CURRENT_VERSION}" 2>/dev/null
+ declare -rg SYS_KERNEL="$(echo ${KERNEL_CURRENT_VERSION} | grep -o -E '^[0-9\.]+')" 2>/dev/null
+
+ # KERNEL_NEW_VERSION is the same as KERNEL_CURRENT_VERSION
+ declare -rg KERNEL_NEW_VERSION="$KERNEL_CURRENT_VERSION" 2>/dev/null
+
+ # check linux headers directory
+ if [ -d "/usr/src/linux-headers-$(uname -r)" ]; then
+ declare -rg KERNEL_HEADERS_PATH="/usr/src/linux-headers-$(uname -r)" 2>/dev/null
+ else
+ # fetch source did not install the headers correctly.
+ perror "kernel headers for $KERNEL_CURRENT_VERSION not found! Re-build the kernel-system module"
+ fi
+
+ # check kernel modules/firmware directory
+ if [ -d "/lib/modules/${KERNEL_CURRENT_VERSION}" -a \
+ -d "/lib/firmware/${KERNEL_CURRENT_VERSION}" ]; then
+ # The expected paths exists, set KERNEL_BASE_DIR to /
+ declare -rg KERNEL_BASE_DIR="/" 2>/dev/null
+ else
+ perror "Could not find kernel modules / firmware for kernel version '$KERNEL_CURRENT_VERSION'. \
+ Does '/lib/modules/$KERNEL_CURRENT_VERSION' exist?"
+ fi
+
+ # print debug info
+ pdebug "SYS_UTS_RELEASE: '$SYS_UTS_RELEASE'"
+ pdebug "SYS_KERNEL: '$SYS_KERNEL'"
+ pdebug "KERNEL_NEW_VERSION: '$KERNEL_NEW_VERSION'"
+ pdebug "KERNEL_BASE_DIR: '$KERNEL_BASE_DIR'"
+
+ # set KERNEL_HEADERS_PATH
+ #get_kernel_headers_path
+}
+
+get_kernel_headers_path(){
+ # determine the path to the kernel headers we just installed
+ for DIR in $(list_content_package --dirs linux-headers-$(uname -r) ); do
+ if [[ "$DIR" =~ .*linux-headers-$(uname -r)$ ]]; then
+ # validate candidate
+ [ -e "$DIR/./include/generated/utsrelease.h" ] \
+ || perror "Could not find utsrelease.h at '$DIR/./include/generated/utsrelease.h'"
+ # TODO: maybe check if SYS_UTS_RELEASE is the same as in the header.
+
+ # all good, we found it
+ pinfo "Kernel headers found at '$DIR'."
+ declare -rg KERNEL_HEADERS_PATH="$DIR"
+ break
+ fi
+ done
+
+ [ -z "$KERNEL_HEADERS_PATH" ] && perror "KERNEL_HEADERS_PATH was not set correctly."
+
+}
+
+fetch_source() {
+
+ # get the source from repos, use meta-package for now
+ pinfo "Installing kernel headers from the repositories for version '${KERNEL_CURRENT_VERSION}'"
+
+ # the actual install routine is done via config file
+ # through the REQUIRED_INSTALLED_PACKAGES variable
+
+}
+
+build() {
+
+ # simply copy the kernel from the running system
+ # to the build directory as it is.
+ local KERNEL_SYSTEM_PATH=""
+
+ # 1st "parse" /proc/cmdline for the kernel name
+ for i in $(cat /proc/cmdline); do
+ [[ "$i" =~ ^BOOT_IMAGE=.* ]] && local BOOT_IMAGE="$(basename $(echo $i|cut -c 12-))"
+ done
+
+ # exit if KERNEL_SYSTEM_FILENAME is empty, should not happen
+ [ -z "${BOOT_IMAGE}" ] && perror "Could not determine the full path to the running kernel..."
+
+ # now find it in KERNEL_SYSTEM_SEARCH_PATH
+ # NOTE: this variable should be expanded in the future if new locations are to be searched
+ local KERNEL_SYSTEM_SEARCH_PATH="/boot"
+ local KERNEL_SYSTEM_SEARCH_RESULTS="$(find "${KERNEL_SYSTEM_SEARCH_PATH}" -type f -iname "*${BOOT_IMAGE}*")"
+
+ if [ "$(echo $KERNEL_SYSTEM_SEARCH_RESULTS|wc -w)" -eq 1 ]; then
+ # we found the running kernel path
+ KERNEL_SYSTEM_PATH="${KERNEL_SYSTEM_SEARCH_RESULTS}"
+ else
+ # we found more than one, shouldn't happen...
+ perror "Found more than one kernel named '${BOOT_IMAGE}' inside '${KERNEL_SYSTEM_SEARCH_PATH}'."
+ fi
+
+ # at this point, we should definitly have KERNEL_SYSTEM_PATH, check just in case :)
+ [ -z "${KERNEL_SYSTEM_PATH}" ] && perror "KERNEL_SYSTEM_PATH isn't set, kernel not found. This shouldn't happen!"
+ pinfo "Live kernel path: $KERNEL_SYSTEM_PATH"
+
+ # copy kernel to build directory
+ [ -z "${KERNEL_TARGET_NAME}" ] && perror "KERNEL_TARGET_NAME not set, this mean something is wrong with remote/include/kernel.inc"
+ cp "${KERNEL_SYSTEM_PATH}" "${MODULE_BUILD_DIR}/${KERNEL_TARGET_NAME}" && \
+ pinfo "Copied kernel from '${KERNEL_SYSTEM_PATH}' to '${MODULE_BUILD_DIR}/${KERNEL_TARGET_NAME}'"
+ #[ -z "${KERNEL_BUILD_DIR}" ] && KERNEL_BUILD_DIR="${MODULE_BUILD_DIR}"
+}
+
+post_copy() {
+ :
+ #mkdir -p "$TARGET_BUILD_DIR/../kernel"
+ #cp -a "$MODULE_BUILD_DIR/kernel" "$TARGET_BUILD_DIR/../kernel/kernel" || perror "could not copy kernel to remote build dir."
+}
+
diff --git a/remote/modules/kernel-system/module.conf b/remote/modules/kernel-system/module.conf
new file mode 100644
index 00000000..0cd03752
--- /dev/null
+++ b/remote/modules/kernel-system/module.conf
@@ -0,0 +1,3 @@
+REQUIRED_BINARIES=""
+REQUIRED_LIBRARIES=""
+REQUIRED_DIRECTORIES=""
diff --git a/remote/modules/kernel-system/module.conf.opensuse b/remote/modules/kernel-system/module.conf.opensuse
new file mode 100644
index 00000000..6bfc2078
--- /dev/null
+++ b/remote/modules/kernel-system/module.conf.opensuse
@@ -0,0 +1,6 @@
+REQUIRED_INSTALLED_PACKAGES="
+ kernel-desktop-devel
+"
+REQUIRED_CONTENT_PACKAGES="
+ kernel-desktop-devel
+"
diff --git a/remote/modules/kernel-system/module.conf.ubuntu b/remote/modules/kernel-system/module.conf.ubuntu
new file mode 100644
index 00000000..4d47b243
--- /dev/null
+++ b/remote/modules/kernel-system/module.conf.ubuntu
@@ -0,0 +1,6 @@
+REQUIRED_INSTALLED_PACKAGES="
+ linux-headers-$(uname -r)
+"
+REQUIRED_CONTENT_PACKAGES="
+ linux-headers-$(uname -r)
+"
diff --git a/remote/modules/kernel-system/patch-speaker b/remote/modules/kernel-system/patch-speaker
new file mode 100755
index 00000000..5d5a9f9a
--- /dev/null
+++ b/remote/modules/kernel-system/patch-speaker
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+if ! grep notes "ksrc/drivers/input/misc/pcspkr.c" > /dev/null; then
+ echo "Patching pc speaker :-)"
+ sed -i.nomusic -r 's#^static.*int.*pcspkr_event#static const int notes[] = { /*tetris*/ 1319, 988, 1047, 1175, 1047, 988, 880, 880, 1047, 1319, 1175, 1047, 988, 1047, 1175, 1319, 1047, 880, 880, 1175, 1397, 1760, 1568, 1397, 1319, 1047, 1319, 1175, 1047, 988, 988, 1047, 1175, 1319, 1047, 880, 880, /*mario*/ 660, 660, 660, 510, 660, 770, 380, 510, 380, 320, 440, 480, 450, 430, 380, 660, 760, 860, 700, 760, 660, 520, 580, 480, 510, 380, 320, 440, 480, 450, 430, 380, 660, 760, 860, 700, 760, 660, 520, 580, 480, 500, 760, 720, 680, 620, 650, 380, 430, 500, 430, 500, 570, 500, 760, 720, 680, 620, 650, 1020, 1020, 1020, 380, 500, 760, 720, 680, 620, 650, 380, 430, 500, 430, 500, 570, 500, 760, 720, 680, 620, 650, 1020, 1020, 1020, 380, 500, 760, 720, 680, 620, 650, 380, 430, 500, 430, 500, 570, 585, 550, 500, 380, 500, 500, 500, 500, 500, 500, 500, 580, 660, 500, 430, 380, 500, 500, 500, 500, 580, 660, 870, 760, 500, 500, 500, 500, 580, 660, 500, 430, 380, 660, 660, 660, 510, 660, 770, 380, /* elise */ 420, 400, 420, 400, 420, 315, 370, 335, 282, 180, 215, 282, 315, 213, 262, 315, 335, 213, 420, 400, 420, 400, 420, 315, 370, 335, 282, 180, 215, 282, 315, 213, 330, 315, 282 };\nstatic int notePos = 0;\n\n&#g;s#\s*if \(value > 20 && value < 32767\)#\n if (value) value = notes[notePos++ % (sizeof(notes) / sizeof(notes[0]))];\n\n&#g' "ksrc/drivers/input/misc/pcspkr.c"
+fi