Building a sandboxed kernel

M. Warner Losh imp at
Sun Jul 23 16:56:21 UTC 2006

In message: <3320CEAC-8A5C-407D-9867-C2A22820A599 at>
            "R. Tyler Ballance" <tyler at> writes:
: Hash: SHA1
: >>
: >> Between varying versions of userland tools (like config(8)) and path
: >> troubles, I'm wondering what tips anybody has to doing non-standard
: >> builds of the kernel (non-standard being not in /usr/src and not the
: >> host arch)
: >>
: >> Currently the make command I'm using, which doesn't work, is (/usr/
: >> obj is chmod'd 777):
: >>
: >> make TARGET_ARCH=iguana DESTDIR=/home/tyler/iguana buildkernel
: >>
: >> Any suggestions?
: >
: > You don't have to use /usr/obj for all your builds:
: >
: >     % mkdir -p /home/tyler/obj/iguana
: >     % env MAKEOBJDIRPREFIX=/home/tyler/obj/iguana \
: >       make TARGET_ARCH=iguana \
: >            DESTDIR=/home/tyler/iguana \
: >       buildkernel
: >
: > The trick here is to use MAKEOBJDIRPREFIX to change the default object
: > directory prefix from `/usr/obj' to whatever suits your own setup.
: This doesn't solve the problem of different versions of userland  
: tools required. For example, my machne is RELENG_6, but I'm  
: developing against the -CURRENT branch of code synced up in perforce.  
: Does one necessarily need a -CURRENT userland to develop with the - 
: CURRENT code base? All arguments of being able to test the code that  
: is built are moot since the testing of my code will all occur within  
: a virtualized (Qemu) machine environment.
: I'm sure the difference in versions between RELENG_6 and CURRENT  
: aren't too great, but what about developing with CURRENT code on  
: RELENG_5? I guess the basic question is, how can I maintain my normal  
: workstation environment while using a toolset appropriate for  
: building CURRENT? (Does it even matter really?)

Doesn't matter.

I often do the following:

setenv TARGET arm			# this may be iguana for you
setenv TARGET_ARCH arm
setenv MAKEOBJDIRPREFIX /home/imp/obj
cd p4/imp_arm
make buildworld
make buildenv				# from here on out is in a subshell
cd ../arm/src/sys/arm/conf
config KB920X
cd ../compile/KB920X
make depend && make

You'll notice that I built in a tree that had all the arm patches
applied, and got a 'buildenv' there, but then build the kernel out of
a different tree.  This is a -current p4 tree for both imp_arm and
arm, but I do this on a RELENG_6 system.  I've done it in the recent
past on a 5.3 system too.

kernel architecture, while MACHINE_ARCH is the CPU architecture
(TARGET_CPU is the specific CPU that we're optimizing for).  Chances
are excellent we'll have TARGET_ARCH armel and armeb shortly.  Right
now we have a hack ARM_BIG_ENDIAN used to control big vs little
endian, but since MACHINE_ARCH gets encoded into packages, I think we
need to move it there so binary packages do the right thing.  But
that's a WIP in my tree right now...


More information about the freebsd-hackers mailing list