summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/Makefile.housekeeping4
-rw-r--r--src/core/main.c16
-rw-r--r--src/hci/commands/image_cmd.c8
-rw-r--r--src/image/default.gpxe2
-rw-r--r--src/image/embedded.c13
-rw-r--r--src/include/gpxe/image.h9
6 files changed, 32 insertions, 20 deletions
diff --git a/src/Makefile.housekeeping b/src/Makefile.housekeeping
index 2146d9cb..2ab842e6 100644
--- a/src/Makefile.housekeeping
+++ b/src/Makefile.housekeeping
@@ -286,10 +286,6 @@ CFLAGS += $(EXTRA_CFLAGS)
ASFLAGS += $(EXTRA_ASFLAGS)
LDFLAGS += $(EXTRA_LDFLAGS)
-# Embedded image(s), or default if not set
-#
-EMBEDDED_IMAGE = image/default.gpxe
-
# Inhibit -Werror if NO_WERROR is specified on make command line
#
ifneq ($(NO_WERROR),1)
diff --git a/src/core/main.c b/src/core/main.c
index 8d360c42..bd2428f0 100644
--- a/src/core/main.c
+++ b/src/core/main.c
@@ -71,13 +71,17 @@ __asmcall int main ( void ) {
shell();
} else {
/* User doesn't want shell; load and execute the first
- * image. If booting fails (i.e. if the image
- * returns, or fails to execute), offer a second
- * chance to enter the shell for diagnostics.
+ * image, or autoboot() if we have no images. If
+ * booting fails for any reason, offer a second chance
+ * to enter the shell for diagnostics.
*/
- for_each_image ( image ) {
- image_exec ( image );
- break;
+ if ( have_images() ) {
+ for_each_image ( image ) {
+ image_exec ( image );
+ break;
+ }
+ } else {
+ autoboot();
}
if ( shell_banner() )
diff --git a/src/hci/commands/image_cmd.c b/src/hci/commands/image_cmd.c
index befa5a64..6d8b5908 100644
--- a/src/hci/commands/image_cmd.c
+++ b/src/hci/commands/image_cmd.c
@@ -222,13 +222,13 @@ static int kernel_exec ( int argc, char **argv ) {
}
/**
- * The "imgauto" command
+ * The "chain" command
*
* @v argc Argument count
* @v argv Argument list
* @ret rc Exit code
*/
-static int imgauto_exec ( int argc, char **argv) {
+static int chain_exec ( int argc, char **argv) {
int rc;
if ( ( rc = imgfetch_core_exec ( NULL, IMG_EXEC, argc, argv ) ) != 0 )
@@ -563,8 +563,8 @@ struct command image_commands[] __command = {
.exec = kernel_exec,
},
{
- .name = "imgauto",
- .exec = imgauto_exec,
+ .name = "chain",
+ .exec = chain_exec,
},
{
.name = "imgload",
diff --git a/src/image/default.gpxe b/src/image/default.gpxe
deleted file mode 100644
index 0b080b58..00000000
--- a/src/image/default.gpxe
+++ /dev/null
@@ -1,2 +0,0 @@
-#!gpxe
-autoboot
diff --git a/src/image/embedded.c b/src/image/embedded.c
index f76ca11b..4f763578 100644
--- a/src/image/embedded.c
+++ b/src/image/embedded.c
@@ -16,7 +16,8 @@
*
* @v refcnt Reference counter
*/
-static void embedded_image_free ( struct refcnt *refcnt __unused ) {
+static void __attribute__ (( unused ))
+embedded_image_free ( struct refcnt *refcnt __unused ) {
/* Do nothing */
}
@@ -51,14 +52,18 @@ static struct image embedded_images[] = {
* Register all embedded images
*/
static void embedded_init ( void ) {
- unsigned int i;
+ int i;
struct image *image;
void *data;
int rc;
+ /* Skip if we have no embedded images */
+ if ( ! sizeof ( embedded_images ) )
+ return;
+
/* Fix up data pointers and register images */
- for ( i = 0 ; i < ( sizeof ( embedded_images ) /
- sizeof ( embedded_images[0] ) ) ; i++ ) {
+ for ( i = 0 ; i < ( int ) ( sizeof ( embedded_images ) /
+ sizeof ( embedded_images[0] ) ) ; i++ ) {
image = &embedded_images[i];
/* virt_to_user() cannot be used in a static
diff --git a/src/include/gpxe/image.h b/src/include/gpxe/image.h
index f8b1482e..b953e150 100644
--- a/src/include/gpxe/image.h
+++ b/src/include/gpxe/image.h
@@ -133,6 +133,15 @@ extern struct list_head images;
#define for_each_image( image ) \
list_for_each_entry ( (image), &images, list )
+/**
+ * Test for existence of images
+ *
+ * @ret existence Some images exist
+ */
+static inline int have_images ( void ) {
+ return ( ! list_empty ( &images ) );
+}
+
extern struct image * alloc_image ( void );
extern int image_set_uri ( struct image *image, struct uri *uri );
extern int image_set_cmdline ( struct image *image, const char *cmdline );