--- a/openembedded/classes/kernel.bbclass	2010-03-09 09:45:05.000000000 -0800
+++ b/openembedded/classes/kernel.bbclass	2010-03-09 13:28:21.000000000 -0800
@@ -55,12 +55,18 @@
 KERNEL_LD = "${LD}${KERNEL_LDSUFFIX} ${HOST_LD_KERNEL_ARCH}"
 
 # Where built kernel lies in the kernel tree
-KERNEL_OUTPUT ?= "arch/${ARCH}/boot/${KERNEL_IMAGETYPE}"
+B = "${WORKDIR}/build-${MACHINE}"
+KERNEL_OUTPUT ?= "${B}/arch/${ARCH}/boot/${KERNEL_IMAGETYPE}"
 KERNEL_IMAGEDEST = "boot"
 
+#If we are using an output dir for kernel objs, then add the switch
+EXTRA_KERNELMAKE += "-C ${S} O=${B}"
+SCENEFUNCS += "kernel_setscene_func"
 #
 # configuration
 #
+KERNEL_CONFIGFILE = "${B}/.config"
+
 export CMDLINE_CONSOLE = "console=${@bb.data.getVar("KERNEL_CONSOLE",d,1) or "ttyS0"}"
 
 KERNEL_VERSION = "${@get_kernelversion('${S}')}"
@@ -78,16 +84,27 @@
 # For the kernel, we don't want the '-e MAKEFLAGS=' in EXTRA_OEMAKE.
 # We don't want to override kernel Makefile variables from the environment
 EXTRA_OEMAKE = ""
+# I use EXTRA_KERNELMAKE to make sure its not confused with EXTRA_OEMAKE
+EXTRA_KERNELMAKE ?= ""
+
+# should only be called when using 
+kernel_setscene_func() {
+	if [ "${S}" != "${B}" ]; then
+		install -d ${B}
+		rm -f ${S}/.config
+	fi
+}
 
 kernel_do_compile() {
+	cd ${B}
 	unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE
-	oe_runmake include/linux/version.h CC="${KERNEL_CC}" LD="${KERNEL_LD}"
+	oe_runmake ${EXTRA_KERNELMAKE} include/linux/version.h CC="${KERNEL_CC}" LD="${KERNEL_LD}"
 	if [ "${KERNEL_MAJOR_VERSION}" != "2.6" ]; then
 		oe_runmake dep CC="${KERNEL_CC}" LD="${KERNEL_LD}"
 	fi
-	oe_runmake ${KERNEL_IMAGETYPE} CC="${KERNEL_CC}" LD="${KERNEL_LD}"
-	if (grep -q -i -e '^CONFIG_MODULES=y$' .config); then
-		oe_runmake modules  CC="${KERNEL_CC}" LD="${KERNEL_LD}"
+	oe_runmake ${EXTRA_KERNELMAKE} ${KERNEL_IMAGETYPE} CC="${KERNEL_CC}" LD="${KERNEL_LD}"
+	if (grep -q -i -e '^CONFIG_MODULES=y$' ${KERNEL_CONFIGFILE}); then
+		oe_runmake ${EXTRA_KERNELMAKE} modules  CC="${KERNEL_CC}" LD="${KERNEL_LD}"
 	else
 		oenote "no modules to compile"
 	fi
@@ -95,9 +112,9 @@
 kernel_do_compile[depends] = "${INITRAMFS_TASK}"
 
 kernel_do_stage() {
-	if [ -e include/asm ] ; then
+	if [ -e ${B}/include/asm ] ; then
 		# This link is generated only in kernel before 2.6.33-rc1, don't stage it for newer kernels
-		ASMDIR=`readlink include/asm`
+		ASMDIR=`readlink ${B}/include/asm`
 
 		mkdir -p ${STAGING_KERNEL_DIR}/include/$ASMDIR
 		cp -fR include/$ASMDIR/* ${STAGING_KERNEL_DIR}/include/$ASMDIR/
@@ -112,14 +129,14 @@
 
 	# Check for arch/x86 on i386
 	elif [ -d arch/x86/include/asm/ ]; then
-		if [ -e include/asm ] ; then
+		if [ -e ${B}/include/asm ] ; then
 			cp -fR arch/x86/include/asm/* ${STAGING_KERNEL_DIR}/include/asm-x86/
 		fi
 		install -d ${STAGING_KERNEL_DIR}/arch/x86/include
 		cp -fR arch/x86/* ${STAGING_KERNEL_DIR}/arch/x86/
 	fi
 
-	if [ -e include/asm ] ; then
+	if [ -e ${B}/include/asm ] ; then
 		rm -f ${STAGING_KERNEL_DIR}/include/asm
 		ln -sf $ASMDIR ${STAGING_KERNEL_DIR}/include/asm
 	fi
@@ -140,9 +157,9 @@
 		cp -fR drivers/sound/*.h ${STAGING_KERNEL_DIR}/include/drivers/sound/
 	fi
 
-	install -m 0644 .config ${STAGING_KERNEL_DIR}/config-${KERNEL_VERSION}
-	ln -sf config-${KERNEL_VERSION} ${STAGING_KERNEL_DIR}/.config
-	ln -sf config-${KERNEL_VERSION} ${STAGING_KERNEL_DIR}/kernel-config
+	install -m 0644 ${B}/.config ${STAGING_KERNEL_DIR}/config-${KERNEL_VERSION}
+	ln -sf ${B}/config-${KERNEL_VERSION} ${STAGING_KERNEL_DIR}/.config
+	ln -sf ${B}/config-${KERNEL_VERSION} ${STAGING_KERNEL_DIR}/kernel-config
 	echo "${KERNEL_VERSION}" >${STAGING_KERNEL_DIR}/kernel-abiversion
 	echo "${S}" >${STAGING_KERNEL_DIR}/kernel-source
 	echo "${KERNEL_CCSUFFIX}" >${STAGING_KERNEL_DIR}/kernel-ccsuffix
@@ -159,17 +176,32 @@
 		install -d ${STAGING_KERNEL_DIR}/arch/x86
 		install -m 0644 arch/x86/Makefile* ${STAGING_KERNEL_DIR}/arch/x86
 	fi
-	cp -fR include/config* ${STAGING_KERNEL_DIR}/include/	
+	cp -fR ${B}/include/config* ${STAGING_KERNEL_DIR}/include/	
 	# Install kernel images and system.map to staging
-	[ -e vmlinux ] && install -m 0644 vmlinux ${STAGING_KERNEL_DIR}/	
+	[ -e ${B}/vmlinux ] && install -m 0644 ${B}/vmlinux ${STAGING_KERNEL_DIR}/	
 	install -m 0644 ${KERNEL_OUTPUT} ${STAGING_KERNEL_DIR}/${KERNEL_IMAGETYPE}
-	install -m 0644 System.map ${STAGING_KERNEL_DIR}/System.map-${KERNEL_VERSION}
-	[ -e Module.symvers ] && install -m 0644 Module.symvers ${STAGING_KERNEL_DIR}/
+	install -m 0644 ${B}/System.map ${STAGING_KERNEL_DIR}/System.map-${KERNEL_VERSION}
+	[ -e Module.symvers ] && install -m 0644 ${B}/Module.symvers ${STAGING_KERNEL_DIR}/
+
+	cp -fR ${S}/scripts ${STAGING_KERNEL_DIR}/
+	cp -fR ${B}/scripts ${STAGING_KERNEL_DIR}/
+
+	if [ ! -e ${STAGING_KERNEL_DIR}/include/linux ]; then \
+		install -m 0755 -d ${STAGING_KERNEL_DIR}/include/linux; \
+	fi
+	install -m 0644 ${B}/include/linux/* \
+		${STAGING_KERNEL_DIR}/include/linux
+	if [ ! -e ${STAGING_KERNEL_DIR}/include/config ]; then \
+		install -m 0755 -d ${STAGING_KERNEL_DIR}/include/config; \
+	fi
+	install -m 0644 ${B}/include/config/auto.conf \
+		${STAGING_KERNEL_DIR}/include/config
 
-	cp -fR scripts ${STAGING_KERNEL_DIR}/
+	install -m 0644 ${B}/include/linux/version.h ${STAGING_KERNEL_DIR}/include/linux
 }
 
 kernel_do_install() {
+	cd ${B}
 	unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE
 	if (grep -q -i -e '^CONFIG_MODULES=y$' .config); then
 		oe_runmake DEPMOD=echo INSTALL_MOD_PATH="${D}" modules_install
@@ -199,7 +231,8 @@
 }
 
 kernel_do_configure() {
-	yes '' | oe_runmake oldconfig
+	cd ${B}
+	yes '' | oe_runmake ${EXTRA_KERNELMAKE} oldconfig
 	if [ ! -z "${INITRAMFS_IMAGE}" ]; then
 		for img in cpio.gz cpio.lzo cpio.lzma; do
 		if [ -e "${DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE}-${MACHINE}.$img" ]; then
@@ -210,13 +243,16 @@
 }
 
 do_menuconfig() {
+	cd ${B}
+	export DISPLAY="${DISPLAY}"
 	export TERMWINDOWTITLE="${PN} Kernel Configuration"
-	export SHELLCMDS="make menuconfig"
+	export SHELLCMDS="make ${EXTRA_KERNELMAKE} menuconfig"
 	${TERMCMDRUN}
 	if [ $? -ne 0 ]; then
 		echo "Fatal: '${TERMCMD}' not found. Check TERMCMD variable."
 		exit 1
 	fi
+	yes '' | oe_runmake ${EXTRA_KERNELMAKE} oldconfig
 }
 do_menuconfig[nostamp] = "1"
 addtask menuconfig after do_configure
@@ -529,7 +565,7 @@
 do_deploy() {
 	install -d ${DEPLOY_DIR_IMAGE}
 	install -m 0644 ${KERNEL_OUTPUT} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_BASE_NAME}.bin
-	package_stagefile_shell ${S}/${KERNEL_OUTPUT}
+	package_stagefile_shell ${KERNEL_OUTPUT}
 	package_stagefile_shell ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_BASE_NAME}.bin
 
 	if [ -d "${PKGD}/lib" ]; then
--- a/openembedded/recipes/linux/stb-linux_2.6.24.bb	1969-12-31 16:00:00.000000000 -0800
+++ b/openembedded/recipes/linux/stb-linux_2.6.24.bb	2010-03-09 13:17:12.000000000 -0800
@@ -0,0 +1,56 @@
+inherit kernel
+DEFCONFIGFILENAME = "${MACHINE_CONFIG}_defconfig"
+
+PR = "${STB_KERNEL_VERS}"
+
+# be sure we use the right tools
+TARGET_PREFIX = "${KERNEL_TARGET_PREFIX}"
+KERNEL_CCSUFFIX = ""
+
+SRC_URI = "${STB_KERNEL_MIRROR}/configs/${DEFCONFIGFILENAME}"
+
+S = "${WORKDIR}/linux-${PV}"
+
+COMPATIBLE_HOST = 'mips-linux'
+
+ARCH = "mips"
+
+KERNEL_VERSION = "${PV}"
+KERNEL_OUTPUT = "${B}/${KERNEL_IMAGETYPE}"
+
+# Don't want kernel in rootfs
+FILES_kernel = ""
+FILES_kernel-image = ""
+
+SRC_TREE_DIR = "${STB_KERNEL_DIR}/linux"
+inherit linksrc
+
+LOCALVERSION = "`cat ${STB_KERNEL_DIR}/version`_${MACHINE_CONFIG}" 
+
+do_configure_prepend() {
+	echo "${LOCALVERSION}" > ${WORKDIR}/localversion
+	install -m 0444 ${WORKDIR}/localversion ${S}
+}
+
+do_configure() {
+	install -m 0644 ${WORKDIR}/${DEFCONFIGFILENAME} ${KERNEL_CONFIGFILE}
+	kernel_do_configure
+}
+
+kernel_do_install_append() {
+	install -m 0755 -d ${D}/etc/rcS.d
+	install -m 0555 \ 
+		${STB_KERNEL_DIR}/kmod-scripts/05insmod-serial ${D}/etc/rcS.d
+}
+
+POWERTV_INC_LIST = "ksys.h kwdt.h kdld.h"
+kernel_do_stage_append() {
+	for ptvhdr in ${POWERTV_INC_LIST}; do
+		install -m 0644 ${S}/include/asm-${ARCH}/mach-powertv/$ptvhdr ${STAGING_INCDIR} ;
+	done
+}
+
+PACKAGES += "kernel-module-ltt kernel-module-serial kernel-scripts"
+FILES_kernel-module-ltt = "lib/modules/*/kernel/ltt"
+FILES_kernel-module-serial = "lib/modules/*/kernel/drivers/serial"
+FILES_kernel-scripts = "etc/rcS.d"
