[comp.unix.xenix.sco] How Big of a Kernel Can SCO Xenix Boot?

adnan@sgtech.uucp (Adnan Yaqub) (04/04/91)

I need some information on how SCO Xenix's bootstrap program (boot)
works.  Specifically, what are the size restrictions on the kernels it
can boot.  Here is the problem.

Someone I am trying to help has two kernels, one of which will boot,
and the other which won't.  He says that when he tries to boot the one
that fails, the bootstrap program seems to start loading the kernel
in, and then returns to the boot: prompt.  The size of the kernel
which does boot is:
	288588 + 79648 + 207960 = 576196 = 0x8cac4
while the unbootable one is:
	288588 + 79648 + 208680 = 576916 = 0x8cd94

I tried to duplicate the problem buy linking into a vanilla kernel an
object file which defines some large arrays.  I found that I could
boot a kernel with the following size:
	242192 + 39536 + 543732 = 825460 = 0xc9874
while when I tried to boot a kernel with this size:
	242192 + 39536 + 547828 = 829556 = 0xca874
I got the error message:
	invalid xs_rbase!
and the bootstrap returned to the boot: prompt.

Can someone please tell me what is going on?  What can boot boot?

Thanks.
--
Adnan Yaqub (adnan@sgtech.uucp)
Star Gate Technologies
29300 Aurora Rd, Solon, OH, 44139, USA, +1 216 349 1860

paulz@sco.COM (W. Paul Zola) (04/12/91)

In article <73@sgtech.UUCP> adnan@sgtech.uucp (Adnan Yaqub) writes:
}I need some information on how SCO Xenix's bootstrap program (boot)
}works.  Specifically, what are the size restrictions on the kernels it
}can boot.  Here is the problem.
}

[details of error messages, including "invalid xs_rbase!" deleted]


The following articles from the SCO Information Tools database should help 
with your problem.   I'm posting because I think this may be of general
interest.

################## cut here ################ cut here ##################

After installing a new kernel I get a boot prompt that loops. 

KEYWORDS: reboot cycle kernel 640K device driver custom link_xenix big large nfiles xnx155 xnx126 

RELEASE:  SCO XENIX 386 Operating System Release 2.3 Generic

PROBLEM:  You have linked a new driver or product into the kernel using the 
	  "custom" or "/etc/install" utility, or have adjusted the tunable 
	  kernel parameters using "configure".  After installing the new kernel
	  as /xenix when you try and reboot, you will see the prompt:

	      Boot :

	  After hitting return the machine will hesitate and then return

	      Boot :

	  This cycle will loop indefinitely until you type:

	      Boot : xenix.old

	  This will boot your old /xenix, which is not larger than 640K.

CAUSE:    The kernel has grown larger than 640K and /boot is trying to load the
	  kernel into extended memory. Due to a timing problem on certain 
	  machines, pin A20 on the cpu is being dragged low, and the address 
	  the /boot program is passing to the cpu is incorrect.

SOLUTION: By adding additional delays into the /boot binary, pin A20 goes high,
	  and the correct address is passed to the cpu.

	  The new /boot binary is available as a Support Level Supplement
	  (SLS) called xnx126. This SLS is available from the Customer
	  Services Department of The Santa Cruz Operation, Inc.

	  This binary is also available as part of SLS xnx155.

*****NOTE:  This problem was resolved in SCO XENIX 2.3.2.  However, it is 
	    possible for a system to have been upgraded to XENIX 2.3.2 and
	    not contain the revised /boot binary. Therefore, if this
	    problem occurs in SCO Xenix 2.3.2, we suggest you install xnx155.

################## cut here ################ cut here ##################

Note that the kernel must reside within the first 1024 cylinders of
the hard disk in order for it to boot properly.  As a practical matter,
this means that the root filesystem must lie within the 1024 cylinder
limit.  "invalid xs_rbase!" is one of the messages that can be
generated when the kernel lies beyond the 1024 cylinder limit. 
Below is an item from the IT database on how to determine whether
the root fileystem lies within this limit.  

################## cut here ################ cut here ##################

How to calculate hard drive size in megabytes and number of sectors.

KEYWORDS: hd hard drive mb megabytes sectors 1024 size

RELEASE:  SCO XENIX System V Operating System Generic 
          SCO UNIX System V/386 Operating System Generic

PROBLEM:   How do I calculate the size of a hard drive in megabytes if given
           the number of cylinders and heads and sectors per track?  

           How do I calculate the total number of sectors available and 
           the maximum number of sectors allowable in the root filesystem?
	   
SOLUTION:  In order to answer these questions you will need to know the
           following information about your hard drive:

           a. The number of cylinders.
           b. The number of heads.
           c. The number of sectors per track.

           If you do not know this information, check the documentation that 
	   came with the hard drive, consult the vendor who sold you the hard 
	   drive, or consult the hard drive manufacturer.

           1. The total megabyte capacity of the hard drive is calculated
              as follows:

              Megabytes = (cylinders * heads * sectors-per-track) / 2000

              Note: 15% to 20% of the total capacity of the drive will
              be used by low-level formatting and will not be available 
	      for storage.

           2. The number of sectors on a hard disk is calculated as follows:
 
              sectors = cylinders * heads

           3. The entire root filesystem must reside within the first 1024 
	      cylinders of the hard drive.  This 1024 cylinder limit includes 
	      any other filesystems you might have, including DOS.

              If the number of cylinders on your hard drive is less than 1024, 
              or if the hard disk controller will translate the number of
              cylinders to less than 1024, then there is no restriction to the 
	      size of the root filesystem.

              The maximum size available for the root filesystem is
              calculated by determining how many sectors must be outside
              the root filesystem and then subtracting that value from the 
	      total number of sectors reported available in the SCO UNIX 
	      System V/386 or XENIX partition.

                 1. Calculate the total sectors available on the hard disk
                    as follows:

                    sectors = cylinders * heads

                 2. Calculate the number of sectors in the first 1024
                    cylinders as follows:

                    base-sectors = 1024 * heads 

                 3. Calculate the number of sectors over the 1024 cylinder
                    boundary as follows:

                    over-sectors = sectors  -  base-sectors

                 4. In order to insure that the root filesystem is within
                    the 1024 cylinder boundary, you must assign at least
                    the number of sectors equal to the value you calculated
		    as 'over-sectors' to divisions outside of root.  The
                    divisions outside of root may include swap space, as well
		    as other filesystems.

################## cut here ################ cut here ##################

I hope this helps you with your problem.

-
Paul Zola			Software Support Engineer 
				paulz@sco.COM 
Gotta tend the earth if you want a rose.  - Emily Saliers
    DISCLAIMER: I speak for myself, and not for SCO.