modules are now only handled with /sys/modules and modules.dep
No more "find" and /proc/modules checking. We now rely entirely on depmod and modules.depmaster
parent
d161561290
commit
fe1484f3db
3
TODO
3
TODO
|
|
@ -17,7 +17,8 @@ INITRAMFS TODO
|
|||
|
||||
GENERATOR TODO
|
||||
|
||||
- remove /proc/modules use /sys/module
|
||||
- add interpreter/plugin-scripts to be sourced at the beginning or end (can use dracut-functions)
|
||||
- provide "installkernel" and "new-kernel-pkg"
|
||||
- add mechanism for module specific command line options
|
||||
- pkg-config integration, to make it easy for other packages to use us.
|
||||
- add recovery image creator (mkrecovery)
|
||||
|
|
|
|||
|
|
@ -1053,7 +1053,7 @@ install_kmod_with_fw() {
|
|||
fi
|
||||
done
|
||||
if [[ $_found != yes ]]; then
|
||||
if ! grep -qe "\<${_modname//-/_}\>" /proc/modules; then
|
||||
if ! [[ -d $(echo /sys/module/${_modname//-/_}|{ read a b; echo $a; }) ]]; then
|
||||
dinfo "Possible missing firmware \"${_fw}\" for kernel module" \
|
||||
"\"${_modname}.ko\""
|
||||
else
|
||||
|
|
@ -1086,54 +1086,21 @@ for_each_kmod_dep() {
|
|||
)
|
||||
}
|
||||
|
||||
# filter kernel modules to install certain modules that meet specific
|
||||
# requirements.
|
||||
# $1 = search only in subdirectory of /kernel/$1
|
||||
# $2 = function to call with module name to filter.
|
||||
# This function will be passed the full path to the module to test.
|
||||
# The behaviour of this function can vary depending on whether $hostonly is set.
|
||||
# If it is, we will only look at modules that are already in memory.
|
||||
# If it is not, we will look at all kernel modules
|
||||
# This function returns the full filenames of modules that match $1
|
||||
filter_kernel_modules_by_path () (
|
||||
local _modname _filtercmd
|
||||
if ! [[ $hostonly ]]; then
|
||||
_filtercmd='find "$srcmods/kernel/$1" "$srcmods/extra"'
|
||||
_filtercmd+=' "$srcmods/weak-updates" -name "*.ko" -o -name "*.ko.gz"'
|
||||
_filtercmd+=' -o -name "*.ko.xz"'
|
||||
_filtercmd+=' 2>/dev/null'
|
||||
else
|
||||
_filtercmd='cut -d " " -f 1 </proc/modules|xargs modinfo -F filename '
|
||||
_filtercmd+='-k $kernel 2>/dev/null'
|
||||
fi
|
||||
for _modname in $(eval $_filtercmd); do
|
||||
case $_modname in
|
||||
*.ko) "$2" "$_modname" && echo "$_modname";;
|
||||
*.ko.gz) gzip -dc "$_modname" > $initdir/$$.ko
|
||||
$2 $initdir/$$.ko && echo "$_modname"
|
||||
rm -f $initdir/$$.ko
|
||||
;;
|
||||
*.ko.xz) xz -dc "$_modname" > $initdir/$$.ko
|
||||
$2 $initdir/$$.ko && echo "$_modname"
|
||||
rm -f $initdir/$$.ko
|
||||
;;
|
||||
esac
|
||||
done
|
||||
)
|
||||
|
||||
find_kernel_modules_by_path () (
|
||||
if ! [[ $hostonly ]]; then
|
||||
find "$srcmods/kernel/$1" "$srcmods/extra" "$srcmods/weak-updates" \
|
||||
-name "*.ko" -o -name "*.ko.gz" -o -name "*.ko.xz" 2>/dev/null
|
||||
while read a rest; do
|
||||
if [[ "${a##kernel}" != "$a" ]]; then
|
||||
[[ "${a##kernel/$1}" != "$a" ]] || continue
|
||||
fi
|
||||
echo $srcmods/${a%:}
|
||||
done < $srcmods/modules.dep
|
||||
else
|
||||
cut -d " " -f 1 </proc/modules \
|
||||
( cd /sys/module; echo *; ) \
|
||||
| xargs modinfo -F filename -k $kernel 2>/dev/null
|
||||
fi
|
||||
)
|
||||
|
||||
filter_kernel_modules () {
|
||||
filter_kernel_modules_by_path drivers "$1"
|
||||
}
|
||||
|
||||
find_kernel_modules () {
|
||||
find_kernel_modules_by_path drivers
|
||||
}
|
||||
|
|
@ -1180,8 +1147,9 @@ instmods() {
|
|||
fi
|
||||
# If we are building a host-specific initramfs and this
|
||||
# module is not already loaded, move on to the next one.
|
||||
[[ $hostonly ]] && ! grep -qe "\<${_mod//-/_}\>" /proc/modules \
|
||||
&& ! echo $add_drivers | grep -qe "\<${_mod}\>" \
|
||||
[[ $hostonly ]] \
|
||||
&& ! [[ -d $(echo /sys/module/${_mod//-/_}|{ read a b; echo $a; }) ]] \
|
||||
&& ! [[ "$add_drivers" =~ " ${_mod} " ]] \
|
||||
&& return
|
||||
|
||||
# We use '-d' option in modprobe only if modules prefix path
|
||||
|
|
|
|||
|
|
@ -555,6 +555,11 @@ srcmods="/lib/modules/$kernel/"
|
|||
}
|
||||
export srcmods
|
||||
|
||||
[[ -f $srcmods/modules.dep ]] || {
|
||||
dfatal "$srcmods/modules.dep is missing. Did you run depmod?"
|
||||
exit 1
|
||||
}
|
||||
|
||||
if [[ -f $outfile && ! $force ]]; then
|
||||
dfatal "Will not override existing initramfs ($outfile) without --force"
|
||||
exit 1
|
||||
|
|
|
|||
|
|
@ -14,23 +14,53 @@ depends() {
|
|||
installkernel() {
|
||||
local _modname
|
||||
# Include KMS capable drm drivers
|
||||
for _modname in $(find "$srcmods/kernel/drivers/gpu/drm" "$srcmods/extra" \( -name '*.ko' -o -name '*.ko.gz' -o -name '*.ko.xz' \) 2>/dev/null); do
|
||||
case $_modname in
|
||||
*.ko) grep -q drm_crtc_init $_modname ;;
|
||||
*.ko.gz) zgrep -q drm_crtc_init $_modname ;;
|
||||
*.ko.xz) xzgrep -q drm_crtc_init $_modname ;;
|
||||
esac
|
||||
if test $? -eq 0; then
|
||||
# if the hardware is present, include module even if it is not currently loaded,
|
||||
# as we could e.g. be in the installer; nokmsboot boot parameter will disable
|
||||
# loading of the driver if needed
|
||||
if [[ $hostonly ]] && modinfo -F alias $_modname | sed -e 's,\?,\.,g' -e 's,\*,\.\*,g' \
|
||||
| grep -qxf - /sys/bus/pci/devices/*/modalias; then
|
||||
hostonly='' instmods $_modname
|
||||
continue
|
||||
fi
|
||||
instmods $_modname
|
||||
|
||||
drm_module_filter() {
|
||||
local _drm_drivers='drm_crtc_init'
|
||||
local _ret
|
||||
# subfunctions inherit following FDs
|
||||
local _merge=8 _side2=9
|
||||
function nmf1() {
|
||||
local _fname _fcont
|
||||
while read _fname; do
|
||||
case "$_fname" in
|
||||
*.ko) _fcont="$(< $_fname)" ;;
|
||||
*.ko.gz) _fcont="$(gzip -dc $_fname)" ;;
|
||||
*.ko.xz) _fcont="$(xz -dc $_fname)" ;;
|
||||
esac
|
||||
[[ $_fcont =~ $_drm_drivers
|
||||
&& ! $_fcont =~ iw_handler_get_spy ]] \
|
||||
&& echo "$_fname"
|
||||
done
|
||||
}
|
||||
function rotor() {
|
||||
local _f1 _f2
|
||||
while read _f1; do
|
||||
echo "$_f1"
|
||||
if read _f2; then
|
||||
echo "$_f2" 1>&${_side2}
|
||||
fi
|
||||
done | nmf1 1>&${_merge}
|
||||
}
|
||||
# Use two parallel streams to filter alternating modules.
|
||||
set +x
|
||||
eval "( ( rotor ) ${_side2}>&1 | nmf1 ) ${_merge}>&1"
|
||||
_ret=$?
|
||||
[[ $debug ]] && set -x
|
||||
return $_ret
|
||||
}
|
||||
|
||||
for _modname in $(find_kernel_modules_by_path drivers/gpu/drm \
|
||||
| drm_module_filter) ; do
|
||||
# if the hardware is present, include module even if it is not currently loaded,
|
||||
# as we could e.g. be in the installer; nokmsboot boot parameter will disable
|
||||
# loading of the driver if needed
|
||||
if [[ $hostonly ]] && modinfo -F alias $_modname | sed -e 's,\?,\.,g' -e 's,\*,\.\*,g' \
|
||||
| grep -qxf - /sys/bus/pci/devices/*/modalias; then
|
||||
hostonly='' instmods $_modname
|
||||
continue
|
||||
fi
|
||||
instmods $_modname
|
||||
done
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue