[PATCH] Re: control what kernel modules get loaded into ramdisk

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Dan Horák píše v Po 02. 11. 2009 v 18:34 +0100: 
> Hello,
> 
> I started to use dracut for preparing generic ramdisk for Fedora/ARM.
> The issue with ramdisks on ARM is that they are usually limited in size
> because they are stored in the internal flash memories whose capacity
> can be 8 or 16 MB (for kernel, ramdisk and other stuff) in the
> commercial devices (like NAS from QNAP). So I used the
> "omit_dracutmodules" option in the config file to drop stuff like i18n,
> plymouth etc. It works, the created ramdisk is usable, but what remains
> quite large are the kernel modules for all filesystems. The ability to

I have solved the problem with filesystem modules with an introduction
of new command line/config file parameter. It controls the list of
filesystem modules that will be included when running in generic mode.
See the attached patch for details.

> limit the list of drivers for block devices would be also nice. Is there
> a way to control what kernel modules get loaded into the ramdisk, like
> some black- or whitelist?


Dan

>From c903db8863923a6f9d32f6ac5e5481b74cb1e75c Mon Sep 17 00:00:00 2001
From: =?utf-8?q?Dan=20Hor=C3=A1k?= <dan@xxxxxxxx>
Date: Tue, 3 Nov 2009 10:39:59 +0100
Subject: [PATCH 1/3] specify a list of kernel filesystem modules to be exlusively included in the initramfs
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit


Signed-off-by: Dan Horák <dan@xxxxxxxx>
---
 dracut                                   |    6 +++++-
 dracut.8                                 |    3 +++
 modules.d/90kernel-modules/installkernel |    8 ++++++--
 3 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/dracut b/dracut
index 7b9304f..dbc5d73 100755
--- a/dracut
+++ b/dracut
@@ -37,6 +37,8 @@ Creates initial ramdisk images for preloading modules
                         exclusively include in the initramfs.
   --add-drivers [LIST]  Specify a space-separated list of kernel 
                         modules to add to the initramfs.
+  --filesystems [LIST]  Specify a space-separated list of filesystem kenrel
+                        modules to exclusively include in the initramfs.
   -k, --kmoddir [DIR]   Specify the directory, where to look for kernel 
                         modules
   --fwdir [DIR]         Specify additional directories, where to look for 
@@ -76,6 +78,7 @@ while (($# > 0)); do
 	-a|--add) add_dracutmodules_l="$2"; shift;;
 	-d|--drivers) drivers_l="$2"; shift;;
 	--add-drivers) add_drivers_l="$2"; shift;;
+	--filesystems) filesystems_l="$2"; shift;;
 	-k|--kmoddir) drivers_dir_l="$2"; shift;;
 	--fwdir) fw_dir_l="$2"; shift;;
 	--kernel-only) kernel_only="yes"; nokernel="no";;
@@ -127,6 +130,7 @@ fi
 [[ $add_dracutmodules_l ]] && add_dracutmodules="$add_dracutmodules $add_dracutmodules_l"
 [[ $drivers_l ]] && drivers=$drivers_l
 [[ $add_drivers_l ]] && add_drivers=$add_drivers_l
+[[ $filesystems_l ]] && filesystems=$filesystems_l
 [[ $drivers_dir_l ]] && drivers_dir=$drivers_dir_l
 [[ $fw_dir_l ]] && fw_dir=$fw_dir_l
 [[ $do_strip_l ]] && do_strip=$do_strip_l
@@ -180,7 +184,7 @@ chmod 755 "$initdir"
 
 export initdir hookdirs dracutbasedir dracutmodules drivers \
     fw_dir drivers_dir debug beverbose no_kernel kernel_only \
-    add_drivers mdadmconf lvmconf
+    add_drivers mdadmconf lvmconf filesystems
 
 if [[ $kernel_only != yes ]]; then
     # Create some directory structure first
diff --git a/dracut.8 b/dracut.8
index 309d0dd..93dafc9 100644
--- a/dracut.8
+++ b/dracut.8
@@ -32,6 +32,9 @@ specify a space-separated list of kernel modules to exclusively include in the i
 .BR \-\-add-drivers " \fILIST\fR"
 specify a space-separated list of kernel modules to add to the initramfs.
 .TP
+.BR \-\-filesystems " \fILIST\fR"
+specify a space-separated list of kernel filesystem modules to exclusively include in the initramfs.
+.TP
 .BR \-k ", " \-\-kmoddir " \fI{DIR}\fR   
 specify the directory, where to look for kernel modules
 .TP
diff --git a/modules.d/90kernel-modules/installkernel b/modules.d/90kernel-modules/installkernel
index b5e4c93..77fbe09 100755
--- a/modules.d/90kernel-modules/installkernel
+++ b/modules.d/90kernel-modules/installkernel
@@ -6,9 +6,13 @@ if [[ -z $drivers ]]; then
 	 nm -uPA "$1" | egrep -q "$blockfuncs"
     }
     instmods pcmcia sd_mod $(filter_kernel_modules block_module_test) "=drivers/pcmcia" =ide
-    # if not on hostonly mode, install all known filesystems.
+    # if not on hostonly mode, install all known filesystems if the required list is not set via the filesystems variable
     if [[ $hostonly = '' ]]; then
-	instmods '=fs'
+	if [[ -z $filesystems ]]; then
+	    instmods '=fs'
+	else
+	    instmods $filesystems
+	fi
     else
 	instmods $(get_fs_type "/dev/block/$(find_root_block_device)")
     fi
-- 
1.6.3.3

>From d9912f909196d7d53981720b444d1aa23d1edbe6 Mon Sep 17 00:00:00 2001
From: =?utf-8?q?Dan=20Hor=C3=A1k?= <dan@xxxxxxxx>
Date: Tue, 3 Nov 2009 11:05:12 +0100
Subject: [PATCH 2/3] add the "filesystems" option into config file
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit


Signed-off-by: Dan Horák <dan@xxxxxxxx>
---
 dracut.conf |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/dracut.conf b/dracut.conf
index 2ebeeda..44cecaf 100644
--- a/dracut.conf
+++ b/dracut.conf
@@ -9,6 +9,9 @@
 # additional kernel modules to the default
 #add_drivers=""
 
+# list of kernel filesystem modules to be loaded into generic initramfs
+#filesystems=""
+
 # build initrd only to boot current hardware
 #hostonly="-h"
 #
-- 
1.6.3.3

>From 80fe42e3224d4240319ddf56ea3deb807ab1e9aa Mon Sep 17 00:00:00 2001
From: =?utf-8?q?Dan=20Hor=C3=A1k?= <dan@xxxxxxxx>
Date: Tue, 3 Nov 2009 11:06:38 +0100
Subject: [PATCH 3/3] append the filesystems list to the exclusive list of kernel modules
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit


Signed-off-by: Dan Horák <dan@xxxxxxxx>
---
 modules.d/90kernel-modules/installkernel |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/modules.d/90kernel-modules/installkernel b/modules.d/90kernel-modules/installkernel
index 77fbe09..c739bfc 100755
--- a/modules.d/90kernel-modules/installkernel
+++ b/modules.d/90kernel-modules/installkernel
@@ -19,7 +19,7 @@ if [[ -z $drivers ]]; then
     # hardcoded list of exceptions
     rm -fr ${initdir}/lib/modules/*/kernel/fs/ocfs2
 else
-  instmods $drivers
+  instmods $drivers $filesystems
 fi
 
 [[ $add_drivers ]] && instmods $add_drivers
-- 
1.6.3.3


[Index of Archives]     [Linux Kernel]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]

  Powered by Linux