diff options
7 files changed, 243 insertions, 0 deletions
diff --git a/packages/kexecboot/kexecboot-0.4/add-reboot-option.patch b/packages/kexecboot/kexecboot-0.4/add-reboot-option.patch new file mode 100644 index 0000000000..52619229fd --- /dev/null +++ b/packages/kexecboot/kexecboot-0.4/add-reboot-option.patch @@ -0,0 +1,41 @@ +--- a/kexecboot.c ++++ b/kexecboot.c +@@ -536,11 +536,23 @@ int main(int argc, char **argv) + fread(&evt, sizeof(struct input_event), 1, f); + while(evt.type != EV_KEY || evt.value != 0); + +- if(evt.code == KEY_UP && choice >0) +- choice--; +- if(evt.code == KEY_DOWN && choice < bl->size-1) +- choice++; +- // printf("%d %d\n",choice, evt.code); ++ switch (evt.code) { ++ case KEY_UP: ++ if (choice > 0) choice--; ++ break; ++ case KEY_DOWN: ++ if ( choice < (bl->size - 1) ) choice++; ++ break; ++ case KEY_R: ++ /* FIXME: Should work while no boot devices is found */ ++ sync(); ++ sleep(1); ++ /* if ( -1 == reboot(LINUX_REBOOT_CMD_RESTART) ) { */ ++ if ( -1 == reboot(RB_AUTOBOOT) ) { ++ perror("Can't initiate reboot"); ++ } ++ break; ++ } + + }while(evt.code != 87 && evt.code != 63); + fclose(f); +--- a/kexecboot.h ++++ b/kexecboot.h +@@ -29,6 +29,7 @@ + #include <sys/wait.h> + #include <ctype.h> + #include <errno.h> ++#include <sys/reboot.h> + #include "fb.h" + #include "devicescan.h" + #include "res/logo-img.h" diff --git a/packages/kexecboot/kexecboot-0.4/add-sleep.patch b/packages/kexecboot/kexecboot-0.4/add-sleep.patch new file mode 100644 index 0000000000..8f41b0ef10 --- /dev/null +++ b/packages/kexecboot/kexecboot-0.4/add-sleep.patch @@ -0,0 +1,12 @@ +--- a/kexecboot.c 2009-01-24 14:11:17.000000000 +0100 ++++ b/kexecboot.c 2009-01-24 14:15:03.000000000 +0100 +@@ -427,6 +427,9 @@ + + DPRINTF("I'm the init-process!\n"); + ++ /* extra delay for initializing slow SD/CF */ ++ sleep(1); ++ + /* Mount procfs */ + if ( -1 == mount("proc", "/proc", "proc", + 0, NULL) ) { diff --git a/packages/kexecboot/kexecboot-0.4/graphical-no-devices.patch b/packages/kexecboot/kexecboot-0.4/graphical-no-devices.patch new file mode 100644 index 0000000000..b2cb214894 --- /dev/null +++ b/packages/kexecboot/kexecboot-0.4/graphical-no-devices.patch @@ -0,0 +1,20 @@ +--- a/kexecboot.c ++++ b/kexecboot.c +@@ -66,8 +66,15 @@ void display_menu(FB *fb, struct bootlist *bl, int current) + LOGO_IMG_WIDTH, + LOGO_IMG_HEIGHT, + LOGO_IMG_BYTES_PER_PIXEL, LOGO_IMG_RLE_PIXEL_DATA); +- fb_draw_text (fb, LOGO_IMG_WIDTH + margin, margin, 0, 0, 0, &radeon_font, +- "Make your choice by selecting\nan item with the cursor keys\nand press OK to continue"); ++ /* If no devices found print a message */ ++ if (0 == bl->size) { ++ fb_draw_text (fb, LOGO_IMG_WIDTH + margin, margin, 0, 0, 0, &radeon_font, ++ "No bootable devices found.\nInsert bootable device\nand press 'R' to reboot."); ++ } else { ++ fb_draw_text (fb, LOGO_IMG_WIDTH + margin, margin, 0, 0, 0, &radeon_font, ++ "Make your choice by selecting\nan item with the cursor keys\nand press OK to continue.\nPress 'R' to reboot."); ++ } ++ + if(current < firstslot) + firstslot=current; + if(current > firstslot + slots -1) diff --git a/packages/kexecboot/kexecboot-0.4/scan_devices-top.patch b/packages/kexecboot/kexecboot-0.4/scan_devices-top.patch new file mode 100644 index 0000000000..6b21d03a3d --- /dev/null +++ b/packages/kexecboot/kexecboot-0.4/scan_devices-top.patch @@ -0,0 +1,39 @@ +--- a/kexecboot.c ++++ b/kexecboot.c +@@ -508,28 +508,27 @@ int main(int argc, char **argv) + if ((fb = fb_new(angle)) == NULL) + exit(-1); + +- bl = scan_devices(); +- +- if(!bl->size){ +- puts("No bootable device found"); +- exit(-1); +- } +- + f = fopen(eventif,"r"); + if(!f){ + perror(eventif); + exit(3); + } + +- + // deactivate terminal input +- + tcgetattr(fileno(stdin), &old); + new = old; + new.c_lflag &= ~ECHO; + // new.c_cflag &=~CREAD; + tcsetattr(fileno(stdin), TCSANOW, &new); + ++ bl = scan_devices(); ++/* ++ if(!bl->size){ ++ puts("No bootable device found"); ++ exit(-1); ++ } ++*/ ++ + do{ + display_menu(fb, bl, choice); + do diff --git a/packages/kexecboot/kexecboot-0.4/silent-output-hack.patch b/packages/kexecboot/kexecboot-0.4/silent-output-hack.patch new file mode 100644 index 0000000000..abe8e84dd1 --- /dev/null +++ b/packages/kexecboot/kexecboot-0.4/silent-output-hack.patch @@ -0,0 +1,79 @@ +--- a/devicescan.c 2009-01-17 00:51:35.000000000 +0100 ++++ b/devicescan.c 2009-01-24 22:13:45.000000000 +0100 +@@ -120,14 +120,14 @@ + malloc((strlen(split) + strlen("/dev/") + + 1) * sizeof(char)); + sprintf(device, "/dev/%s", split); +- printf("Probing %s\n",device); ++ /* printf("Probing %s\n",device); */ + int fd = open(device, O_RDONLY); + if (fd < 0) { + perror(device); + free(device); + continue; + } +- printf("Device %s is opened\n", device); ++ /* printf("Device %s is opened\n", device); */ + if (-1 == identify_fs(fd, &fstype, NULL, 0)) { + free(device); + continue; +@@ -137,33 +137,33 @@ + free(device); + continue; + } +- printf("FS on device %s is %s\n", device, fstype); ++ /* printf("FS on device %s is %s\n", device, fstype); */ + // no unknown filesystems + if (contains(fstype, fl) == -1) { + free(device); + continue; + } +- printf("found %s (%s)\n",device, fstype); ++ /* printf("found %s (%s)\n",device, fstype); */ + // mount fs + if (mount(device, "/mnt", fstype, MS_RDONLY, NULL)) { +- printf("mount failed\n"); ++ /* printf("mount failed\n"); */ + perror(device); + free(device); + continue; + } +- printf("mount successful\n"); ++ /* printf("mount successful\n"); */ + if ( (g = fopen("/mnt/zImage", "r")) ) + kernelpath = "/mnt/zImage"; + else if ( (g = fopen("/mnt/boot/zImage", "r")) ) + kernelpath = "/mnt/boot/zImage"; + else { +- printf("%s no kernel found, umounting\n", device); ++ /* printf("%s no kernel found, umounting\n", device); */ + free(device); + umount("/mnt"); + continue; + } + fclose(g); +- printf("found kernel\n"); ++ /* printf("found kernel\n"); */ + bl->list[count] = malloc(sizeof(struct boot)); + bl->list[count]->device = device; + bl->list[count]->fstype = fstype; +@@ -174,7 +174,7 @@ + fgets(bl->list[count]->cmdline, COMMAND_LINE_SIZE, + g); + fclose(g); +- printf("found command line\n"); ++ /* printf("found command line\n"); */ + bl->list[count]->cmdline[strlen(bl->list[count]->cmdline)-1] = '\0'; + } else + bl->list[count]->cmdline = NULL; +--- a/kexecboot.c 2009-01-25 10:41:04.000000000 +0100 ++++ b/kexecboot.c 2009-01-24 22:13:45.000000000 +0100 +@@ -558,7 +558,7 @@ + case KEY_R: + /* FIXME: Should work while no boot devices is found */ + sync(); +- sleep(1); ++ /* REMOVE: we sleep on boot sleep(1); */ + /* if ( -1 == reboot(LINUX_REBOOT_CMD_RESTART) ) { */ + if ( -1 == reboot(RB_AUTOBOOT) ) { + perror("Can't initiate reboot"); diff --git a/packages/kexecboot/kexecboot-0.4/switch-cursor-off.patch b/packages/kexecboot/kexecboot-0.4/switch-cursor-off.patch new file mode 100644 index 0000000000..632cc6a01c --- /dev/null +++ b/packages/kexecboot/kexecboot-0.4/switch-cursor-off.patch @@ -0,0 +1,11 @@ +--- a/kexecboot.c ++++ b/kexecboot.c +@@ -512,6 +512,9 @@ int main(int argc, char **argv) + DPRINTF("FB angle is %d, input device is %s\n", angle, eventif); + DPRINTF("Going to fb mode\n"); + ++ /* Switch cursor off. NOTE: works only when master-console is tty */ ++ printf("\033[?25l\n"); ++ + if ((fb = fb_new(angle)) == NULL) + exit(-1); diff --git a/packages/kexecboot/kexecboot_0.4.bb b/packages/kexecboot/kexecboot_0.4.bb new file mode 100644 index 0000000000..557c5be4b3 --- /dev/null +++ b/packages/kexecboot/kexecboot_0.4.bb @@ -0,0 +1,41 @@ +LICENSE = "GPL" +PR = "r0" +DEPENDS = "klibc" +RDEPENDS = "kexec-static" + +inherit autotools + +# You can create your own *-img.h by doing +# ./make-image-header.sh <file>.png HAND + +SRC_URI = "http://projects.linuxtogo.org/~jay7/kexecboot-${PV}.tar.gz \ + file://add-reboot-option.patch;patch=1 \ + file://scan_devices-top.patch;patch=1 \ + file://graphical-no-devices.patch;patch=1 \ + file://switch-cursor-off.patch;patch=1 \ + file://add-sleep.patch;patch=1 \ + file://silent-output-hack.patch;patch=1 \ + " + +S = "${WORKDIR}/kexecboot-${PV}" + +export CC=${TARGET_PREFIX}klcc + +# standard oe cflags don't work with klcc +export CFLAGS = "" +export CPPFLAGS = "" +export LDFLAGS = "" + +do_install () { + install -d ${D}${bindir} + install -m 0755 kexecboot ${D}${bindir}/ + + install -d ${D}/proc + install -d ${D}/mnt +} + +FILES_${PN} += " ${bindir}/kexecboot /init /proc /mnt" + +pkg_postinst_${PN} () { + ln -sf ${bindir}/kexecboot $D/init +} |