diff --git a/CHANGES b/CHANGES index dd4160aa..bbc43b1a 100644 --- a/CHANGES +++ b/CHANGES @@ -4,6 +4,7 @@ lm-sensors CHANGES file SVN HEAD init: Fix EnvironmentFile in service files sensors-detect: Report built-in drivers as such + Use modules.builtin instead of /sys/module 3.3.4 (2013-05-27) sensors.conf.5: Mention "sensors -u" to get the raw feature names diff --git a/prog/detect/sensors-detect b/prog/detect/sensors-detect index 518e5d81..ca911f7c 100755 --- a/prog/detect/sensors-detect +++ b/prog/detect/sensors-detect @@ -2616,11 +2616,12 @@ sub initialize_conf # [2] -> SUBLEVEL # [3] -> EXTRAVERSION # -use vars qw(@kernel_version $kernel_arch); +use vars qw($kernel_version @kernel_version $kernel_arch); sub initialize_kernel_version { - `uname -r` =~ /(\d+)\.(\d+)\.(\d+)(.*)/; + chomp($kernel_version = `uname -r`); + $kernel_version =~ /(\d+)\.(\d+)\.(\d+)(.*)/; @kernel_version = ($1, $2, $3, $4); chomp($kernel_arch = `uname -m`); @@ -2792,20 +2793,19 @@ use vars qw(%modules_list %modules_supported @modules_we_loaded); sub initialize_modules_list { - local $_; + local ($_, *INPUTFILE); - # /sys/module contains built-in drivers too, but doesn't exist on - # older kernels (added in kernel 2.6.7) - if (opendir(local *MODULES, "$sysfs_root/module")) { - while (defined($_ = readdir(MODULES))) { - next if m/^\./; - $modules_list{$1} = 1 if m/^(\S*)/; + # Starting with kernel 2.6.33, a list of built-in modules is available + if (open(*INPUTFILE, "/lib/modules/$kernel_version/modules.builtin")) { + while () { + tr/-/_/; + $modules_list{$1} = 1 if m/\/([^\/]+)\.ko$/; } - return; + close(INPUTFILE); } - # Fall back to /proc/modules as it is always available - open(local *INPUTFILE, "/proc/modules") or return; + # List all loaded modules + open(*INPUTFILE, "/proc/modules") or return; while () { $modules_list{$1} = 1 if m/^(\S*)/; }