Building part of world

Brad Waite freebsd at wcubed.net
Fri Oct 29 22:36:05 PDT 2004


> On 2004-10-29 13:37, Dan Nelson <dnelson at allantgroup.com> wrote:
>> In the last episode (Oct 29), Brad Waite said:
>> > I'm trying to update my sys/pci/if_sk.c and would like to be able to
>> > build several versions without having to build the entire world.
>>
>> Since that's a kernel driver, you only have to build a new kernel.
>
> An even better approach in the case of a single kernel driver is to leave
> it
> commented out in the kernel config file.  Then it will be built as a
> module by
> default.  After at least one buildworld/buildkernel cycle has finished
> correctly with this configuration, you can use the already populated
> /usr/obj
> tree to build just this module:
>
> 	# cd /usr/src/sys/i386/conf
> 	# config -g -d /usr/obj/usr/src/sys/MYKERNEL MYKERNEL
> 	# cd /usr/obj/usr/src/sys/MYKERNEL
> 	# make depend && make && make install
>
> If you have only touched a single .c file, the 'make depend' step is AFAIK
> optional.  The rest should finish pretty fast.
>
> Brave people might even get away by building the sk module only, by
> emulating the specific part of the kernel build:
>
> 	# cd /usr/src/sys/modules/sk
> 	# env MAKEOBJDIRPREFIX=/tmp/sk \
> 	  KMODDIR=/boot/kernel DEBUG_FLAGS="-g" MACHINE=i386 \
> 	  KERNBUILDDIR="/usr/obj/usr/src/sys/MYKERNEL" make obj
> 	# env MAKEOBJDIRPREFIX=/tmp/sk \
> 	  KMODDIR=/boot/kernel DEBUG_FLAGS="-g" MACHINE=i386 \
> 	  KERNBUILDDIR="/usr/obj/usr/src/sys/MYKERNEL" make all
>
> If all this works, you can just kldload the new if_sk.ko from
> `/tmp/sk/usr/src/sys/modules/sk' to test your changes.
>
> HTH,
> Giorgos

Wow, Giorgos, this really *does* help.  It never dawned on me that FBSD
even supported loadable kernel modules.  Feel kinda sheepish now, but hey,
I guess you learn something new every day.

In my stumbling around since you've enlightened me, I noticed a sk/ dir in
/usr/src/sys/modules, and in there a Makefile.  'make install' apparently
builds the .ko and installs it into /modules.

Am I missing something here, or is this the way to go?

Brad


More information about the freebsd-questions mailing list