Re: How to test stand/usb

From: Zhenlei Huang <zlei_at_FreeBSD.org>
Date: Tue, 02 Jul 2024 04:38:04 UTC

> On Jul 2, 2024, at 1:01 AM, Hiroki Sato <hrs@freebsd.org> wrote:
> 
> Hi,
> 
> Zhenlei Huang <zlei@FreeBSD.org> wrote
>  in <6B9A293F-18CF-4FB2-B095-BC468354BCA8@FreeBSD.org>:
> 
> zl> I'm recently working on cleaning up malloc(M_WAITOK), and found that the sys/dev/usb
> zl> stack is also used by bootloader. Currently stand/usb fails to compile ( since the
> zl> commit 9e4e7bcaef3f 2022/8/23 ) and I have some WIP patches. I do not find a good
> zl> page about its usage. How can I test stand/usb ? Or it has no usage any more and should
> zl> be retired ?
> 
> The stand/usb directory is used to build the libusbboot.a library
> containing the devsw for umass(4).  The following patch (against a bit
> old tree) should fix the build errors at least:
> 
> https://people.allbsd.org/~hrs/FreeBSD/kshim-fix.20240702-1.diff
> 
> To compile a loader with libusbboot.a, you need to build a
> libusbboot.a with some flags first and link it with a loader.  On the
> loader side, you need to edit conf.c and Makefile.  The above patch
> includes changes for i386/loader, and the following command lines
> should build both (MK_LOADER_ZFS=no because libusbboot.a is too
> large):
> 
> # cd /usr/src/stand/usb/tools && make && make install
> % cd /usr/src/stand/usb && \
>    make obj && \
>    make -DHAVE_UMASS_LOADER -DHAVE_EHCI depend && \
>    make -DHAVE_UMASS_LOADER -DHAVE_EHCI
> % cd /usr/src/stand/i386/loader && \
>    make obj && \
>    make MK_LOADER_ZFS=no depend && \
>    make MK_LOADER_ZFS=no
> # cd /usr/src/stand/i386/loader && \
>    make MK_LOADER_ZFS=no DESTDIR=/tmp install
> 
> and you should be able to find a legacy BIOS loader in
> /tmp/boot/loader.  I did not test whether the build result works
> actually, though.  Note that the first command builds "sysinit" tool
> and installs it into /usr/bin.  You can remove it after testing.
> 
> Also note that the kernel source files used by ones under usb/ will
> use a different malloc implementation defined in
> kshim/bsd_kernel.[ch].  So, malloc(9) flags are simply ignored.  If
> your work intends to check if rewriting of malloc(M_WAITOK) works or
> not, I think you can consider it does not affect the loaders using the
> libusbboot library.

Thanks for the detailed instructions. I'll try that.
> 
> Although the files under kshim/ and usb/ are not maintained well, I
> personally think they are still worth keeping.
> 
> -- Hiroki