kernel config files outside of sys/${ARCH}/conf ?

Aleksandr Rybalko ray at freebsd.org
Thu Jan 12 11:50:27 UTC 2012


On Thu, 12 Jan 2012 12:17:57 +0100
Luigi Rizzo <rizzo at iet.unipi.it> wrote:

>> On Thu, Jan 12, 2012 at 12:22:50PM +0200, Aleksandr Rybalko wrote:
>> > On Thu, 12 Jan 2012 11:17:39 +0100
>> > Luigi Rizzo <rizzo at iet.unipi.it> wrote:
>> > 
>> > >> On Thu, Jan 12, 2012 at 01:55:39AM -0800, Garrett Cooper wrote:
>> > >> > On Thu, Jan 12, 2012 at 2:06 AM, Luigi Rizzo
>> > >> > <rizzo at iet.unipi.it> wrote:
>> > >> > > On Thu, Jan 12, 2012 at 10:16:53AM +0100, Gary Jennejohn
>> > >> > > wrote:
>> > >> > >> On Thu, 12 Jan 2012 09:11:39 +0100
>> > >> > >> Luigi Rizzo <rizzo at iet.unipi.it> wrote:
>> > >> > >>
>> > >> > >> > usr/sbin/config assumes that the kernel config file
>> > >> > >> > lives in ${src_base}/sys/${arch}/conf , which means that
>> > >> > >> > if you need to build a custom kernel one needs RW
>> > >> > >> > access to that directory.
>> > >> > >> >
>> > >> > >> > Any idea on how we can enable config to work in a
>> > >> > >> > generic directory ?
>> > >> > >> >
>> > >> > >> > I scanned the source code usr.sbin/config and found that
>> > >> > >> > it uses hardwired paths -- specifically, it looks for
>> > >> > >> > the kernel source tree in "../.." and has multiple
>> > >> > >> > hardwired paths such as "../../conf/".
>> > >> > >> > There is also a somewhat undocumented access to a
>> > >> > >> > file called DEFAULTS that extends the configuration you
>> > >> > >> > pass.
>> > >> > >> >
>> > >> > >> > Any objections to the addition of a "-s" option to config
>> > >> > >> > (8) to specify the location of the source tree ?
>> > >> > >> >
>> > >> > >>
>> > >> > >> Seems like a good idea to me as long as the old behavior is
>> > >> > >> kept.
>> > >> > >
>> > >> > > of course :)
>> > >> > 
>> > >> >     Why not just set KERNCONFDIR?
>> > >> 
>> > >> The variable does not seem to be used by usr/sbin/config
>> > >> 
>> > >> cheers
>> > >> luigi
>> > >> _______________________________________________
>> > >> freebsd-current at freebsd.org mailing list
>> > >> http://lists.freebsd.org/mailman/listinfo/freebsd-current
>> > >> To unsubscribe, send any mail to
>> > >> "freebsd-current-unsubscribe at freebsd.org"
>> > 
>> > Hi,
>> > 
>> > ZRouter.org use just full path to config file 
>> > make KERNCONF=/path/to/config buildkernel
>> 
>> It does not work:
>> 
>>     > ls -l /home/luigi/FreeBSD/pico9/qemu/PICOBSD.amd64
>>     -rw-r--r--  1 luigi  wheel  4285 Jan 12
>> 11:32 /home/luigi/FreeBSD/pico9/qemu/PICOBSD.amd64
>>     > make KERNCONF=/home/luigi/FreeBSD/pico9/qemu/PICOBSD.amd64
>>     > buildkernel
>>     ERROR: Missing kernel configuration file(s)
>> (/home/luigi/FreeBSD/pico9/qemu/PICOBSD.amd64).
>> 
>> As i said, the hardwired paths in config suggest that there is
>> a requirement that the config lives under the source tree and
>> cannot be in a completely arbitrary position. My tests confirm that.
>> So, KERNCONF=/path/to/config only works for certain values of
>> /path/to/config .
>> 
>> Of course i may be wrong but if you have direct experience
>> in building a kernel whose config file name is /tmp/NOT_GENERIC
>> please let me know how you do it.
>> 
>> cheers
>> luigi
>> _______________________________________________
>> freebsd-current at freebsd.org mailing list
>> http://lists.freebsd.org/mailman/listinfo/freebsd-current
>> To unsubscribe, send any mail to
>> "freebsd-current-unsubscribe at freebsd.org"

Oh, yes, sorry, I forgot about Makefile.inc1 changes.

Her it is:

Index: Makefile.inc1
===================================================================
--- Makefile.inc1	(revision 229577)
+++ Makefile.inc1	(working copy)
@@ -29,6 +29,7 @@
 # /usr/share/mk.  These include:
 #		obj depend all install clean cleandepend cleanobj
 
+SRC_ROOT=${.CURDIR}
 # You are supposed to define both of these when calling Makefile.inc1
 # directly.  However, some old scripts don't.  Cope for the moment, but
 # issue a new warning for a transition period.
@@ -215,6 +216,7 @@
 CROSSENV=	MAKEOBJDIRPREFIX=${OBJTREE} \
 		MACHINE_ARCH=${TARGET_ARCH} \
 		MACHINE=${TARGET} \
+		SRC_ROOT=${.CURDIR} \
 		CPUTYPE=${TARGET_CPUTYPE}
 .if ${OSRELDATE} < 700044
 CROSSENV+=	AR=gnu-ar RANLIB=gnu-ranlib
@@ -381,6 +383,7 @@
 	mtree -deU -f ${.CURDIR}/etc/mtree/BIND.include.dist \
 	    -p ${WORLDTMP}/usr/include >/dev/null
 .endif
+	mkdir -p ${WORLDTMP}/legacy/usr/include/lzma >/dev/null
 _legacy:
 	@echo
 	@echo
"--------------------------------------------------------------" @@
-768,12 +771,19 @@ BUILDKERNELS=
 INSTALLKERNEL=
 .for _kernel in ${KERNCONF}
+__absolute=${_kernel:C/^\/.*$/abs/}
 .if exists(${KERNCONFDIR}/${_kernel})
 BUILDKERNELS+=	${_kernel}
 .if empty(INSTALLKERNEL)
 INSTALLKERNEL= ${_kernel}
 .endif
+.elif exists(${_kernel}) && ${__absolute} == "abs"
+# Kernel config with absolute path
+BUILDKERNELS+=	${_kernel}
+.if empty(INSTALLKERNEL)
+INSTALLKERNEL= ${_kernel}
 .endif
+.endif
 .endfor
 
 #
@@ -798,17 +808,24 @@
 	@echo ">>> Kernel build for ${_kernel} started on `LC_ALL=C
date`" @echo
"--------------------------------------------------------------" @echo
"===> ${_kernel}"
-	mkdir -p ${KRNLOBJDIR}
+	mkdir -p ${KRNLOBJDIR}/${_kernel}
 .if !defined(NO_KERNELCONFIG)
 	@echo
 	@echo
"--------------------------------------------------------------" @echo
">>> stage 1: configuring the kernel" @echo
"--------------------------------------------------------------" +.if !
empty(_kernel:S/^\/.*$//) cd ${KRNLCONFDIR}; \
 		PATH=${TMPPATH} \
 		    config ${CONFIGARGS} -d ${KRNLOBJDIR}/${_kernel} \
 			${KERNCONFDIR}/${_kernel}
+.else
+	cd ${KRNLCONFDIR}; \
+		PATH=${TMPPATH} \
+		    config ${CONFIGARGS} -d ${KRNLOBJDIR}/${_kernel} \
+			${_kernel}
 .endif
+.endif
 .if !defined(NO_CLEAN) && !defined(NO_KERNELCLEAN)
 	@echo
 	@echo
"--------------------------------------------------------------"

P.S. somewhere I else have patch to zrouter which allow do same w/o
Makefile.inc1 modification posted by Luiz Otavio O Souza, but I can't
find it right now :)

WBW
-- 
Aleksandr Rybalko <ray at freebsd.org>


More information about the freebsd-current mailing list