
efivafs contain some meta data about Intel VROC, which will be used by mdadm to create raid device. These are preparation work to support boot from Intel VROC RAID disk. (From OE-Core rev: b25869c76975bbcec8d2f22f680e58976ec4de5c) Signed-off-by: Liwei Song <liwei.song@windriver.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
3.4 KiB
Executable File
#!/bin/sh
Copyright (C) 2011 O.S. Systems Software LTDA.
Licensed on MIT
Provides the API to be used by the initramfs modules
Modules need to provide the following functions:
_enabled : check if the module ought to run (return 1 to skip)
_run : do what is need
Boot parameters are available on environment in the as:
'foo=value' as 'bootparam_foo=value'
'foo' as 'bootparam_foo=true'
'foo.bar[=value] as 'foo_bar=[value|true]'
Register a function to be called before running a module
The hook is called as:
pre
add_module_pre_hook() { MODULE_PRE_HOOKS="$MODULE_PRE_HOOKS $1" }
Register a function to be called after running a module
The hook is called as:
post
add_module_post_hook() { MODULE_POST_HOOKS="$MODULE_POST_HOOKS $1" }
Load kernel module
load_kernel_module() { if modprobe $1 >/dev/null 2>&1; then info "Loaded module $1" else debug "Failed to load module $1" fi }
Prints information
msg() { echo "$@" >/dev/console }
Prints information if verbose bootparam is used
info() { [ -n "$bootparam_verbose" ] && echo "$@" >/dev/console }
Prints information if debug bootparam is used
debug() { [ -n "$bootparam_debug" ] && echo "DEBUG: $@" >/dev/console }
Prints a message and start a endless loop
fatal() { echo $1 >/dev/console echo >/dev/console
if [ -n "$bootparam_init_fatal_sh" ]; then
sh
else
while [ "true" ]; do
sleep 3600
done
fi
}
Variables shared amoung modules
ROOTFS_DIR="/rootfs" # where to do the switch root MODULE_PRE_HOOKS="" # functions to call before running each module MODULE_POST_HOOKS="" # functions to call after running each module MODULES_DIR=/init.d # place to look for modules EFI_DIR=/sys/firmware/efi # place to store device firmware information
make mount stop complaining about missing /etc/fstab
touch /etc/fstab
initialize /proc, /sys, /run/lock and /var/lock
mkdir -p /proc /sys /run/lock /var/lock mount -t proc proc /proc mount -t sysfs sysfs /sys
if [ -d $EFI_DIR ];then mount -t efivarfs none /sys/firmware/efi/efivars fi
populate bootparam environment
for p in cat /proc/cmdline
; do
opt=echo $p | cut -d'=' -f1
opt=echo $opt | sed -e 'y/.-/__/'
if [ "echo $p | cut -d'=' -f1
" = "$p" ]; then
eval "bootparam_${opt}=true"
else
value="echo $p | cut -d'=' -f2-
"
eval "bootparam_${opt}="${value}""
fi
done
use /dev with devtmpfs
if grep -q devtmpfs /proc/filesystems; then mkdir -p /dev mount -t devtmpfs devtmpfs /dev else if [ ! -d /dev ]; then fatal "ERROR: /dev doesn't exist and kernel doesn't has devtmpfs enabled." fi fi
mkdir $ROOTFS_DIR
Load and run modules
for m in $MODULES_DIR/*; do
# Skip backup files
if [ "echo $m | sed -e 's/\~$//'
" != "$m" ]; then
continue
fi
module=`basename $m | cut -d'-' -f 2`
debug "Loading module $module"
# pre hooks
for h in $MODULE_PRE_HOOKS; do
debug "Calling module hook (pre): $h"
eval "$h pre $module"
debug "Finished module hook (pre): $h"
done
# process module
. $m
if ! eval "${module}_enabled"; then
debug "Skipping module $module"
continue
fi
debug "Running ${module}_run"
eval "${module}_run"
# post hooks
for h in $MODULE_POST_HOOKS; do
debug "Calling module hook (post): $h"
eval "$h post $module"
debug "Finished module hook (post): $h"
done
done
Catch all
fatal "ERROR: Initramfs failed to initialize the system."