ZFS boot inside on the second partition inside a slice
Henri Hennebert
hlh at restart.be
Tue Jun 21 16:16:05 UTC 2011
On 06/21/2011 17:55, John Baldwin wrote:
> On Tuesday, June 21, 2011 10:50:14 am Henri Hennebert wrote:
>> On 06/21/2011 15:01, John Baldwin wrote:
>>> Index: zfsldr.S
>>> ===================================================================
>>> --- zfsldr.S (revision 223339)
>>> +++ zfsldr.S (working copy)
>>> @@ -234,9 +234,12 @@ nread.1: xor %ecx,%ecx # Get
>>> callw read # Read from disk
>>> lea 0x10(%bp),%sp # Clear stack
>>> jnc return # If success, return
>>> - mov $msg_read,%si # Otherwise, set the error
>>> - # message and fall through to
>>> - # the error routine
>>> + mov %ah,%al # Format
>>> + mov $read_err,%di # error
>>> + call hex8 # code
>>> + mov $msg_read,%si # Set the error message and
>>> + # fall through to the error
>>> + # routine
>>> /*
>>> * Print out the error message pointed to by %ds:(%si) followed
>>> * by a prompt, wait for a keypress, and then reboot the machine.
>>> @@ -296,12 +299,28 @@ read.1: mov $msg_chs,%si
>>> jmp error
>>> msg_chs: .asciz "CHS not supported"
>>>
>>> +/*
>>> + * Convert AL to hex, saving the result to [EDI].
>>> + */
>>> +hex8: push %ax # Save
>>> + shrb $0x4,%al # Do upper
>>> + call hex8.1 # 4
>>> + pop %ax # Restore
>>> +hex8.1: andb $0xf,%al # Get lower 4
>>> + cmpb $0xa,%al # Convert
>>> + sbbb $0x69,%al # to hex
>>> + das # digit
>>> + orb $0x20,%al # To lower case
>>> + stosb # Save char
>>> + ret # (Recursive)
>>> +
>>> /* Messages */
>>>
>>> -msg_read: .asciz "Read"
>>> -msg_part: .asciz "Boot"
>>> +msg_read: .ascii "Read error: "
>>> +read_err: .asciz "XX"
>>> +msg_part: .asciz "Boot error"
>>>
>>> -prompt: .asciz " error\r\n"
>>> +prompt: .asciz "\r\n"
>>>
>>> .org PRT_OFF,0x90
>>>
>> I get
>>
>> Read error: 01
>
> Hmm, that would be 'invalid parameter'.
>
> Can you add a 'foo: jmp foo' infinite loop and move it around to figure out
> which read call is failing?
>
main.5: mov %dx,MEM_ARG # Save args
movb $NSECT,%dh # Sector count
movl $1024,%eax # Offset to boot2
callw nread.1 # Read disk
foo: jmp foo
After this one I get
'Read error: 01'
Henri
More information about the freebsd-stable
mailing list