source: bootcd/isolinux/syslinux-6.03/gpxe/src/core/main.c

Last change on this file was e16e8f2, checked in by Edwin Eefting <edwin@datux.nl>, 3 years ago

bootstuff

  • Property mode set to 100644
File size: 2.2 KB
Line 
1/**************************************************************************
2gPXE -  Network Bootstrap Program
3
4Literature dealing with the network protocols:
5        ARP - RFC826
6        RARP - RFC903
7        UDP - RFC768
8        BOOTP - RFC951, RFC2132 (vendor extensions)
9        DHCP - RFC2131, RFC2132 (options)
10        TFTP - RFC1350, RFC2347 (options), RFC2348 (blocksize), RFC2349 (tsize)
11        RPC - RFC1831, RFC1832 (XDR), RFC1833 (rpcbind/portmapper)
12
13**************************************************************************/
14
15FILE_LICENCE ( GPL2_OR_LATER );
16
17#include <stdio.h>
18#include <gpxe/init.h>
19#include <gpxe/features.h>
20#include <gpxe/shell.h>
21#include <gpxe/shell_banner.h>
22#include <gpxe/image.h>
23#include <usr/autoboot.h>
24#include <config/general.h>
25
26#define NORMAL  "\033[0m"
27#define BOLD    "\033[1m"
28#define CYAN    "\033[36m"
29
30/**
31 * Main entry point
32 *
33 * @ret rc              Return status code
34 */
35__asmcall int main ( void ) {
36        struct feature *feature;
37        struct image *image;
38
39        /* Some devices take an unreasonably long time to initialise */
40        printf ( PRODUCT_SHORT_NAME " initialising devices...\n" );
41
42        initialise();
43        startup();
44
45        /*
46         * Print welcome banner
47         *
48         *
49         * If you wish to brand this build of gPXE, please do so by
50         * defining the string PRODUCT_NAME in config/general.h.
51         *
52         * While nothing in the GPL prevents you from removing all
53         * references to gPXE or http://etherboot.org, we prefer you
54         * not to do so.
55         *
56         */
57        printf ( NORMAL "\n\n" PRODUCT_NAME "\n" BOLD "gPXE " VERSION
58                 NORMAL " -- Open Source Boot Firmware -- "
59                 CYAN "http://etherboot.org" NORMAL "\n"
60                 "Features:" );
61        for_each_table_entry ( feature, FEATURES )
62                printf ( " %s", feature->name );
63        printf ( "\n" );
64
65        /* Prompt for shell */
66        if ( shell_banner() ) {
67                /* User wants shell; just give them a shell */
68                shell();
69        } else {
70                /* User doesn't want shell; load and execute the first
71                 * image, or autoboot() if we have no images.  If
72                 * booting fails for any reason, offer a second chance
73                 * to enter the shell for diagnostics.
74                 */
75                if ( have_images() ) {
76                        for_each_image ( image ) {
77                                image_exec ( image );
78                                break;
79                        }
80                } else {
81                        autoboot();
82                }
83
84                if ( shell_banner() )
85                        shell();
86        }
87
88        shutdown ( SHUTDOWN_EXIT | shutdown_exit_flags );
89
90        return 0;
91}
Note: See TracBrowser for help on using the repository browser.