Anyone seen 4.8-RELEASE running on a real 386 (not 486 586 etc) ?

John Baldwin jhb at FreeBSD.org
Thu Apr 10 13:35:02 PDT 2003


On 10-Apr-2003 Erik Trulsson wrote:
> On Thu, Apr 10, 2003 at 08:43:04PM +0200, Julian Stacey wrote:
>> freebsd-hackers@,
>> Anyone seen 4.8-RELEASE running on a real 386 processor (not a 486, 586 etc) ?
>> 
>> I have a 386 that runs 4.7, dmesg below, both GENERIC & my own kernel;
>> But it wont boot 4.8 { either generic or my own config } compiled on my
>> other 4.8 box.  I tried making with & without /etc/make.conf
>>      CFLAGS =        -m386 -march=i386 -msoft-float -mcpu=i386 -O -pipe
>>      COPTFLAGS=      -m386 -march=i386 -msoft-float -mcpu=i386 -O -pipe
>> I tried the /kernel copied from a 4.8 cdrom to hard disk (no cdrom
>> drive on the box).  I tried 4.8 boot floppies (to prove its not
>> something wrong in hard disc /boot) Every 4.8 kernel crashes during boot -s.
>> 
>> This 386 box is no bigger than a book, so worth persevering :-)
>> "SX 33" is written on chip, though dmesg reports "DX".
>> 
>> I recall 386 support was dropped in 5.0, but presume not dropped in 4.8,
>> ( I don't see any signs in /usr/share/mk comparing 4.7 & 4.8 )
>> The 4.8 cdrom /[A-Z]* files say i386 is still supported.
>> 
>> I removed the only card in the box (a 3com ISA ethernet jumperless) - 
>> it still wouldnt boot, so put ethernet card back in, as not the problem.
>> 
>> I compiled a kernel with ddb,  Results copied by hand as no serial for
>> remote gdb.t present
>> 
>> Ideas or solutions anyone ?
>> 
>> 4.8 ddb:
>>    Fatal trap 1: priveleged instruction fault while in kernel mode
>>    instruction pointer = 0x8:0xc02695a0
>>    stack pointewr      = 0x10:0xc0379fcc
>>    frame pointer       = 0x10:0xc0379fcc
>>    code segment          = base 0x0, limit 0xfffff, type 0x1b
>>                  = DPL 0, pres 1, def 32 1, gran 1
>>    processor eflags    = interrupt enabled, resume, IOPL = 0
>>    current process     = Idle
>>    interrupt mask      = net tty bio cam
>>    kernel: type 1 trap, code=0
>>    stopped at 0xc02695a0:     invlpg  0(%ecx)
> 
> Try the following patch.
> Makes my 386sx/33 work fine at least.
> (Without it I get the same panic as you do.)

Oh my, I hope that isn't it.  If so it's my fault. :(

Hmm, can you try this patch instead?

http://www.FreeBSD.org/~jhb/patches/4x_386.patch

Index: identcpu.c
===================================================================
RCS file: /usr/cvs/src/sys/i386/i386/identcpu.c,v
retrieving revision 1.80.2.14
diff -u -r1.80.2.14 identcpu.c
--- identcpu.c  22 Jan 2003 20:14:52 -0000      1.80.2.14
+++ identcpu.c  10 Apr 2003 20:30:56 -0000
@@ -64,6 +64,7 @@
 /* XXX - should be in header file: */
 void printcpuinfo(void);
 void finishidentcpu(void);
+void earlysetcpuclass(void);
 #if defined(I586_CPU) && defined(CPU_WT_ALLOC)
 void   enable_K5_wt_alloc(void);
 void   enable_K6_wt_alloc(void);
@@ -942,6 +943,21 @@
                        return;
                }
        }
+}
+
+/*
+ * This routine is called specifically to set up cpu_class before
+ * startrtclock() uses it.  Probably this should be rearranged so that
+ * startrtclock() doesn't need to run until after identifycpu() has been
+ * called.  Another alternative formulation would be for this routine
+ * to do all the identification work, and make identifycpu() into a
+ * printing-only routine.
+ */
+void
+earlysetcpuclass(void)
+{
+
+       cpu_class = i386_cpus[cpu].cpu_class;
 }
 
 static void
Index: machdep.c
===================================================================
RCS file: /usr/cvs/src/sys/i386/i386/machdep.c,v
retrieving revision 1.385.2.29
diff -u -r1.385.2.29 machdep.c
--- machdep.c   4 Apr 2003 22:21:29 -0000       1.385.2.29
+++ machdep.c   10 Apr 2003 20:30:53 -0000
@@ -122,6 +122,7 @@
 extern void dblfault_handler __P((void));
 
 extern void printcpuinfo(void);        /* XXX header file */
+extern void earlysetcpuclass(void);    /* same header file */
 extern void finishidentcpu(void);
 extern void panicifcpuunsupported(void);
 extern void initializecpu(void);
@@ -265,6 +266,7 @@
         * Good {morning,afternoon,evening,night}.
         */
        printf("%s", version);
+       earlysetcpuclass();
        startrtclock();
        printcpuinfo();
        panicifcpuunsupported();

-- 

John Baldwin <jhb at FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve!"  -  http://www.FreeBSD.org/


More information about the freebsd-hackers mailing list