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:
> 
>> 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));
>               }
> 

You are correct. I patched this code and got rid of the strangeness.

When I patch it like this:

                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';
                        / * Make sure we have a sane value for booted_partition 
*/
                        if (booted_partition & 0xfffffff0)
                                continue;
                        DPRINTF(("%s: booted_partition: %d\n", __func__, 
booted_partition));
                }

Then I can pass bootdev=dk12 in boot.cfg to the DOM0 kernel and it now correctly
finds dk12 as the root device instead of strangely finding dk1 as the root 
device:

snip...
[    13.924443] boot device: dk12
[    14.114443] root on dk12 dumps on dk11
...

And it boots normally. Strangeness solved!

When I patched the kernel, I also commented out the com* at puc? port ? in
the config file for the kernel to solve the other problem I was having with
the com port causing a crash unless I run disable com* at the uc> prompt.

So, with a kernel patched like this, which I installed on the root partition
as netbsd-XEN3_DOM0.dkfix I can now go back to using the vga console and boot
NetBSD/xen PV dom0 normally from the boot menu without needed to interact
with the boot process at the serial console.

The boot.cfg command that now works very well is:

menu=Boot normally with Xen:dev hd2d:;load /netbsd-XEN3_DOM0.dkfix console=pc 
bootdev=dk12;multiboot /xen.gz dom0_mem=2G dom0_max_vcpus=4 console=vga 
cet=no-ibt pv-l1tf=false

Thanks, everyone, for all your input...

Chuck Zmudzinski

Reply via email to