On 5/29/2025 4:02 PM, Greg A. Woods wrote:
> At Thu, 29 May 2025 15:01:50 -0400, Chuck Zmudzinski <frchu...@gmail.com> 
> wrote:
> Subject: Xen boot strangeness (Was: Re: [SOLVED] Re: Xen 4.18.5_20250521nb0 
> not ELF binary (Was: Re: EFI and Xen))
>>
>> On 5/27/2025 7:37 PM, Greg A. Woods wrote:
>> > However it doesn't look like you're using an old-fashioned "standard"
>> > COM port.  According to the "Xen Serial Console" notes you should
>> > probably be telling Xen to use "com1", not "com2":
>> >
>> >    Xen com1= option for non-standard serial ports (IPMI SOL, Intel AMT, 
>> > PCI serial)
>> >
>> >    Note that even if your SOL device is, for example, COM3, you
>> >    still need to specify "com1=<foo> console=com1" options for Xen.
>> >    If you specify "com3=" the serial console won't work!  Remember
>> >    to list the correct (actual) serial port IOport and IRQ in the
>> >    Xen "com1=" parameters!
>> >
>> >    https://wiki.xenproject.org/wiki/Xen_Serial_Console
>>
>> I saw that but...
>>
>> As I explained earlier, I think Xen sees an AMT com device as com1 (NetBSD
>> sees it as com0), but I cannot access it because my BIOS does not have the
>> AMT feature. Therefore I have no choice but to use com2 or com3 which are
>> connected to the PCI serial card.
> 
> Try reading that wiki excerpt again!  (substituting /com3/com2/)
> 
>       "If you specify 'com2=' the serial console won't work!"
> 
> You still need to tell Xen that it is using "com1" -- just give it the
> parameters for the device you actually want it to use:
> 
>       com1=9600,8n1,0x40c0,16,1:0.0 console=com1
> 
> I don't know what Xen will do by default, but if you tell it exactly
> what to do then that's all that matters.

Ok, let's see what happens. I use this boot command line:

menu=Boot normally with Xen:dev hd2d:;load /netbsd-XEN3_DOM0.gz -c 
console=xencons bootdev=wd1;multiboot /xen.gz dom0_mem=2G dom0_max_vcpus=4 
com1=9600,8n1,0x40c0,16,1:0.0 console=com1 cet=no-ibt pv-l1tf=false

Only difference from the one that works is that I do a s/com2/com1/g

Still, DOM0 sees the serial port that Xen is using as com2, not com0, so
with this configuration it still crashes unless I disable com* using userconf.

So it behaves exactly the same as when I told Xen the console is com2 instead 
of com1.

> 
> 
>> When I pass bootdev=dk12 in boot.cfg, the bootloader strangely tries dk1 as 
>> root
>> (which is wrong) and correctly detects dk11 as the dump device. But it never
>> gives me the chance to enter the correct root device and instead tries to 
>> load
>> init which of course it cannot find the NetBSD init on dk1 because dk1 is not
>> the correct NetBSD root device. In fact on this box a Linux distro is 
>> installed
>> on dk1, as evidenced by the filesystem type detected on dk1: ext2fs.
> 
> Ah, I think that's a bug related to some bizarre/old hacks to find the
> "booted_partion" for non-GPT disks:
> 
>               if (strncmp(xcp.xcp_bootdev, devname, strlen(devname)))
>                       continue;
> 
>               if (is_disk && strlen(xcp.xcp_bootdev) > strlen(devname)) {
>                       /* XXX check device_cfdata as in x86_autoconf.c? */
>                       booted_partition = toupper(
>                               xcp.xcp_bootdev[strlen(devname)]) - 'A';
>                       DPRINTF(("%s: booted_partition: %d\n", __func__, 
> booted_partition));
>               }
> 
> It looks like if the first "devname" that's tested is "dk1", then you
> get a mess when you're looking for "dk12".
> 
> The code for all this root-finding stuff is spaghetti at best!  Tons of
> old assumptions held together by magic.
> 
> Do you get similar results if you try to boot GENERIC from that same
> device?  The code in arch/x86/x86/x86_autoconf.c looks like it tries a
> bit harder, but maybe it fails too?

I boot GENERIC without Xen with this:

menu=Boot normally:dev hd2d:;rndseed /var/db/entropy-file;boot

Very simple and no searching for dk* devices needed, apparently. It
can find root at boot because I set 'dev hd2d:' which is the fourth
GPT partition on what Xen also sees as dk12.

Note I also set dev hd2d: when booting Xen, but this information does not
get passed to NetBSD dom0, so with Xen, we need to go through the search
of all the dk* devices.

> 
> The very fact there are multiple implementations of all this mess is
> maddening.
> 
> 
>> > What devices does it suggest if you type a "?" at the "root device"
>> > prompt?
>>
>> [   5.1706012] root device (default wd1a): ?
>>
>> [  44.8006002] use one of: dk0 dk1 dk2 dk3 dk4 dk5 dk6 dk7 dk8 dk9 dk10 dk11 
>> dk12 rge0 athn0 wd0[a-p] wd1[a-p] ld0[a-p] cd0[a-p] wedge:<UUID or Label> 
>> ... ddb halt reboot
> 
> Yeah, "dk1" is there, and appears before "dk11".

Perhaps a patch will be forthcoming to improve this?

> 
>> Quoting from the Xen Howto Wiki:
>>
>> "bootdev" (or the earlier form "root") is also in general required, because
>> the boot device from /boot is not passed via Xen to the dom0 kernel.
>>
>> End of Quote from Wiki.
> 
> Ah, yes, that's where that was.  Should be in a manual page!!!
> 
> --
>                                       Greg A. Woods <gwo...@acm.org>
> 
> Kelowna, BC     +1 250 762-7675           RoboHack <wo...@robohack.ca>
> Planix, Inc. <wo...@planix.com>     Avoncote Farms <wo...@avoncote.ca>

Reply via email to