altboot:
authorMatthias Hentges <oe@hentges.net>
Sun, 23 Apr 2006 14:47:58 +0000 (14:47 +0000)
committerOpenEmbedded Project <openembedded-devel@lists.openembedded.org>
Sun, 23 Apr 2006 14:47:58 +0000 (14:47 +0000)
- Removed multiple die() functions
- Altboot no longer activates an off-flash altboot-menu when not
  booting from flash
- Added a debug_echo function which is disabled in non-rc and
  non-snapshot builds
- RC's and snapshots now spawn a debug shell on tty4 right after
  the kernel is booted
- die() messages are now colored red/white, debug is purple(?)/white
- Fixed start_networking() on collie and made it a little bit more verbose

13 files changed:
packages/altboot/altboot_0.0.0.bb
packages/altboot/files/akita/altboot-2.6.cfg
packages/altboot/files/altboot-menu/15-bootSD
packages/altboot/files/altboot-menu/20-bootCF
packages/altboot/files/altboot-menu/99-ownScripts-example
packages/altboot/files/altboot-menu/Advanced/30-bootUSB-Stick
packages/altboot/files/altboot-menu/Advanced/40-bootNFS
packages/altboot/files/altboot-menu/Advanced/70-install-tgz
packages/altboot/files/altboot-menu/Advanced/70-setKernel
packages/altboot/files/altboot-menu/Advanced/80-configure-kexec
packages/altboot/files/altboot-menu/Advanced/80-copyrootfs
packages/altboot/files/altboot.func
packages/altboot/files/init.altboot

index 7b62414..3bda946 100644 (file)
@@ -13,7 +13,6 @@ RRECOMMENDS_append_c7x0 = " kexec-tools"
 
 PR = "r41"
 
-
 SRC_URI = "file://altboot-menu \
           file://altboot.rc \
           file://altboot.func \         
index 2254a35..c763f8b 100644 (file)
@@ -14,8 +14,8 @@ ENABLE_IMAGECONF="yes"
 SD_DEVICE="/dev/mmcblk0p1"
 SD_KERNEL_MODULE=""
 
-USB_HOST_AVAILABLE="no"
-USB_STORAGE_MODULES="usb_ohci_pxa27x usb-storage"
+USB_HOST_AVAILABLE="yes"
+USB_STORAGE_MODULES="ohci_hcd usb_storage sd_mod"
 USB_STORAGE_PARTITION="/dev/sda1"
 USB_STORAGE_WAIT="4"
 
index 7123491..0476a5c 100644 (file)
@@ -7,11 +7,6 @@
 
 M_TITLE="Boot SD card"
 
-die() {
-       echo "ERROR: $1" >/dev/tty0
-       exec $SH_SHELL </dev/tty0 >/dev/tty0 2>&1
-}
-
 # This function is activated by init.altboot by calling this script with the "run" option
 run_module() {
        
index 3a3f4fb..36d6b82 100644 (file)
@@ -7,11 +7,6 @@
 
 M_TITLE="Boot CF card"
 
-die() {
-       echo "ERROR: $1" >/dev/tty0
-       exec $SH_SHELL </dev/tty0 >/dev/tty0 2>&1
-}
-
 # This function is activated by init.altboot by calling this script with the "run" option
 run_module() {
        
index b1b444f..7566416 100644 (file)
@@ -20,14 +20,6 @@ exit 0
 # The "title" parameter is implemented at the end of this script so it will never be reached
 # and the script will simply be ignored by altboot.
 
-
-# The die() function aborts the boot if something goes wrong and sets STDIN / STDERR / STDOUT
-# correctly.
-die() {
-       echo "ERROR: $1" >/dev/tty0
-       exec $SH_SHELL </dev/tty0 >/dev/tty0 2>&1
-}
-
 # This function is activated by init.altboot by calling this script with the "run" option
 run_module() {
 
index 3cf8c50..b573e7a 100644 (file)
@@ -8,12 +8,7 @@
 M_TITLE="Boot USB Storage"
 
 test "$USB_HOST_AVAILABLE" = "yes" || exit 0
-
-die() {
-       echo "ERROR: $1" >/dev/tty0
-       exec $SH_SHELL </dev/tty0 >/dev/tty0 2>&1
-}
-
+       
 # This function is activated by init.altboot by calling this script with the "run" option
 run_module() {
        
index 352b29e..9a36b8e 100644 (file)
@@ -9,11 +9,6 @@
 
 M_TITLE="Boot from NFS"
 
-die() {
-       echo -e "ERROR: $1" >/dev/tty0
-       exec $SH_SHELL </dev/tty0 >/dev/tty0 2>&1
-}
-
 # This function is activated by init.altboot by calling this script with the "run" option
 run_module() {
 
@@ -24,9 +19,7 @@ run_module() {
                        
        nfs_host="`cat /etc/fstab | grep -v ^# | grep nfs | awk '{print $1}'|sed -n "s/\(.*\)\:\(.*\)/\1/p" `"
        nfs_mounts="`cat /etc/fstab | grep -v ^# | grep nfs | awk '{print $1}'`"
-       nfs_mountpoints="`cat /etc/fstab | grep -v ^# | grep nfs | awk '{print $2}'`"   
-       
-       WLAN_NIC="`iwconfig 2>/dev/null | grep ESSID | awk '{print $1}'`"
+       nfs_mountpoints="`cat /etc/fstab | grep -v ^# | grep nfs | awk '{print $2}'`"                   
                
        start_networking "$nfs_host"    
        
index 2ee92cd..cb8b272 100644 (file)
@@ -2,11 +2,6 @@
 
 M_TITLE="Install RootFS from tar.gz"
 
-# die() {
-#      echo "ERROR: $1" >/dev/tty0
-#      exec $SH_SHELL </dev/tty0 >/dev/tty0 2>&1
-# }
-
 run_module(){
        test -e /etc/altboot.func && . /etc/altboot.func || die "ERROR: /etc/altboot.func not found. Check your installation!"  
        
index a2c1efa..6192232 100644 (file)
@@ -40,11 +40,13 @@ run_module() {
                        
                        get_pref "kexec_klist" "$junk" KEXEC_SELECTED_KERNEL && break
 
-               done
-               
-               echo "Using [$KEXEC_SELECTED_KERNEL]"
+               done            
+       else
+               KEXEC_SELECTED_KERNEL="`ls -1 $KEXEC_KERNEL_DIR/zImage* | grep -v "kexec.cfg" `"
        fi
        
+       echo -e "\nUsing [$KEXEC_SELECTED_KERNEL]"
+       
        if ! test -e "$KEXEC_SELECTED_KERNEL.kexec.cfg" 
        then
                echo -e "\nWARNING: This kernel has not been configured."
index 27b6a87..e294df6 100644 (file)
@@ -38,11 +38,13 @@ run_module() {
                        
                        get_pref "kexec_klist" "$junk" KEXEC_KERNEL && break
 
-               done
-               
-               echo "Using [$KEXEC_KERNEL]"
+               done                            
+       else
+               KEXEC_KERNEL="`ls -1 $KEXEC_KERNEL_DIR/zImage* | grep -v "kexec.cfg" `"
        fi
        
+       echo -e "\nUsing [$KEXEC_KERNEL]"
+       
        configure_rootdev
        configure_roottype
        configure_verbose
index 13f98a0..af6bd38 100644 (file)
@@ -4,11 +4,6 @@ M_TITLE="Copy rootfs to SD/CF"
 # Unfinished script.
 exit 0
 
-die() {
-       echo "ERROR: $1" >/dev/tty0
-       exec $SH_SHELL </dev/tty0 >/dev/tty0 2>&1
-}
-
 ask_target() {
        available_disks="`mount | grep "/media" | grep -v ram | awk '{print $3}'`"
        
index 5b587c4..13ee515 100644 (file)
@@ -1,4 +1,12 @@
 #! /bin/sh
+
+C_RED="\033[31m"
+C_YELLOW="\033[35m"
+C_BLUE="\033[34m"
+C_WHITE="\033[38m"
+C_RESET="\033[0m"
+
+
 # This function checks for the presence of a real filesystem and loop-images on the target
 # $1 = folder of rootfs, $2 = runlevel (defaults to 5)
 # $2 = name of calling module
@@ -231,7 +239,8 @@ do_pivot(){
                boot_new_rootfs_splash          
                echo "Calling INIT"
                        
-               exec /usr/sbin/chroot . /sbin/init $2 >/dev/tty0 2>&1
+               exec /usr/sbin/chroot . $REAL_INIT $2 >/dev/tty0 2>&1
+               #exec /usr/sbin/chroot . /sbin/init $2 >/dev/tty0 2>&1
        else
                echo "FAILED"
                die "* * * pivot_root failed! * * *" 
@@ -281,7 +290,7 @@ image_conf(){
                while true
                do
                        echo -e "Wasting RAM is never a good idea.\nOnly say Y if your rootfs is very small in size"
-                       echo -n "Do you want to store ipkg package data in RAM? [N|y] "
+                       echo -en "Do you want to store ipkg package data\nin RAM? [N|y] "
                        read junk
                        
                        if test "$junk" = "" -o "$junk" = n -o "$junk" = N
@@ -301,7 +310,7 @@ image_conf(){
        then                                            
                while true
                do
-                       echo -n "Do you want to keep the SD, CF and /home ipkg install targets? [N|y] "
+                       echo -en "Do you want to keep the SD, CF and /home\nipkg install targets? [N|y] "
                        read junk
                        
                        if test "$junk" = "" -o "$junk" = n -o "$junk" = N
@@ -557,7 +566,7 @@ show_menu() {
 }
 
 mdie() {
-       echo "ERROR: $1" >/dev/tty0
+       echo -e "${C_RED}ERROR:${C_RESET}${C_WHITE} $1${C_RESET}" >/dev/tty0
        
        echo -e "\nPress <ENTER> to return to the menu"
        read junk
@@ -612,8 +621,14 @@ get_pref() {
        test -n "$data_value" && return 0
 }
 
+debug_echo() {
+       test "$ENABLE_DEBUG" = "yes" && echo -e "${C_YELLOW}DEBUG:${C_RESET}${C_WHITE} $1 ${C_RESET}" >/dev/tty0 2>&1
+}
+
 start_networking() {
 
+       test -z "$1" && mdie "No remote host configured, check /etc/fstab for NFS hosts"
+       
        if test "$USB_NETWORKING_AVAILABLE" = "yes"
        then
                echo ""
@@ -636,7 +651,7 @@ start_networking() {
                        junk="`cat /etc/.altboot-lanselect.last`"
                        test -z "$junk" && junk=1
                        
-                       echo -n "Connection Type: $junk (autoboot)"
+                       echo "Connection Type: $junk (autoboot)"
                fi
                        
                case "$junk" in
@@ -669,12 +684,16 @@ start_networking() {
 
                if test -x /etc/init.d/pcmcia
                then
+                       echo -e "\nRunning cardctl to setup networking..."
                        /etc/init.d/pcmcia start >/dev/null 2>&1 || die "/etc/init.d/pcmcia start failed!"
+                       sleep 1
                else    
                        # With kernel 2.6.16+ udev is used 
-                       ps ax| grep -v grep | grep -q udevd || /etc/init.d/udev start >/dev/null 2>&1 || die "/etc/init.d/udev start failed!"
+                       echo -e "\nRunning udevd to setup networking..."
+                       ps ax | grep -v grep | grep -q udevd || /etc/init.d/udev start >/dev/null 2>&1 || die "/etc/init.d/udev start failed!"
 
-                       /etc/init.d/udev stop
+                       # Stop udev to work around some very ugly (yet harmless) error messages on boot
+                       /etc/init.d/udev stop >/dev/null 2>&1
                fi
        fi
        
@@ -695,9 +714,19 @@ start_networking() {
                        
                ifup "$USB_NW_DEVICE"
        fi
+
+       WLAN_NIC="`iwconfig 2>/dev/null | grep ESSID | grep -v wifi | awk '{print $1}'`"
+
+       if test -z "$WLAN_NIC"
+       then
+               debug_echo "WARNING: WLAN_NIC is empty!\n" 
+               debug_echo "Filter result: [$WLAN_NIC]"
+               debug_echo "iwconfig: [`iwconfig`]"
+               mdie "No network interface found"
+       fi
        
        # WLAN with DHCP needs some time to get a lease, set up the routing, etc.       
-       echo -n "Waiting for Network."
+       echo -n "Waiting for host [$1] on [$WLAN_NIC]."
        cnt=0
        while true
        do
index a987918..3dc7c60 100644 (file)
@@ -27,16 +27,31 @@ esac
 test -e "$ALTBOOT_CFG_FILE" && . "$ALTBOOT_CFG_FILE" || echo "WARNING: No $ALTBOOT_CFG_FILE found! Check your installation of Altboot!" > /dev/tty1
 
 C_RED="\033[31m"
+C_YELLOW="\033[33m"
 C_BLUE="\033[34m"
 C_WHITE="\033[37m"
 C_RESET="\033[0m"
 
 
 die() {
-       echo -e "ERROR: $1" >/dev/tty0
+       echo -e "${C_RED}ERROR: $1${C_RESET}" >/dev/tty0
        exec $SH_SHELL </dev/tty0 >/dev/tty0 2>&1
 }
 
+debug_shell() {                
+       # VT 2 = Opie, VT 3 = GPE
+       test -z "$1" && VT=4 || VT=$1
+       
+       echo -e "\033c" > /dev/tty$VT
+
+       echo -en "\nPress <ENTER> to activate the debug shell." > /dev/tty$VT
+       read junk </dev/tty$VT
+               
+       echo "" > /dev/tty$VT   
+       /bin/sh  </dev/tty$VT >/dev/tty$VT 2>&1
+       
+       #openvt -lf -c$VT -- /bin/sh </dev/tty$VT >/dev/tty$VT 2>&1
+}
 
 # This function prints the boot-menu
 # $1: Directory containing the scripts for the menu-items
@@ -299,6 +314,13 @@ wait_for_input() {
 # Note: this is positively ugly. If someone knows a better way to detect wheter
 # we are already booted into a runlevel _without_ reading /var and / or using `runlevel`
 # PLEASE let me know.
+
+if ( echo "$VERSION" |  egrep -iq "(snapshot|-rc)" )
+then
+       ENABLE_DEBUG="yes"
+       debug_shell 4 >/dev/null 2>&1 &
+fi
+
 if test -f /proc/cmdline -a "`ps ax|wc -l|tr -d " "`" -gt 30 -a "$1" != "-force"
 then
        echo "altboot: Using real init [$REAL_INIT] [$*] [`ps ax|wc -l|tr -d " "`] *" >/dev/tty1