mirror of
https://github.com/linuxboot/heads.git
synced 2024-12-18 20:47:55 +00:00
cdbd0fcf2a
Show RAM in GB, since the calculation in MB is imprecise as it excludes RAM allocated for GPU (eg). Fix display of firmware version strings which contain spaces by adjusting cut and simply chopping off the date at the end, which is a fixed 10-char length. Signed-off-by: Matt DeVillier <matt.devillier@puri.sm>
133 lines
3.4 KiB
Bash
Executable File
133 lines
3.4 KiB
Bash
Executable File
#!/bin/ash
|
|
mknod /dev/ttyprintk c 5 3
|
|
echo "hello world" > /dev/ttyprintk
|
|
|
|
# Setup our path
|
|
export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
|
|
|
|
# This is the very first script invoked by the Linux kernel and is
|
|
# running out of the ram disk. There are no fileysstems mounted.
|
|
# It is important to have a way to invoke a recovery shell in case
|
|
# the boot scripts are messed up, but also important to modify the
|
|
# PCRs if this happens to prevent the TPM disk keys from being revealed.
|
|
|
|
# First thing it is vital to mount the /dev and other system directories
|
|
mkdir /proc /sys /dev /tmp /boot /media 2>&- 1>&-
|
|
mount /dev 2>/dev/ttyprintk
|
|
mount /proc 2>/dev/ttyprintk
|
|
mount /sys 2>/dev/ttyprintk
|
|
if [ "$CONFIG_LINUXBOOT" = "y" ]; then
|
|
mount /sys/firmware/efi/efivars
|
|
fi
|
|
|
|
# Setup the pty psudeo filesystem
|
|
mkdir /dev/pts
|
|
mount /dev/pts 2>/dev/ttyprintk
|
|
|
|
if [ ! -r /dev/ptmx ]; then
|
|
ln -s /dev/pts/ptmx /dev/ptmx
|
|
fi
|
|
|
|
# Recovery shells will erase anything from here
|
|
mkdir -p /tmp/secret
|
|
|
|
# Now it is safe to print a banner
|
|
if [ -r /etc/motd ]; then
|
|
cat /etc/motd
|
|
cat /etc/motd > /dev/tty0
|
|
fi
|
|
|
|
# Load the date from the hardware clock, setting it in local time
|
|
hwclock -l -s
|
|
|
|
# Read the system configuration parameters
|
|
. /etc/functions
|
|
. /etc/config
|
|
|
|
if [ "$CONFIG_COREBOOT" = "y" ]; then
|
|
/bin/cbfs-init
|
|
fi
|
|
if [ "$CONFIG_LINUXBOOT" = "y" ]; then
|
|
/bin/uefi-init
|
|
fi
|
|
|
|
# Set GPG_TTY before calling gpg in key-init
|
|
export GPG_TTY=/dev/console
|
|
|
|
/bin/key-init
|
|
|
|
# Setup recovery serial shell
|
|
if [ ! -z "$CONFIG_BOOT_RECOVERY_SERIAL" ]; then
|
|
stty -F "$CONFIG_BOOT_RECOVERY_SERIAL" 115200
|
|
pause_recovery 'Console recovery shell' \
|
|
< "$CONFIG_BOOT_RECOVERY_SERIAL" \
|
|
> "$CONFIG_BOOT_RECOVERY_SERIAL" 2>&1 &
|
|
fi
|
|
|
|
# load USB modules for boards using a USB keyboard
|
|
if [ "$CONFIG_USB_KEYBOARD" = "y" ]; then
|
|
enable_usb
|
|
fi
|
|
|
|
# If the user has been holding down r, enter a recovery shell
|
|
# otherwise immediately start the configured boot script.
|
|
# We don't print a prompt, since this is a near instant timeout.
|
|
read \
|
|
-t 0.1 \
|
|
-n 1 \
|
|
boot_option
|
|
echo
|
|
|
|
if [ "$boot_option" = "r" ]; then
|
|
# Start an interactive shell
|
|
recovery 'User requested recovery shell'
|
|
# just in case...
|
|
if [ "$CONFIG_TPM" = "y" ]; then
|
|
tpm extend -ix 4 -ic recovery
|
|
fi
|
|
exec /bin/ash
|
|
exit
|
|
fi
|
|
|
|
combine_configs
|
|
. /tmp/config
|
|
|
|
# export firmware version
|
|
export FW_VER=$(dmesg | grep 'DMI' | grep -o 'BIOS.*' | cut -f2- -d ' ')
|
|
# chop off date, since will always be epoch w/timeless builds
|
|
FW_VER=${FW_VER::-10}
|
|
|
|
# Add our boot devices into the /etc/fstab, if they are defined
|
|
# in the configuration file.
|
|
if [ ! -z "$CONFIG_BOOT_DEV" ]; then
|
|
echo >> /etc/fstab "$CONFIG_BOOT_DEV /boot auto defaults,ro 0 0"
|
|
fi
|
|
|
|
if [ ! -x "$CONFIG_BOOTSCRIPT" -a ! -x "$CONFIG_BOOTSCRIPT_NETWORK" ]; then
|
|
recovery 'Boot script missing? Entering recovery shell'
|
|
else
|
|
if [ -x "$CONFIG_BOOTSCRIPT_NETWORK" ]; then
|
|
echo '***** Network Boot:' $CONFIG_BOOTSCRIPT_NETWORK
|
|
$CONFIG_BOOTSCRIPT_NETWORK
|
|
echo '***** Network Boot Completed:' $CONFIG_BOOTSCRIPT_NETWORK
|
|
# not blocking
|
|
fi
|
|
|
|
if [ -x "$CONFIG_BOOTSCRIPT" ]; then
|
|
echo '***** Normal boot:' $CONFIG_BOOTSCRIPT
|
|
exec "$CONFIG_BOOTSCRIPT"
|
|
|
|
# We should never reach here, but just in case...
|
|
recovery 'Boot script failure? Entering recovery shell'
|
|
else
|
|
# wait for boot via network to occur
|
|
pause_recovery 'Override network boot. Entering recovery shell'
|
|
fi
|
|
fi
|
|
|
|
# belts and suspenders, just in case...
|
|
if [ "$CONFIG_TPM" = "y" ]; then
|
|
tpm extend -ix 4 -ic recovery
|
|
fi
|
|
exec /bin/ash
|