Re: Kernel modules not loading on 15-prerelease

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

> On Wed, Sep 03, 2025 at 06:18:03PM -0700, Mark Millard wrote:
>> On Sep 3, 2025, at 17:39, bob prohaska <[email protected]> wrote:
>> 
>>> Most list  depends on kernel.1500061 (1500061,1500061), perhaps
>>> 10% list 63 and one lists some of each (!)
>>> /boot/kernel/usb.ko
>>> depends on kernel.1500061 (1500061,1500061)
>>> depends on kernel.1500061 (1500061,1500061)
>>> depends on kernel.1500061 (1500061,1500061)
>>> depends on kernel.1500061 (1500061,1500061)
>>> depends on kernel.1500061 (1500061,1500061)
>>> depends on kernel.1500061 (1500061,1500061)
>>> depends on kernel.1500061 (1500061,1500061)
>>> depends on kernel.1500061 (1500061,1500061)
>>> depends on kernel.1500063 (1500063,1500063)
>>> depends on kernel.1500063 (1500063,1500063)
>>> The above looks wrong to me.....
>> 
>> Lack of META_MODE (with filemon working) and
>> WITHOUT_CLEAN tends to mean more things are
>> not rebuilt. Likely you are seeing the
>> distinction between rebuilt things and
>> not-rebuilt things.
>> 
>> /boot/kernel/usb.ko is certainly interesting.
>> Apparently, different parts of it have their
>> own dependencies on the kernel and only some
>> parts were rebuilt before being linked
>> together. (I do not know the details.)
>> 
>>>> 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.
> 
> For the most recent (past week) experiments that's correct.

I'm saying more than that: Any time you used just
-DWITH_META_MODE you were not correctly specifying
that META_MODE would be used: that specification
has to be via an environment variable called
WITH_META_MODE, not via a global make variable
called WITH_META_MODE .

>>>> 
>>>> 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)?
>>>> 
>>> # file /usr/obj/usr/src/arm.armv7/usr.bin/uname/uname
>>> /usr/obj/usr/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 (1500063), not stripped
>>> #
>> 
>> Hmm. I'm surprised at the 1500063 when uname -U reported
>> 1500061. I wonder if it has since been rebuilt.
>> 
>>>>> 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?
>>> Yes, sorry for the ambiguity.
>>> 
>>>> 
>>>>> 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.
>>>> 
>>> 
>>> When filemon stopped loading I ran a few build/install 
>>> cycles without meta mode. I thought that would be harmless, 
>>> but maybe not. Right now meta mode is running with the 
>>> NO_FILEMON option.
>> 
>> Good point, META_MODE does not do as much when
>> filemon is not operational.  Once filemon is
>> operational, you will likely need to synchronize
>> META_MODE again so that it gets all the information.
>> 
> Ahh, that is a significant detail. I expected "no filemon"
> to perhaps be slower, but to be functionally equivalent.

filemon provides information that is otherwise not
available. But META_MODE still does more than not
using META_MODE, even without filemon.

>>> I'll let it run till it either finishes or crashes, then
>>> decide whether to remove /usr/obj after rebooting.
>>> 
>>> One possible culprit is of course me: From time to time
>>> the machine seemingly stalls, with no response to keyboard
>>> nor debugger escape. I've routinely power-cycles the machine
>>> to recover, confident that internal checks would catch any
>>> inconsistencies that might be introduced by ungraceful
>>> shutdown. Might my confidence be misplaced?
>> 
>> I do not know that you have many alternatives.
> 
> Might there be some program that can independently
> audit installed binaries against those in /usr/obj?

One could install a buildworld into a separate 
(non-nested?) directory tree and do a "diff -rq"
and look for expected vs. unexpected files with
differences. (The new tree would not have tailored
configuration files, /usr/local/ , and such, for
example.)

But failures during a build leave an incomplete,
possibly corrupted build. Comparing the pre-build
live system to the partial-build is not expected
to match well. So not a likely-useful path for
such a failure timing.

Do you ever have such a failures during
installworld ? buildworld ?

>> One thing using pkgbase style installs does is leave checksum
>> data around for everything pkg installs. "pkg check -sa",
>> if it is executable, will try to checksum everything handled
>> via pkg and report on mismatches, both base packages and port
>> packages. There is no equivalent for any other installation
>> style that I know of.
> 
> It looks like pkgbase is a subject of much discussion and at
> least some contention. Is there a tutorial somewhere of how
> to use it in a simple self-hosted system? From the page at
> https://wiki.freebsd.org/action/show/pkgbase?action=show&redirect=PkgBase
> it seems a good deal more involved than "make installworld" 8-)
> 

Having an rpi2 build the packages as an extra step might have
its own issues with resources or time. I've not experimented
with building packages (yet?) --so I've not experimented with
installing my own builds of such. I've experimented with
installing and using official pkgbase builds. Personal kernel
and world builds I still build like I did before pkgbase.
installkernel to distinct kernel naming and installworld just
to a directory tree for use with chroot or the like, still
booting the pkgbase'd world.


===
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.