From: <er...@he...> - 2004-05-12 15:57:38
|
On Sat, May 08, 2004 at 02:46:35PM -0500, Jim Phillips wrote: > Hi, > > I'm trying to use Clustermatic 4 to boot a Sun V60x dual Xeon 3.06 GHz. I > tested this with a demo 2.8 GHz machine and it worked fine. Now with the > new machine I boot off of the floppy and everything looks good right up to > "monte: restarting system in 2 seconds..." but then it just hangs. > > Did anything change with the newer processors? There is probably a > different BIOS in the new machine as well, so is there something to > disable that might be interfering? Might this be addressed in a newer > version of beoboot? Could I try to PXE boot directly into phase 2? I haven't tried one of those machines myself at this point. It could certainly be a cranky BIOS of some kind. One possibility is if you're using a different possibly larger kernel libmonte might just be failing to load it correctly. Newer kernels (especially 2.6) are overflowing a counter in the kernel headers which is supposed to tell you how big the kernel is. Monte's output should indicate whether it's doing something sensible or not. Look for the line that says something like: monte: region: 372 pages at 0x100000 ^^^ this number (* 4096) should roughly match the size of your bzImage. If it doesn't then the loader is screwing up. The patch below should fix libmonte so that it ignores the counter. Obviously PXE boot straight to phase 2 might be an easier short term solution. - Erik Index: libmonte.c =================================================================== RCS file: /home/repository/beoboot/monte/libmonte.c,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- libmonte.c 20 Sep 2002 21:39:53 -0000 1.13 +++ libmonte.c 5 Dec 2003 18:15:53 -0000 1.14 @@ -19,7 +19,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * $Id: libmonte.c,v 1.13 2002/09/20 21:39:53 hendriks Exp $ + * $Id: libmonte.c,v 1.14 2003/12/05 18:15:53 hendriks Exp $ *--------------------------------------------------------------------*/ #define _GNU_SOURCE /* needed for mremap() */ #include <stdio.h> @@ -238,7 +238,6 @@ int monte_load_linux_kernel(struct monte_boot_t *boot, const void *buffer, long size){ - int len; void *setup_data, *kernel_data; struct monte_region_t *region; struct kernel_setup_t *stmp; @@ -275,21 +274,14 @@ buffer += (stmp->setup_sects+1)*512; /* update buffer pointers */ size -= (stmp->setup_sects+1)*512; - /* Load the kernel code itself */ - len = boot->setup->kernel_para*16; - if (len > size) { - if (len - size >= 16) { - fprintf(stderr, "monte: not enough kernel data." - " want=%d; got=%ld\n", len, size); - return -1; - } - len = size; - } + /* The number of kernel "paragraphs" is getting overflowed by + * todays kernels. Ignore it and just load the rest of the data + * we have. */ region = region_new(boot, (void*)boot->setup->start); - kernel_data = region_size(region, len); - memcpy(kernel_data, buffer, len); + kernel_data = region_size(region, size); + memcpy(kernel_data, buffer, size); printf("monte: kernel code : %8d bytes at %p\n", - len, (void *) boot->setup->start); + size, (void *) boot->setup->start); if (boot->param.flags & MONTE_PROTECTED) { if (save_old_setup(boot)) return -1; |