]> git.ozlabs.org Git - petitboot/blobdiff - devices.c
tests: add tests for assorted ydl and ubuntu configs
[petitboot] / devices.c
index 43a388dfbecd832da7098eea799bf285802838b7..77860d0546a8dcc967da4a71a2e803f91db6f836 100644 (file)
--- a/devices.c
+++ b/devices.c
@@ -13,7 +13,7 @@
 #include "petitboot-paths.h"
 #include "devices/message.h"
 
-#define PBOOT_DEFAULT_ICON     "usbpen.png"
+#define PBOOT_DEFAULT_ICON     "tux.png"
 
 static const char *default_icon = artwork_pathname(PBOOT_DEFAULT_ICON);
 
@@ -238,7 +238,7 @@ static twin_bool_t pboot_proc_server_sock(int sock, twin_file_op_t ops,
        return TWIN_TRUE;
 }
 
-int pboot_start_device_discovery(void)
+int pboot_start_device_discovery(int udev_trigger)
 {
        int sock;
        struct sockaddr_un addr;
@@ -269,6 +269,12 @@ int pboot_start_device_discovery(void)
 
        twin_set_file(pboot_proc_server_sock, sock, TWIN_READ, &_ctx);
 
+       if (udev_trigger) {
+               int rc = system("udevtrigger");
+               if (rc)
+                       LOG("udevtrigger failed, rc %d\n", rc);
+       }
+
        return TWIN_TRUE;
 }
 
@@ -276,16 +282,16 @@ void pboot_exec_option(void *data)
 {
        struct boot_option *opt = data;
        char *kexec_opts[10];
-       int nr_opts = 2;
+       int i, nr_opts = 2;
 
-       kexec_opts[0] = "/sbin/kexec";
+       kexec_opts[0] = "/usr/sbin/kexec";
        kexec_opts[1] = "-f";
-       if (opt->initrd_file) {
+       if (opt->initrd_file && *opt->initrd_file) {
                kexec_opts[nr_opts] = malloc(10 + strlen(opt->initrd_file));
                sprintf(kexec_opts[nr_opts], "--initrd=%s", opt->initrd_file);
                nr_opts++;
        }
-       if (opt->boot_args)  {
+       if (opt->boot_args && *opt->boot_args)  {
                kexec_opts[nr_opts] = malloc(10 + strlen(opt->boot_args));
                sprintf(kexec_opts[nr_opts], "--command-line=%s",
                        opt->boot_args);
@@ -294,5 +300,14 @@ void pboot_exec_option(void *data)
 
        kexec_opts[nr_opts++] = opt->boot_image_file;
        kexec_opts[nr_opts] = NULL;
+
+       LOG("calling kexec:\n");
+       for (i = 0; i < nr_opts; i++) {
+               LOG("\t'%s'\n", kexec_opts[i]);
+       }
+       fflush(stdout);
+
        execv(kexec_opts[0], kexec_opts);
+       pboot_message("kexec failed: %s", strerror(errno));
+       LOG("execv() failed: %s", strerror(errno));
 }