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