Newer kernel packages e.g. in Fedora place the kernel image named
"vmlinuz" directly within the modules path of that kernel.
Find these images first, not looking for kernels in /boot if any is
found under modules paths.
---
src/kernel.ml | 24 +++++++++++++++++++++++-
1 file changed, 23 insertions(+), 1 deletion(-)
diff --git a/src/kernel.ml b/src/kernel.ml
index 2e061d8..b4e89da 100644
--- a/src/kernel.ml
+++ b/src/kernel.ml
@@ -22,6 +22,7 @@ open Printf
open Utils
open Ext2fs
open Fnmatch
+open Glob
let patt_of_cpu host_cpu =
let models =
@@ -60,7 +61,28 @@ let rec build_kernel debug host_cpu dtb_wildcard copy_kernel kernel dtb
=
let modpath = find_modpath debug kernel_version in
kernel_env, kernel_name, kernel_version, modpath
with Not_found ->
- find_kernel debug host_cpu kernel in
+ let kernels =
+ let files = glob "/lib/modules/*/vmlinuz" [GLOB_NOSORT; GLOB_NOESCAPE]
in
+ let files = Array.to_list files in
+ let kernels =
+ List.map (
+ fun f ->
+ let modpath = Filename.dirname f in
+ f, Filename.basename f, Filename.basename modpath, modpath
+ ) files in
+ List.sort (
+ fun (_, _, a, _) (_, _, b, _) -> compare_version b a
+ ) kernels in
+
+ if kernels <> [] then (
+ let kernel = List.hd kernels in
+ if debug >= 1 then (
+ let kernel_file, _, _, _ = kernel in
+ printf "supermin: kernel: picked vmlinuz %s\n%!" kernel_file;
+ );
+ kernel
+ ) else
+ find_kernel debug host_cpu kernel in
(* If the user passed --dtb option, locate dtb. *)
(match dtb_wildcard with
--
2.7.4