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.