sorry if this is not the most appropriate forum to discuss this,
redirects appreciated.
I have spent some time trying to put etherboot[1] code onto the
hard disk so that it can be selected using the FreeBSD boot
manager. I ended up doing it with a small amt of modifications
to the "boot1" code, for which a patch is attached.
Maybe it could be interesting in applying this patch to the standard
boot1 code (apart for the PRT_BSD change, which should be unmodified).
While at it, i noticed that fdisk seems to be more "smart"
than i'd like, and likes to move the begin and end of
partition to align it to a track boundary. This is kind of
annoying, 1) because if you change the geometry in a way that
has no effect for the loading of the kernel, it can still
screw up your partition, and 2) because i would like to
squeeze the boot1+etherboot in the spare 62 sectors
between the MBR (boot0) and the beginning of the first
partition on the disk.
Is there any bad side effect in having a slice which starts
at sector 1 and is 62 sectors long ?
cheers
luigi
[1] Etherboot code is basically a boot ROM image of
reasonably small size (16 or 32K depending on card type),
and as part of its standard distribution can be loaded
from a floppy using a special-purpose boot sector which
is prepended to the image itself. Unfortunately the loader
that comes with etherboot assumes the use of a floppy and
does not work from a hard drive.
[2] The patch for boot1.s is below.
--- boot1.s Fri Jul 7 14:12:32 2000
+++ boot1a.s Fri Feb 16 18:39:20 2001
@@ -28,7 +28,7 @@
# Partition Constants
.set PRT_OFF,0x1be # Partition offset
.set PRT_NUM,0x4 # Partitions
- .set PRT_BSD,0xa5 # Partition type
+ .set PRT_BSD,0x1 # Partition type
# Flag Bits
.set FL_PACKET,0x80 # Packet mode
@@ -147,9 +147,18 @@
# when we use btxld create boot2, we use an entry point of 0x1000. That
# entry point is relative to MEM_USR; thus boot2.bin starts at 0xb000.
#
main.5: mov %dx,MEM_ARG # Save args
movb $0x10,%dh # Sector count
callw nread # Read disk
+ cmpw $0xaa55, MEM_BUF+0x200 # rom signature ?
+ jnz load_btx
+ movb MEM_BUF+0x202,%dh # Sector count
+ incb %dh
+ mov $0x7e00, %bx
+ callw nreadbx # Read disk
+ ljmp $0x800,$6 # enter the rom code
+
+load_btx:
mov $MEM_BTX,%bx # BTX
mov 0xa(%bx),%si # Get BTX length and set
add %bx,%si # %si to start of boot2.bin
@@ -184,6 +193,7 @@
# Trampoline used to call read from within boot1.
#
nread: mov $MEM_BUF,%bx # Transfer buffer
+nreadbx: # same but address is in bx
mov 0x8(%si),%ax # Get
mov 0xa(%si),%cx # LBA
push %cs # Read from
----------------------------------+-----------------------------------------
Luigi RIZZO, [EMAIL PROTECTED] . ACIRI/ICSI (on leave from Univ. di Pisa)
http://www.iet.unipi.it/~luigi/ . 1947 Center St, Berkeley CA 94704
Phone: (510) 666 2927
----------------------------------+-----------------------------------------
To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message