From b03e2472b28d6fe1df6c632d51596c552a99f3bb Mon Sep 17 00:00:00 2001 From: Alain Kalker Date: Fri, 23 Mar 2012 17:58:23 +0100 Subject: [PATCH 1/4] busybox-initramfs: add 'insmod' applet This enables loading of kernel modules. Signed-off-by: Alain Kalker --- .../sysutils/busybox-initramfs/config/busybox-initramfs.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/initramfs/sysutils/busybox-initramfs/config/busybox-initramfs.conf b/packages/initramfs/sysutils/busybox-initramfs/config/busybox-initramfs.conf index 6edc5cb035..da9120aca1 100644 --- a/packages/initramfs/sysutils/busybox-initramfs/config/busybox-initramfs.conf +++ b/packages/initramfs/sysutils/busybox-initramfs/config/busybox-initramfs.conf @@ -494,7 +494,7 @@ CONFIG_FEATURE_DEFAULT_PASSWD_ALGO="" # CONFIG_MODPROBE_SMALL is not set # CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE is not set # CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED is not set -# CONFIG_INSMOD is not set +CONFIG_INSMOD=y # CONFIG_RMMOD is not set # CONFIG_LSMOD is not set # CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set From 2bc354bc51fc6c8e8942151a9dcde94a723cab33 Mon Sep 17 00:00:00 2001 From: Alain Kalker Date: Fri, 23 Mar 2012 18:09:54 +0100 Subject: [PATCH 2/4] linux: Build kernel modules before initramfs This allows kernel modules to be included in initramfs Signed-off-by: Alain Kalker --- packages/linux/build | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/packages/linux/build b/packages/linux/build index b0a5ceb7ce..16f8097c75 100755 --- a/packages/linux/build +++ b/packages/linux/build @@ -22,13 +22,6 @@ . config/options $1 -export INSTALL=$ROOT/$BUILD/image/initramfs/root-image -$SCRIPTS/install initramfs - -cd $INSTALL - find . | cpio -H newc -ov -R 0:0 > $ROOT/$BUILD/image/initramfs.cpio -cd - - if [ "$BOOTLOADER" = "u-boot" ]; then $SCRIPTS/build u-boot KERNEL_IMAGE="uImage" @@ -49,7 +42,16 @@ make modules make INSTALL_MOD_PATH=modules DEPMOD="$ROOT/$TOOLCHAIN/bin/depmod" modules_install rm -f modules/lib/modules/*/build rm -f modules/lib/modules/*/source +cd - +export INSTALL=$ROOT/$BUILD/image/initramfs/root-image +$SCRIPTS/install initramfs + +cd $INSTALL + find . | cpio -H newc -ov -R 0:0 > $ROOT/$BUILD/image/initramfs.cpio +cd - + +cd $(kernel_path) make $KERNEL_IMAGE ( cd tools/power/cpupower From cea7f0ef7bfe305c2d18b2c182117105b375e4e9 Mon Sep 17 00:00:00 2001 From: Alain Kalker Date: Sun, 25 Mar 2012 16:58:39 +0200 Subject: [PATCH 3/4] linux-initramfs: new package, adds support for loading kernel modules This package adds support for loading kernel modules during early boot. The list of modules to be loaded can be specified in projects/*/options in the variable INITRAMFS_MODULES . The list of modules to load will be stored in initramfs /etc/modules , the modules themselves in /lib/modules . No subdirectories are used to ease and speed up module loading in init. Only modules which were actually built will be added to the initramfs. Signed-off-by: Alain Kalker --- packages/initramfs/linux-initramfs/install | 39 ++++++++++++++++++++++ packages/initramfs/linux-initramfs/meta | 36 ++++++++++++++++++++ packages/initramfs/meta | 2 +- 3 files changed, 76 insertions(+), 1 deletion(-) create mode 100755 packages/initramfs/linux-initramfs/install create mode 100644 packages/initramfs/linux-initramfs/meta diff --git a/packages/initramfs/linux-initramfs/install b/packages/initramfs/linux-initramfs/install new file mode 100755 index 0000000000..74893f4157 --- /dev/null +++ b/packages/initramfs/linux-initramfs/install @@ -0,0 +1,39 @@ +#!/bin/sh + +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2012 Stephan Raue (stephan@openelec.tv) +# +# This Program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This Program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with OpenELEC.tv; see the file COPYING. If not, write to +# the Free Software Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110, USA. +# http://www.gnu.org/copyleft/gpl.html +################################################################################ + +. config/options $1 + +VER=`ls $BUILD/linux*/modules/lib/modules` +LINUX_MODULES_DIR=`echo $BUILD/linux*/modules/lib/modules/$VER/kernel` + +if [ -n "$INITRAMFS_MODULES" ]; then + mkdir -p $INSTALL/etc + mkdir -p $INSTALL/lib/modules + + for i in $INITRAMFS_MODULES; do + module=`find $LINUX_MODULES_DIR -name $i.ko` + if [ -n "$module" ]; then + echo $i >> $INSTALL/etc/modules + cp $module $INSTALL/lib/modules/`basename $module` + fi + done +fi diff --git a/packages/initramfs/linux-initramfs/meta b/packages/initramfs/linux-initramfs/meta new file mode 100644 index 0000000000..610d2d64d3 --- /dev/null +++ b/packages/initramfs/linux-initramfs/meta @@ -0,0 +1,36 @@ +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2012 Stephan Raue (stephan@openelec.tv) +# +# This Program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This Program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with OpenELEC.tv; see the file COPYING. If not, write to +# the Free Software Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110, USA. +# http://www.gnu.org/copyleft/gpl.html +################################################################################ + +PKG_NAME="linux-initramfs" +PKG_VERSION="" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.kernel.org" +PKG_URL="" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="initramfs" +PKG_SHORTDESC="linux: initramfs kernel module support" +PKG_LONGDESC="Support for loading kernel modules during early boot." +PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" diff --git a/packages/initramfs/meta b/packages/initramfs/meta index f1aa3b5598..d29fe1fefc 100644 --- a/packages/initramfs/meta +++ b/packages/initramfs/meta @@ -25,7 +25,7 @@ PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="http://www.openelec.tv" PKG_URL="" -PKG_DEPENDS="eglibc-initramfs busybox-initramfs diskdev_cmds-initramfs" +PKG_DEPENDS="eglibc-initramfs busybox-initramfs diskdev_cmds-initramfs linux-initramfs" PKG_BUILD_DEPENDS="toolchain eglibc-initramfs busybox-initramfs" PKG_PRIORITY="optional" PKG_SECTION="initramfs" From 52898a1dc1c21a05ac98932a5b5343c7532cecdc Mon Sep 17 00:00:00 2001 From: Alain Kalker Date: Sun, 25 Mar 2012 17:09:05 +0200 Subject: [PATCH 4/4] busybox-initramfs: init: fix loading of kernel modules Add missing .ko to module name. Signed-off-by: Alain Kalker --- packages/initramfs/sysutils/busybox-initramfs/scripts/init | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/initramfs/sysutils/busybox-initramfs/scripts/init b/packages/initramfs/sysutils/busybox-initramfs/scripts/init index 76d0700ca7..99ab77b4a3 100755 --- a/packages/initramfs/sysutils/busybox-initramfs/scripts/init +++ b/packages/initramfs/sysutils/busybox-initramfs/scripts/init @@ -305,7 +305,7 @@ NBD_DEVS="0" [ ! -f "/etc/modules" ] && return for module in $(cat /etc/modules); do progress "Loading kernel module $module" - /bin/busybox insmod "$MODULE_DIR/$module" || \ + /bin/busybox insmod "$MODULE_DIR/$module.ko" || \ error "load_modules" "Failed to load kernel module $module" done }