Re: Kernel modules not loading on 15-prerelease

Mark Millard <[email protected]>
Newsgroups gmane.os.freebsd.devel.arm
Message-ID <[email protected]>
On Sep 3, 2025, at 07:56, bob prohaska <[email protected]> wrote:

> On Tue, Sep 02, 2025 at 12:30:29PM -0700, Mark Millard wrote:
>> 
>> You might be able to see some of what is going on via
>> a command like:
>> 
>> # kldxref -d /boot/kernel/ /boot/modules/ | grep -e kernel -e modules/ | less
> 
> Running that command to a file and searching for uftdi and filemon finds
> 
> 
> /boot/kernel/filemon.ko
>  depends on kernel.1500061 (1500061,1500061)
> 
> and 
> /boot/kernel/uftdi.ko
>  depends on kernel.1500061 (1500061,1500061)

Are you saying that most /boot/kernel/*.ko listed:

kernel.1500063 (1500063,1500063)

and that just those 2 did not? Vs.: that all
/boot/kernel/*.ko listed:

kernel.1500061 (1500061,1500061)

? Some other mix of some one way and others
the other way?

Going in a different direction, I'll remind:

     The environment of make(1) for the build can be controlled via the
     SRC_ENV_CONF variable, which defaults to /etc/src-env.conf.  Some
     examples that may only be set in this file are WITH_DIRDEPS_BUILD, and
     WITH_META_MODE, and MAKEOBJDIRPREFIX as they are environment-only
     variables.

I'll note that I use a env prefix before a make
command (in a script):

env __MAKE_CONF="/usr/home/root/src.configs/make.conf" \
SRCCONF="/dev/null" SRC_ENV_CONF="/usr/home/root/src.configs/src.conf.aarch64-nodbg-clang.aarch64-host" \
MAKEOBJDIRPREFIX="/usr/obj/BUILDs/main-aarch64-usr_src-nodbg-clang" \
WITH_META_MODE=yes \
time -l make $*

You reference elsewhere using: -DWITH_META_MODE
That looks wrong to me. For make:

     -D variable
             Define variable to be 1, in the global scope.

is defining a make variable, not an environment variable.
I'm not saying that you should use -e but, as evidence,
note the wording:

     -e      Let environment variables override global variables within
             makefiles.

So: global variables are not environment variables.

As far as I can tell, you have not been using META_MODE
based on what you report doing.

Absent META_MODE use, the system's recent change to using
WITHOUT_CLEAN by default for buildworld and buildkernel
can lead to more lack of updates of files that should be
updated.

> At the same time, I see
> # uname -K
> 1500063
> # uname -U
> 1500061

-U output is a separate issue from the kernel
and module version requirement mismatches as
far as I can tell.

uname gets the -U putput text via:

static void                                      
native_uservers(void)
{                                                
        static char buf[128];
        
        snprintf(buf, sizeof(buf), "%d", __FreeBSD_version);
        uservers = buf;
}

Recently WITHOUT_CLEAN became the default. So
its status for your build depends on the timing
of the commit that you used.

A WITHOUT_CLEAN (non-META_MODE) build might not
have rebuilt uname. What does the following report:

# file /usr/obj/usr/src/arm.armv7/usr.bin/uname/uname

My paths are different, but here is an example (I've not
built for armv7 in a long time):

# file /usr/obj/BUILDs/main-CA7-nodbg-clang/usr/main-src/arm.armv7/usr.bin/uname/uname
/usr/obj/BUILDs/main-CA7-nodbg-clang/usr/main-src/arm.armv7/usr.bin/uname/uname: ELF 32-bit LSB executable, ARM, EABI5 version 1 (FreeBSD), dynamically linked, interpreter /libexec/ld-elf.so.1, FreeBSD-style, for FreeBSD 15.0 (1500048), not stripped

Note that "(1500048)". Which number does your build
of uname show for what is in your build tree (not
what is installed)?

> How can the kernel and modules get out of sync?

WITHOUT_CLEAN (recently by default) use without META_MODE
to cause updates based on better dependency information.

> Even then, /usr/src was updated  followed by an immediate
> buildworld/buildkernel.

You do not mention installations explicitly, just
builds. Was the world installed too?

> In that case, how did world and kernel
> become mismatched and remain so for a week or more?

See above about correctly providing META_MODE and
about the recent change to have WITHOUT_CLEAN by
default (less rebuilds by default).

> The suggestion to delete /usr/obj is looking unavoidable, are
> additional steps warranted?

Given that you seem to have been doing doing
builds where META_MODE was not helping to
track dependencies, I'd recommend a from-scratch
META_MODE based build to get the tracking
information fully in place for use in later
builds.

If you are to do META_MODE builds, builds that
disable META_MODE mess up its dependency tracking
information by not updating it. Thus, only if
you stop using META_MODE overall should to avoid
using META_MODE for a specific build.

===
Mark Millard
marklmi at yahoo.com
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.