mirror of
https://github.com/linuxboot/heads.git
synced 2024-12-20 05:28:08 +00:00
a4d7654b1e
This development branch builds a NERF firmware for the Dell R630 server. It does not use coreboot; instead it branches directly from the vendor's PEI core into Linux and the Heads runtime that is setup to be run as an EFI executable.
101 lines
2.6 KiB
Bash
Executable File
101 lines
2.6 KiB
Bash
Executable File
#!/bin/ash
|
|
mknod /dev/ttyprintk c 5 3
|
|
echo "hello world" > /dev/ttyprintk
|
|
|
|
# Setup our path
|
|
export PATH=/sbin:/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
|
|
|
|
# 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
|
|
|
|
# bring up the ethernet; maybe should do DHCP?
|
|
insmod /lib/modules/igb.ko
|
|
ifconfig eth0 192.168.1.99
|
|
ifconfig eth0 > /dev/ttyprintk
|
|
|
|
# Setup the ssh server, allow root logins and log to stderr
|
|
if [ ! -d /etc/dropbear ]; then
|
|
mkdir /etc/dropbear
|
|
fi
|
|
dropbear -B -R 2>/dev/ttyprintk
|
|
|
|
# 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
|
|
|
|
ifconfig eth0 | head -1 > /dev/tty0
|
|
|
|
# For now we just start a shell
|
|
exec /bin/ash
|
|
|
|
# Load the date from the hardware clock, setting it in local time
|
|
hwclock -l -s
|
|
|
|
# Read the system configuration parameters
|
|
. /etc/functions
|
|
. /etc/config
|
|
|
|
# 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 [ ! -z "$CONFIG_USB_BOOT_DEV" ]; then
|
|
echo >> /etc/fstab "$CONFIG_USB_BOOT_DEV /media auto defaults,ro 0 0"
|
|
fi
|
|
|
|
if [ ! -x "$CONFIG_BOOTSCRIPT" ]; then
|
|
recovery 'Boot script missing? Entering recovery shell'
|
|
# just in case...
|
|
tpm extend -ix 4 -ic recovery
|
|
exec /bin/ash
|
|
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...
|
|
tpm extend -ix 4 -ic recovery
|
|
exec /bin/ash
|
|
fi
|
|
|
|
echo '***** Normal boot:' $CONFIG_BOOTSCRIPT
|
|
exec "$CONFIG_BOOTSCRIPT"
|
|
|
|
# We should never reach here, but just in case...
|
|
recovery 'Boot script failure? Entering recovery shell'
|
|
# belts and suspenders, just in case...
|
|
tpm extend -ix 4 -ic recovery
|
|
exec /bin/ash
|