Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
kernel: refactor build_kernel & find_kernel
Move the handling of the SUPERMIN_* envvars, and the kernel copy/symlink
out of find_kernel to build_kernel: this way find_kernel does only the
search.  Also, the modules path search is done in by find_kernel as
well.

This is mostly code motion, with no behaviour changes.
  • Loading branch information
ptoscano committed Nov 16, 2016
1 parent 4d3b06a commit 1fa9b49
Showing 1 changed file with 44 additions and 45 deletions.
89 changes: 44 additions & 45 deletions src/kernel.ml
Expand Up @@ -40,28 +40,7 @@ let patt_of_cpu host_cpu =

let rec build_kernel debug host_cpu dtb_wildcard copy_kernel kernel dtb =
(* Locate the kernel. *)
let kernel_name, kernel_version =
find_kernel debug host_cpu copy_kernel kernel in

(* If the user passed --dtb option, locate dtb. *)
(match dtb_wildcard with
| None -> ()
| Some wildcard ->
find_dtb debug copy_kernel kernel_name wildcard dtb
);

(* Get the kernel modules. *)
let modpath = find_modpath debug kernel_version in

if debug >= 1 then (
printf "supermin: kernel: kernel_version %s\n" kernel_version;
printf "supermin: kernel: modules %s\n%!" modpath;
);

(kernel_version, modpath)

and find_kernel debug host_cpu copy_kernel kernel =
let kernel_file, kernel_name, kernel_version =
let kernel_file, kernel_name, kernel_version, modpath =
try
let kernel_env = getenv "SUPERMIN_KERNEL" in
if debug >= 1 then
Expand All @@ -78,38 +57,58 @@ and find_kernel debug host_cpu copy_kernel kernel =
printf "supermin: kernel: SUPERMIN_KERNEL version %s\n%!"
kernel_version;
let kernel_name = Filename.basename kernel_env in
kernel_env, kernel_name, kernel_version
let modpath = find_modpath debug kernel_version in
kernel_env, kernel_name, kernel_version, modpath
with Not_found ->
let is_arm =
String.length host_cpu >= 3 &&
host_cpu.[0] = 'a' && host_cpu.[1] = 'r' && host_cpu.[2] = 'm' in
find_kernel debug host_cpu kernel in

let all_files = Sys.readdir "/boot" in
let all_files = Array.to_list all_files in
(* If the user passed --dtb option, locate dtb. *)
(match dtb_wildcard with
| None -> ()
| Some wildcard ->
find_dtb debug copy_kernel kernel_name wildcard dtb
);

(* In original: ls -1dvr /boot/vmlinuz-*.$arch* 2>/dev/null | grep -v xen *)
let patterns = patt_of_cpu host_cpu in
let files = kernel_filter patterns is_arm all_files in
if debug >= 1 then (
printf "supermin: kernel: kernel_version %s\n" kernel_version;
printf "supermin: kernel: modules %s\n%!" modpath;
);

let files =
if files <> [] then files
else
(* In original: ls -1dvr /boot/vmlinuz-* 2>/dev/null | grep -v xen *)
kernel_filter ["vmlinu?-*"] is_arm all_files in
copy_or_symlink_file copy_kernel kernel_file kernel;

if files = [] then no_kernels host_cpu;
(kernel_version, modpath)

let files = List.sort (fun a b -> compare_version b a) files in
let kernel_name = List.hd files in
let kernel_version = get_kernel_version kernel_name in
and find_kernel debug host_cpu kernel =
let is_arm =
String.length host_cpu >= 3 &&
host_cpu.[0] = 'a' && host_cpu.[1] = 'r' && host_cpu.[2] = 'm' in

if debug >= 1 then
printf "supermin: kernel: picked kernel %s\n%!" kernel_name;
let all_files = Sys.readdir "/boot" in
let all_files = Array.to_list all_files in

("/boot" // kernel_name), kernel_name, kernel_version in
(* In original: ls -1dvr /boot/vmlinuz-*.$arch* 2>/dev/null | grep -v xen *)
let patterns = patt_of_cpu host_cpu in
let files = kernel_filter patterns is_arm all_files in

copy_or_symlink_file copy_kernel kernel_file kernel;
kernel_name, kernel_version
let files =
if files <> [] then files
else
(* In original: ls -1dvr /boot/vmlinuz-* 2>/dev/null | grep -v xen *)
kernel_filter ["vmlinu?-*"] is_arm all_files in

if files = [] then no_kernels host_cpu;

let files = List.sort (fun a b -> compare_version b a) files in
let kernel_name = List.hd files in
let kernel_version = get_kernel_version kernel_name in

if debug >= 1 then
printf "supermin: kernel: picked kernel %s\n%!" kernel_name;

(* Get the kernel modules. *)
let modpath = find_modpath debug kernel_version in

("/boot" // kernel_name), kernel_name, kernel_version, modpath

and kernel_filter patterns is_arm all_files =
let files =
Expand Down

0 comments on commit 1fa9b49

Please sign in to comment.