I was never satisfied with the ugly hack, how kernel-modules were loaded in openwrt, but it works since the beginning. here is a proposal to do it clean and also fast with ash-builtins. side-effect is a better logging. e.g.:
Jan 1 00:00:25 box daemon.info load_modules(): insmod: can't insert 'input-core': File exists Jan 1 00:00:26 box daemon.info load_modules(): insmod: can't insert 'input-polldev': File exists Jan 1 00:00:33 box daemon.info load_modules(): [OK] 85 modules, time: 25.16 -> 33.05 i have done some benchmarks with the old and the new code: the new code seems to last a litte bit longer, in my case: 7.44 sec <-> 7.50 sec on an ar71xx/400mhz - should be ok IMHO. Signed-off-by: Bastian Bittorf <bittorf at bluebottle.com>
>From d584b3e50a67b5e63949430ce16128d8bc5a0066 Mon Sep 17 00:00:00 2001 From: Bastian Bittorf <bastian@bastian-laptop.(none)> Date: Sun, 16 Jan 2011 11:17:26 +0100 Subject: [PATCH] load_modules() refactoring without sed --- package/base-files/files/etc/functions.sh | 27 ++++++++++++++++++++++----- package/base-files/files/etc/init.d/boot | 2 +- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/package/base-files/files/etc/functions.sh b/package/base-files/files/etc/functions.sh index acea617..af2bb12 100755 --- a/package/base-files/files/etc/functions.sh +++ b/package/base-files/files/etc/functions.sh @@ -205,11 +205,28 @@ config_list_foreach() { done } -load_modules() { - [ -d /etc/modules.d ] && { - cd /etc/modules.d - sed 's/^[^#]/insmod &/' $* | ash 2>&- || : - } +load_modules() +{ + local list_files="/etc/modules.d/*" + local file line dummy t1 t2 + local count=0 + + read t1 dummy </proc/uptime + + for file in $list_files; do { + while read line; do { + case "$line" in + "#"*|"") ;; + *) + count="$(( $count + 1 ))" + insmod $line 2>&1 | logger -t "load_modules()" -p daemon.info + ;; + esac + } done <$file + } done + + read t2 dummy </proc/uptime + logger -t "load_modules()" -p daemon.info "[OK] $count modules, time: $t1 -> $t2" } include() { diff --git a/package/base-files/files/etc/init.d/boot b/package/base-files/files/etc/init.d/boot index 7927af1..eafafa5 100755 --- a/package/base-files/files/etc/init.d/boot +++ b/package/base-files/files/etc/init.d/boot @@ -79,7 +79,7 @@ start() { [ -n "$rootdev" ] && ln -s "$rootdev" /dev/root } - load_modules /etc/modules.d/* + load_modules } stop() { -- 1.6.3.3
_______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/mailman/listinfo/openwrt-devel