Modifying Solaris 2.4 to 2.5.1 for PC type CD-ROM drives

Last modified: Sat Nov 9 00:45:48 EST 1996

Notice: This document as originally posted was incomplete to due to some HTML formatting problems. It should now be complete and accurate


For installing Solaris 2.4 or Solaris 2.5 from a SCSI-II cdrom drive using 2048 bytes per logical block you can use the following procedure:

Notice:At least one user has had trouble using this procedure on an Ultra 1/140. If anyone else has tried it on Ultra machines and it worked please let us know. It may be that the sun4u architecture needs a different patch.

  1. At the monitor prompt, boot kadb from the Solaris 2.4 [2.5] CD
     (Btw. you need at least Boot Prom revision 2.4, older Boot
     Proms can't boot from a 2048 bytes/sector CDROM drive)

	ok boot cdrom kadb -dv

     The monitor loads kadb an says something like

	Rebooting with command: cdrom kadb -dv
	Boot device: /sbus/esp..../sd@6,0:c  File and Args: kadb -dv
	kadb:

  2. At the kadb: prompt press <RETURN>, this will load
     kernel/unix from the cd.

	kadb: kernel/unix
	Size: xxx+yyy+zzz bytes
	/kernel/unix loaded - wwwwww bytes used
	kadb[0]:

  2a. [Only for Solaris 2.5]

     If booting Solaris 2.5 from the cd, we have to single step one
     instruction, so that kadb load the kernel symbols:

	kadb[0]: :s
        stopped at 0xfbd01918      ta        %o0

  3. At the kadb[0]: prompt, set a breakpoint at main+10 and start the
     kernel:

	kadb[0]: main+10:b
	kadb[0]: :c

     The kernel starts and loads all required device drivers (esp. the
     harddisk driver, which we'll want to patch). Then it will stop at
     our breakpoint.  The following messages appear on the screen:

	SunOS Release 5.4 Version ....
	Copyright (c) 1983-1994 ....
	...
	breakpoint	main+0x10:  call callb_init
	kadb[0]:

  4. Now the harddisk driver (which also supports cdrom drives) is loaded
     and we can set two additional breakpoints inside the harddisk driver
     and continue with booting. At the kadb prompt, type:
    
	kadb[0]: sd_validate_geometry+14:b
	kadb[0]: sr_sector_mode+24:b
	kadb[0]: :c

  5. The kernel now calls the sd driver's probe and attach routines for
     each harddisc or cdrom device connected to the machine; for each
     device the kernel prints a line like the one below and stops at
     the breakpoint in sd_validate_geometry.

	...
	sdX is /sbus/esp..../sd@X,0
	breakpoint	sd_validate_geometry+0x14:   ld  [%i0 + 0x18c], %i5
	kadb[0]:

     The X in the line "sdX is /..." is the scsi id of the device currently
     being probed.

     If the X matches the scsi id for the cdrom drive, continue with step 6.

     Otherwise type the kadb continue command ":c" and repeat step 5.

	kadb[0]: :c

  6. The kernel now tries to read the disclabel from the installation cd.
     To avoid the data overrun error, we temporarily raise the logical
     blocksize for the cdrom drive to 2048 bytes/block  (note the capital
     letter 'W' in the next command):

	kadb[0]: <i0+18c/W 800

     Kadb says something like:

	0xffxxxxxx: 0x200    = 0x800

     Now we delete the current breakpoint in sd_validate_geometry and
     continue with the boot process:
     	
	kadb[0]: <pc:d
	kadb[0]: :c

  7. Again, the kernel stops, this time at our third breakpoint in
     sr_sector_mode:

		<CD-ROM Disc for SunOS Solaris_2.? Installation >
	Unable to install/attach driver 'isp'
	breakpoint	sr_sector_mode+0x24:   be sr_sector_mode+0x3c
	kadb[0]:

     [
      Solaris 2.5 has a different instruction at sr_sector_mode+0x24:
	breakpoint	sr_sector_mode+0x24:   nop
     ]

     Now we'll change the logical sector size the driver uses for the
     cdrom device.  At the kadb prompt type:
	
	kadb[0]: <i5+18c/W 200

     This changes the blocksize from 2048 to 512 bytes / block. Kadb
     says something like:

	0xffxxxxx:  0x800    = 0x200
	kadb[0]:

     At the kadb prompt, type :c to finish the boot / installation
     process.

	kadb[0]: :c

     Next the root file system will be mounted, /etc/init is started, ...
     OpenWindows is started, ... Solaris 2.4 / 2.5 can be installed
     without the need for further intervention from within kadb.


Mike Frisch and Martin Hargreaves