1 |
commit: 3a054014e880e5b1ff28e3d87767c45a073da6b5 |
2 |
Author: Fabio Erculiani <lxnay <AT> sabayon <DOT> org> |
3 |
AuthorDate: Tue Apr 23 15:21:53 2013 +0000 |
4 |
Commit: Richard Yao <ryao <AT> gentoo <DOT> org> |
5 |
CommitDate: Thu Apr 25 07:19:54 2013 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=3a054014 |
7 |
|
8 |
Drop our own /sbin/modprobe and use busybox built-in applet instead |
9 |
|
10 |
Our modprobe is an ancient heritage from the past, probably dating to |
11 |
a time where busybox's modprobe features were limited. There is no reason |
12 |
at all to keep using our own version instead of the busybox one. |
13 |
This commit also makes modules_scan 15% faster. |
14 |
|
15 |
--- |
16 |
defaults/initrd.defaults | 8 +-- |
17 |
defaults/initrd.scripts | 35 +++++------ |
18 |
defaults/modprobe | 147 ----------------------------------------------- |
19 |
gen_initramfs.sh | 25 +++++--- |
20 |
4 files changed, 36 insertions(+), 179 deletions(-) |
21 |
|
22 |
diff --git a/defaults/initrd.defaults b/defaults/initrd.defaults |
23 |
index 90f73f4..8ff5510 100755 |
24 |
--- a/defaults/initrd.defaults |
25 |
+++ b/defaults/initrd.defaults |
26 |
@@ -58,13 +58,7 @@ fi |
27 |
QUIET='1' |
28 |
ROOT_LINKS='bin sbin lib lib32 lib64 boot usr opt emul' |
29 |
ROOT_TREES='etc root home var' |
30 |
-INSMOD='insmod' |
31 |
-if [ "${KMAJOR}" -ge 3 ] || [ "${KMAJOR}" -eq 2 -a "${KMINOR}" -gt '4' ] |
32 |
-then |
33 |
- KSUFF='.ko' |
34 |
-else |
35 |
- KSUFF='.o' |
36 |
-fi |
37 |
+KSUFF='.ko' |
38 |
|
39 |
REAL_ROOT='' |
40 |
CONSOLE='/dev/console' |
41 |
|
42 |
diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts |
43 |
index 2e8e744..7ec5c94 100755 |
44 |
--- a/defaults/initrd.scripts |
45 |
+++ b/defaults/initrd.scripts |
46 |
@@ -2,10 +2,6 @@ |
47 |
|
48 |
. /etc/initrd.defaults |
49 |
|
50 |
-backup() { |
51 |
- echo -ne "\033[0G\033[0K" |
52 |
-} |
53 |
- |
54 |
modules_load() { |
55 |
for module in $* |
56 |
do |
57 |
@@ -17,30 +13,37 @@ modules_load() { |
58 |
|
59 |
modules_scan() { |
60 |
local MODS |
61 |
- [ -d "/etc/modules/${1}" ] || touch /etc/modules/${1} |
62 |
+ local loaded |
63 |
+ |
64 |
+ MODS=$(cat /etc/modules/${1} 2>/dev/null) |
65 |
+ [ -n "${MODS}" ] && echo -ne "${BOLD} ::${NORMAL} " |
66 |
+ [ -n "${MODS}" ] && echo -ne "Loading from ${1}: " |
67 |
|
68 |
- [ -f "/etc/modules/${1}" ] && MODS=`cat /etc/modules/${1}` |
69 |
for x in ${MODS} |
70 |
do |
71 |
- MLOAD=`echo ${MLIST} | sed -e "s/.*${x}.*/${x}/"` |
72 |
+ MLOAD=$(echo ${MLIST} | sed -e "s/.*${x}.*/${x}/") |
73 |
if [ "${MLOAD}" = "${x}" ] # Only module to no-load |
74 |
then |
75 |
echo -e "${BOLD} ::${NORMAL} Skipping ${x}..." |
76 |
- elif [ "${MLOAD}" = "${MLIST}" ] # == No change == No specified no-load |
77 |
+ elif [ "${MLOAD}" = "${MLIST}" ] |
78 |
then |
79 |
- [ -n "${DEBUG}" ] && echo -ne "${BOLD} ::${NORMAL} Checking for ${x}..." |
80 |
- # find -name does not work since the return status is always zero |
81 |
- if find /lib/modules/${KV} | grep /"${x}${KSUFF}" >/dev/null 2>&1 |
82 |
- then |
83 |
- echo -ne "${BOLD} ::${NORMAL} Scanning for ${x}..." |
84 |
- modprobe ${x} -n |
85 |
- backup |
86 |
- echo -ne "${NORMAL}" |
87 |
+ if [ -n "${DEBUG}" ]; then |
88 |
+ echo -ne "${BOLD} ::${NORMAL} " |
89 |
+ echo -ne "Scanning for ${x}..." |
90 |
fi |
91 |
+ modprobe ${x} > /dev/null 2>&1 |
92 |
+ loaded=${?} |
93 |
+ [ -n "${DEBUG}" -a "${loaded}" = "0" ] && \ |
94 |
+ echo "loaded" |
95 |
+ [ -n "${DEBUG}" -a "${loaded}" != "0" ] && \ |
96 |
+ echo "not loaded" |
97 |
+ [ -z "${DEBUG}" -a "${loaded}" = "0" ] && \ |
98 |
+ echo -en "${x} " |
99 |
else |
100 |
echo -e "${BOLD} ::${NORMAL} Skipping ${x}..." |
101 |
fi |
102 |
done |
103 |
+ [ -n "${MODS}" ] && echo |
104 |
} |
105 |
|
106 |
uppercase(){ |
107 |
|
108 |
diff --git a/defaults/modprobe b/defaults/modprobe |
109 |
deleted file mode 100755 |
110 |
index 6bbe7e4..0000000 |
111 |
--- a/defaults/modprobe |
112 |
+++ /dev/null |
113 |
@@ -1,147 +0,0 @@ |
114 |
-#!/bin/ash |
115 |
-# Apparently, this is required for proper functionality with busybox 1.1.3 |
116 |
-# Check out bug #197730 for more details. |
117 |
- |
118 |
-. /etc/initrd.defaults |
119 |
- |
120 |
-usage() { |
121 |
- echo 'Usage:' |
122 |
- echo ' modprobe moduleprefix' |
123 |
- echo |
124 |
- echo 'Example:' |
125 |
- echo ' modprobe eepro100' |
126 |
- echo |
127 |
- echo 'Note: Do not pass the suffix to modprobe!' |
128 |
- exit 1 |
129 |
-} |
130 |
- |
131 |
-# Pass module name to this function |
132 |
-modules_dep_list() { |
133 |
- if [ "$#" -lt '1' ] |
134 |
- then |
135 |
- echo 'modules_dep_list(): Improper usage!' |
136 |
- exit 1 |
137 |
- fi |
138 |
- cat /lib/modules/${KV}/modules.dep | grep /"${1}${KSUFF}:" | cut -d':' -f2 |
139 |
-} |
140 |
- |
141 |
- |
142 |
-# Pass module deps list |
143 |
-strip_mod_paths() { |
144 |
- local x |
145 |
- local ret |
146 |
- local myret |
147 |
- |
148 |
- [ "$#" -lt '1' ] && return |
149 |
- |
150 |
- for x in ${*} |
151 |
- do |
152 |
- ret=`basename ${x} | cut -d. -f1` |
153 |
- myret="${myret} ${ret}" |
154 |
- done |
155 |
- echo "${myret}" |
156 |
-} |
157 |
- |
158 |
-LOADED_MODULES='' |
159 |
-is_module_already_loaded() { |
160 |
- local x |
161 |
- if [ "$#" != '1' ] |
162 |
- then |
163 |
- echo 'is_module_already_loaded(): Improper usage!' |
164 |
- fi |
165 |
- |
166 |
- for x in ${LOADED_MODULES} |
167 |
- do |
168 |
- if [ "${x}" = "${1}" ] |
169 |
- then |
170 |
- # Yep, module is loaded |
171 |
- return 0 |
172 |
- fi |
173 |
- done |
174 |
- return 1 |
175 |
-} |
176 |
- |
177 |
-real_mod_path() { |
178 |
- # Find -name is no good since the return status is always zero |
179 |
- find "/lib/modules/${KV}" | grep /"${1}${KSUFF}" |
180 |
-} |
181 |
- |
182 |
-modprobe2() { |
183 |
- local x |
184 |
- local deps |
185 |
- local real_path |
186 |
- local modlist |
187 |
- local ret |
188 |
- |
189 |
- local echoAppend |
190 |
- local echoFlags |
191 |
- |
192 |
- if [ "$#" -lt '1' ] |
193 |
- then |
194 |
- usage |
195 |
- exit 1 |
196 |
- fi |
197 |
- real_path=`real_mod_path ${1}` |
198 |
- if [ "${real_path}" = '' -o "${real_path}" = ' ' ] |
199 |
- then |
200 |
- [ "${2}" = '-n' ] && echo -n " -> $1" |
201 |
- echo ' module not found.' |
202 |
- exit 2 |
203 |
- fi |
204 |
- modlist=`modules_dep_list ${1}` |
205 |
- if [ "${modlist}" != '' -a "${modlist}" != ' ' ] |
206 |
- then |
207 |
- deps=`strip_mod_paths ${modlist}` |
208 |
- else |
209 |
- deps='' |
210 |
- fi |
211 |
- # Make sure we don't do any endless loops! |
212 |
- |
213 |
- LOADED_MODULES="${LOADED_MODULES} ${1}" |
214 |
- for x in ${deps} |
215 |
- do |
216 |
- if ! is_module_already_loaded ${x} |
217 |
- then |
218 |
- if [ "${x}" != '' -a "${x}" != ' ' ] |
219 |
- then |
220 |
- modprobe2 "${x}" -n |
221 |
- fi |
222 |
- else |
223 |
- filler=1 |
224 |
- fi |
225 |
- done |
226 |
- # placing options into x |
227 |
- x="${real_path##*/}" |
228 |
- x="`cat "/etc/module_options/${x%.ko*}".* 2>/dev/null`" |
229 |
- ${INSMOD} ${real_path} ${x} > /dev/null 2>&1 |
230 |
- ret=$? |
231 |
- if [ ${ret} -eq 0 ] |
232 |
- then |
233 |
- echoAppend=' loaded.' |
234 |
- [ "${2}" = '-n' ] && echoFlags='-n' && echoAppend=', ' |
235 |
- echo ${echoFlags} "${1}${echoAppend}" |
236 |
- fi |
237 |
- return $ret |
238 |
-} |
239 |
- |
240 |
-if [ "$#" -lt '1' ] |
241 |
-then |
242 |
- usage |
243 |
-fi |
244 |
- |
245 |
-[ -f '/modules.cache' ] || touch /modules.cache |
246 |
-for x in `cat /modules.cache` |
247 |
-do |
248 |
- LOADED_MODULES="${LOADED_MODULES} ${x}" |
249 |
-done |
250 |
- |
251 |
-modprobe2 ${1} |
252 |
-modprobe_ret=$? |
253 |
- |
254 |
-[ -f '/modules.cache' ] && rm -f /modules.cache > /dev/null 2>&1 |
255 |
-for x in ${LOADED_MODULES} |
256 |
-do |
257 |
- echo $x >> /modules.cache |
258 |
-done |
259 |
- |
260 |
-exit $modprobe_ret |
261 |
|
262 |
diff --git a/gen_initramfs.sh b/gen_initramfs.sh |
263 |
index af6dff6..784c0cc 100755 |
264 |
--- a/gen_initramfs.sh |
265 |
+++ b/gen_initramfs.sh |
266 |
@@ -120,12 +120,26 @@ append_busybox() { |
267 |
chmod +x "${TEMP}/initramfs-busybox-temp/usr/share/udhcpc/default.script" |
268 |
|
269 |
# Set up a few default symlinks |
270 |
- for i in ${BUSYBOX_APPLETS:-[ ash sh mount uname echo cut cat}; do |
271 |
- rm -f ${TEMP}/initramfs-busybox-temp/bin/$i > /dev/null |
272 |
+ local default_applets="[ ash sh mount uname echo cut cat" |
273 |
+ for i in ${BUSYBOX_APPLETS:-${default_applets}}; do |
274 |
+ rm -f ${TEMP}/initramfs-busybox-temp/bin/$i |
275 |
ln -s busybox ${TEMP}/initramfs-busybox-temp/bin/$i || |
276 |
gen_die "Busybox error: could not link ${i}!" |
277 |
done |
278 |
|
279 |
+ local mod_applets="sbin/modprobe sbin/insmod sbin/rmmod bin/lsmod" |
280 |
+ local dir= |
281 |
+ local name= |
282 |
+ for i in ${mod_applets}; do |
283 |
+ dir=$(dirname $i) |
284 |
+ name=$(basename $i) |
285 |
+ rm -f ${TEMP}/initramfs-busybox-temp/$dir/$name |
286 |
+ mkdir -p ${TEMP}/initramfs-busybox-temp/$dir || |
287 |
+ gen_die "Busybox error: could not create dir: $dir" |
288 |
+ ln -s ../bin/busybox ${TEMP}/initramfs-busybox-temp/$dir/$name || |
289 |
+ gen_die "Busybox error: could not link ${i}!" |
290 |
+ done |
291 |
+ |
292 |
cd "${TEMP}/initramfs-busybox-temp/" |
293 |
log_future_cpio_content |
294 |
find . -print | cpio ${CPIO_ARGS} --append -F "${CPIO}" \ |
295 |
@@ -705,12 +719,6 @@ append_auxilary() { |
296 |
done |
297 |
echo '"' >> "${TEMP}/initramfs-aux-temp/etc/initrd.defaults" |
298 |
|
299 |
- if [ -f "${GK_SHARE}/arch/${ARCH}/modprobe" ] |
300 |
- then |
301 |
- cp "${GK_SHARE}/arch/${ARCH}/modprobe" "${TEMP}/initramfs-aux-temp/sbin/modprobe" |
302 |
- else |
303 |
- cp "${GK_SHARE}/defaults/modprobe" "${TEMP}/initramfs-aux-temp/sbin/modprobe" |
304 |
- fi |
305 |
if isTrue $CMD_DOKEYMAPAUTO |
306 |
then |
307 |
echo 'MY_HWOPTS="${MY_HWOPTS} keymap"' >> ${TEMP}/initramfs-aux-temp/etc/initrd.defaults |
308 |
@@ -728,7 +736,6 @@ append_auxilary() { |
309 |
chmod +x "${TEMP}/initramfs-aux-temp/init" |
310 |
chmod +x "${TEMP}/initramfs-aux-temp/etc/initrd.scripts" |
311 |
chmod +x "${TEMP}/initramfs-aux-temp/etc/initrd.defaults" |
312 |
- chmod +x "${TEMP}/initramfs-aux-temp/sbin/modprobe" |
313 |
|
314 |
if isTrue ${NETBOOT} |
315 |
then |