Skip to content

Commit

Permalink
Split the (quick hack) boot logic out from main.c to autoboot.c, add a
Browse files Browse the repository at this point in the history
"boot" command to attempt booting from within the command shell, fall back
to shell if boot fails for any reason.
  • Loading branch information
Michael Brown committed Dec 20, 2006
1 parent 9ab1748 commit 84202d8
Show file tree
Hide file tree
Showing 7 changed files with 85 additions and 14 deletions.
1 change: 1 addition & 0 deletions src/Makefile
Expand Up @@ -146,6 +146,7 @@ SRCDIRS += tests
SRCDIRS += crypto
SRCDIRS += hci hci/commands hci/tui
SRCDIRS += hci/mucurses hci/mucurses/widgets
SRCDIRS += usr

# NON_AUTO_SRCS lists files that are excluded from the normal
# automatic build system.
Expand Down
3 changes: 2 additions & 1 deletion src/config.h
Expand Up @@ -115,8 +115,9 @@
* Command-line commands to include
*
*/
#define BOOT_CMD /* Automatic booting */
#define NVO_CMD /* Non-volatile option storage commands */
#define CONFIG_CMD /* Option configuration console */
#define CONFIG_CMD /* Option configuration console */

/* @END general.h */

Expand Down
3 changes: 3 additions & 0 deletions src/core/config.c
Expand Up @@ -143,6 +143,9 @@ REQUIRE_OBJECT ( pxe );
* Drag in all requested commands
*
*/
#ifdef BOOT_CMD
REQUIRE_OBJECT ( boot_cmd );
#endif
#ifdef NVO_CMD
REQUIRE_OBJECT ( nvo_cmd );
#endif
Expand Down
19 changes: 6 additions & 13 deletions src/core/main.c
Expand Up @@ -150,26 +150,19 @@ void test_dhcp ( struct net_device *netdev );
MAIN - Kick off routine
**************************************************************************/
int main ( void ) {
struct net_device *netdev;

/* Call all registered initialisation functions */
init_heap();
call_init_fns ();
probe_devices();

if ( shell_banner() ) {
shell();
/* Try autobooting if we're not going straight to the shell */
if ( ! shell_banner() ) {
autoboot();
}

netdev = next_netdev ();
if ( netdev ) {
test_dhcp ( netdev );
} else {
printf ( "No network device found\n" );
}

printf ( "Press any key to exit\n" );
getchar();

/* Autobooting failed or the user wanted the shell */
shell();

remove_devices();
call_exit_fns ();
Expand Down
21 changes: 21 additions & 0 deletions src/hci/commands/boot_cmd.c
@@ -0,0 +1,21 @@
#include <vsprintf.h>
#include <gpxe/command.h>
#include <gpxe/autoboot.h>

static int boot_exec ( int argc, char **argv ) {

if ( argc != 1 ) {
printf ( "Usage: %s\n"
"Attempts to boot the system\n", argv[0] );
return 1;
}

autoboot();

return 0;
}

struct command boot_command __command = {
.name = "boot",
.exec = boot_exec,
};
12 changes: 12 additions & 0 deletions src/include/gpxe/autoboot.h
@@ -0,0 +1,12 @@
#ifndef _GPXE_AUTOBOOT_H
#define _GPXE_AUTOBOOT_H

/** @file
*
* Automatic booting
*
*/

extern void autoboot ( void );

#endif /* _GPXE_AUTOBOOT_H */
40 changes: 40 additions & 0 deletions src/usr/autoboot.c
@@ -0,0 +1,40 @@
/*
* Copyright (C) 2006 Michael Brown <mbrown@fensystems.co.uk>.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/

#include <vsprintf.h>
#include <gpxe/autoboot.h>

/** @file
*
* Automatic booting
*
*/

#include <gpxe/netdevice.h>
void test_dhcp ( struct net_device *netdev );

void autoboot ( void ) {
struct net_device *netdev;

netdev = next_netdev ();
if ( netdev ) {
test_dhcp ( netdev );
} else {
printf ( "No network device found\n" );
}
}

0 comments on commit 84202d8

Please sign in to comment.