kernel configuration and debug


source code download

git clone --depth 1 -b stable/15 https://git.freebsd.org/src.git src
git clone --depth 1 -b stable/14 https://git.freebsd.org/src.git src
git clone --depth 1 -b main https://git.freebsd.org/src.git src

FreeBSD next boot

root@fbsd:/usr/src # nextboot -k kernel.safe
root@fbsd:/usr/src # ll /boot/nextboot.conf
-rw-------  1 root wheel   43B Apr 15 10:48 /boot/nextboot.conf
root@fbsd:/usr/src # cat /boot/nextboot.conf
nextboot_enable="YES"
kernel="kernel.safe"
root@fbsd:/usr/src #

FreeBSD install kgdb

cc@fbsd:~ % cd /usr/ports/devel/gdb
cc@fbsd:/usr/ports/devel/gdb % sudo make install clean BATCH="YES"

## or install through package
cc@fbsd:~ % sudo pkg install devel/gdb

debug a core file

cc@fbsd:/var/crash % sudo kgdb /usr/lib/debug/boot/kernel/kernel.debug /var/crash/vmcore.last
## map the local source path
(kgdb) set substitute-path /home/pkgbuild/worktrees/main /usr/src

## or
cc@fbsd:/var/crash % sudo kgdb /usr/obj/usr/src/amd64.amd64/sys/GENERIC/kernel.debug  /var/crash/vmcore.last

## for example:
root@n1fbsd16:/var/crash # kgdb -n last
GNU gdb (GDB) 15.1 [GDB v15.1 for FreeBSD]
Copyright (C) 2024 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-portbld-freebsd16.0".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /usr/obj/usr/src/amd64.amd64/sys/GENERIC/kernel.full...

Unread portion of the kernel message buffer:
panic: testing invariants
cpuid = 0
time = 1771516985
KDB: stack backtrace:
db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe004b22f830
vpanic() at vpanic+0x136/frame 0xfffffe004b22f960
panic() at panic+0x43/frame 0xfffffe004b22f9c0
siftr_manage_ops() at siftr_manage_ops+0xae/frame 0xfffffe004b22fba0
siftr_sysctl_enabled_handler() at siftr_sysctl_enabled_handler+0x7e/frame 0xfffffe004b22fbe0
sysctl_root_handler_locked() at sysctl_root_handler_locked+0x9c/frame 0xfffffe004b22fc30
sysctl_root() at sysctl_root+0x22f/frame 0xfffffe004b22fcb0
userland_sysctl() at userland_sysctl+0x196/frame 0xfffffe004b22fd50
sys___sysctl() at sys___sysctl+0x65/frame 0xfffffe004b22fe00
amd64_syscall() at amd64_syscall+0x169/frame 0xfffffe004b22ff30
fast_syscall_common() at fast_syscall_common+0xf8/frame 0xfffffe004b22ff30
--- syscall (202, FreeBSD ELF64, __sysctl), rip = 0x3c0c75ee98da, rsp = 0x3c0c73843968, rbp = 0x3c0c738439b0 ---
KDB: enter: panic

Reading symbols from /boot/kernel/mac_ntpd.ko...
Reading symbols from /usr/lib/debug//boot/kernel/mac_ntpd.ko.debug...
Reading symbols from /root/privateSRC/siftr2/siftr2.ko...
Reading symbols from /root/privateSRC/siftr2/siftr2.ko.debug...
__curthread () at /usr/src/sys/amd64/include/pcpu_aux.h:57
57              __asm("movq %%gs:%c1,%0" : "=r" (td)
(kgdb) bt
#0  __curthread () at /usr/src/sys/amd64/include/pcpu_aux.h:57
#1  doadump (textdump=textdump@entry=0) at /usr/src/sys/kern/kern_shutdown.c:399
#2  0xffffffff804b3b7a in db_dump (dummy=<optimized out>, dummy2=<optimized out>, dummy3=<optimized out>, 
    dummy4=<optimized out>) at /usr/src/sys/ddb/db_command.c:596
#3  0xffffffff804b396d in db_command (last_cmdp=<optimized out>, cmd_table=<optimized out>, dopager=true)
    at /usr/src/sys/ddb/db_command.c:508
#4  0xffffffff804b362d in db_command_loop () at /usr/src/sys/ddb/db_command.c:555
#5  0xffffffff804b7026 in db_trap (type=<optimized out>, code=<optimized out>) at /usr/src/sys/ddb/db_main.c:267
#6  0xffffffff80c1c92f in kdb_trap (type=type@entry=3, code=code@entry=0, tf=tf@entry=0xfffffe004b22f770)
    at /usr/src/sys/kern/subr_kdb.c:790
#7  0xffffffff8112856e in trap (frame=<optimized out>) at /usr/src/sys/amd64/amd64/trap.c:614
#8  <signal handler called>
#9  kdb_enter (why=<optimized out>, msg=<optimized out>) at /usr/src/sys/kern/subr_kdb.c:556
#10 0xffffffff80bc98cb in vpanic (fmt=0xffffffff82e17374 "testing invariants", ap=ap@entry=0xfffffe004b22f9a0)
    at /usr/src/sys/kern/kern_shutdown.c:962
#11 0xffffffff80bc9733 in panic (fmt=0xffffffff81da2280 <cnputs_mtx> "\004i!\201\377\377\377\377")
    at /usr/src/sys/kern/kern_shutdown.c:887
#12 0xffffffff82e1416e in siftr_manage_ops (action=1 '\001') at siftr2.c:1076
#13 0xffffffff82e1407e in siftr_sysctl_enabled_handler (oidp=0xffffffff82e18130 <sysctl___net_inet_siftr2_enabled>, 
    arg1=0xffffffff82e18a58 <siftr_enabled>, arg2=0, req=0xfffffe004b22fcc0) at siftr2.c:1243
#14 0xffffffff80bdad3c in sysctl_root_handler_locked (oid=oid@entry=0xffffffff82e18130 <sysctl___net_inet_siftr2_enabled>, 
    arg1=arg1@entry=0xffffffff82e18a58 <siftr_enabled>, arg2=arg2@entry=0, req=req@entry=0xfffffe004b22fcc0, 
    tracker=tracker@entry=0xfffffe004b22fc40) at /usr/src/sys/kern/kern_sysctl.c:199
#15 0xffffffff80bda09f in sysctl_root (oidp=<optimized out>, arg1=0xffffffff82e18a58 <siftr_enabled>, 
    arg1@entry=0xfffffe004b22fd80, arg2=0, arg2@entry=4, req=req@entry=0xfffffe004b22fcc0)
    at /usr/src/sys/kern/kern_sysctl.c:2427
#16 0xffffffff80bda786 in userland_sysctl (td=td@entry=0xfffff800094f4780, name=name@entry=0xfffffe004b22fd80, 
    namelen=<optimized out>, old=<optimized out>, oldlenp=<optimized out>, inkernel=inkernel@entry=0, new=0x4c9d2b809000, 
    newlen=4, retval=0xfffffe004b22fde8, flags=0) at /usr/src/sys/kern/kern_sysctl.c:2586
#17 0xffffffff80bda5b5 in sys___sysctl (td=0xfffff800094f4780, uap=0xfffff800094f4ba8)
    at /usr/src/sys/kern/kern_sysctl.c:2457
#18 0xffffffff81129a09 in syscallenter (td=0xfffff800094f4780) at /usr/src/sys/amd64/amd64/../../kern/subr_syscall.c:193
#19 amd64_syscall (td=0xfffff800094f4780, traced=0) at /usr/src/sys/amd64/amd64/trap.c:1208
#20 <signal handler called>
#21 0x00003c0c75ee98da in ?? ()
Backtrace stopped: Cannot access memory at address 0x3c0c73843968
(kgdb) f 12
#12 0xffffffff82e1416e in siftr_manage_ops (action=1 '\001') at siftr2.c:1076
1076                    KASSERT(0, ("testing invariants"));
(kgdb) 

FreeBSD Kernel config file options

makeoptions     DEBUG="-g -O0"

FreeBSD build a new kernel

root@fbsd:/usr/src # make -j`sysctl -n hw.ncpu` kernel KERNCONF=GENERIC > /tmp/kernel.log

## bypass the packaged kernel restriction
root@s1:/usr/src # make installkernel KERNCONF=GENERIC ALLOW_PKGBASE_INSTALLKERNEL=yes

Ubuntu Linux build a new kernel

apt install build-essential libncurses-dev bison flex libssl-dev libelf-dev packaging-dev fakeroot bc git python3 dwarves

scripts/checkpatch.pl --strict -f path/to/your_file.c

cp /boot/config-$(uname -r) .config
make olddefconfig
make localmodconfig              // use with caution that the kernel may not cover all hardware
make menuconfig
make clean
make -j `nproc` bindeb-pkg LOCALVERSION=-custom > /tmp/kernel.log
cd ..
dpkg -i *.deb

chengcui/kernel_config (last edited 2026-04-08T02:48:13+0000 by chengcui)