diff --git a/classes/sdcard_image-rpi.bbclass b/classes/sdcard_image-rpi.bbclass index 71b6477..63cd62a 100644 --- a/classes/sdcard_image-rpi.bbclass +++ b/classes/sdcard_image-rpi.bbclass @@ -50,7 +50,7 @@ IMAGE_DEPENDS_rpi-sdimg = " \ dosfstools-native \ virtual/kernel \ ${IMAGE_BOOTLOADER} \ - ${@base_contains("KERNEL_IMAGETYPE", "uImage", "u-boot", "",d)} \ + ${@bb.utils.contains('KERNEL_IMAGETYPE', 'uImage', 'u-boot', '',d)} \ " # SD card image name @@ -99,12 +99,23 @@ IMAGE_CMD_rpi-sdimg () { mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/bcm2835-bootfiles/* ::/ case "${KERNEL_IMAGETYPE}" in "uImage") - mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/u-boot.img ::kernel.img - mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}${KERNEL_INITRAMFS}-${MACHINE}.bin ::uImage - ;; + mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/u-boot.img ::kernel.img + mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}${KERNEL_INITRAMFS}-${MACHINE}.bin ::uImage + ;; *) - mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}${KERNEL_INITRAMFS}-${MACHINE}.bin ::kernel.img - ;; + if test -n "${KERNEL_DEVICETREE}"; then + for DTB in ${KERNEL_DEVICETREE}; do + if echo ${DTB} | grep -q '/dts/'; then + bbwarn "${DTB} contains the full path to the the dts file, but only the dtb name should be used." + DTB=`basename ${DTB} | sed 's,\.dts$,.dtb,g'` + fi + DTB_BASE_NAME=`basename ${DTB} .dtb` + + mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${DTB_BASE_NAME}.dtb ::${DTB_BASE_NAME}.dtb + done + fi + mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}${KERNEL_INITRAMFS}-${MACHINE}.bin ::kernel.img + ;; esac if [ -n ${FATPAYLOAD} ] ; then diff --git a/conf/machine/raspberrypi.conf b/conf/machine/raspberrypi.conf index 732ba32..01021ca 100644 --- a/conf/machine/raspberrypi.conf +++ b/conf/machine/raspberrypi.conf @@ -24,6 +24,9 @@ XSERVER = " \ KERNEL_IMAGETYPE ?= "Image" +# Really supported starting from linux-rapsberry 3.18.y only ! +#KERNEL_DEVICETREE ?= "bcm2708-rpi-b.dtb bcm2708-rpi-b-plus.dtb" + MACHINE_FEATURES = "kernel26 apm usbhost keyboard vfat ext2 screen touchscreen alsa bluetooth wifi sdio" #RaspberryPi has no hardware clock diff --git a/recipes-bcm/common/firmware.inc b/recipes-bcm/common/firmware.inc index 3223330..145ecce 100644 --- a/recipes-bcm/common/firmware.inc +++ b/recipes-bcm/common/firmware.inc @@ -1,5 +1,5 @@ -RPIFW_SRCREV ?= "43c5b2fc9bdb0a43ba67661b8677445e71ae9e82" -RPIFW_DATE ?= "20140817" +RPIFW_SRCREV ?= "d426cd1e79f0785fae6c37db79da7d6dae39716d" +RPIFW_DATE ?= "20150204" RPIFW_SRC_URI ?= "git://github.com/raspberrypi/firmware.git;protocol=git;branch=master" RPIFW_S ?= "${WORKDIR}/git" diff --git a/recipes-bsp/rpi-mkimage/rpi-mkimage_git.bb b/recipes-bsp/rpi-mkimage/rpi-mkimage_git.bb index 24da7a0..1778275 100644 --- a/recipes-bsp/rpi-mkimage/rpi-mkimage_git.bb +++ b/recipes-bsp/rpi-mkimage/rpi-mkimage_git.bb @@ -5,7 +5,7 @@ SECTION = "bootloader" DEPENDS = "python" -SRCREV = "330c72c2412f75a32932c4d9b51c9c678bce4180" +SRCREV = "b9d7a8ac626e377577aa6900da5c5a965cafb66c" SRC_URI = " \ git://github.com/raspberrypi/tools.git;branch=master;protocol=git \ file://License \ diff --git a/recipes-kernel/linux/linux-raspberrypi.inc b/recipes-kernel/linux/linux-raspberrypi.inc index 4145b1a..ff0c5ce 100644 --- a/recipes-kernel/linux/linux-raspberrypi.inc +++ b/recipes-kernel/linux/linux-raspberrypi.inc @@ -21,6 +21,20 @@ CMDLINE_raspberrypi = "dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA UDEV_GE_141 ?= "1" +# Set programmatically some variables during recipe parsing +# See http://www.yoctoproject.org/docs/current/bitbake-user-manual/bitbake-user-manual.html#anonymous-python-functions +python __anonymous () { + kerneltype = d.getVar('KERNEL_IMAGETYPE', True) + kerneldt = d.getVar('KERNEL_DEVICETREE', True) + + # Add dependency to 'rpi-mkimage-native' package only if RPi bootloader is used with DT-enable kernel + if kerneldt: + if kerneltype != 'uImage' and len(kerneldt.strip()) > 1: + depends = d.getVar("DEPENDS", True) + depends = "%s rpi-mkimage-native" % depends + d.setVar("DEPENDS", depends) +} + do_kernel_configme_prepend() { install -m 0644 ${S}/arch/${ARCH}/configs/${KERNEL_DEFCONFIG} ${WORKDIR}/defconfig || die "No default configuration for ${MACHINE} / ${KERNEL_DEFCONFIG} available." } @@ -34,3 +48,13 @@ do_deploy_append() { install -d ${DEPLOYDIR}/bcm2835-bootfiles echo "${CMDLINE}" > ${DEPLOYDIR}/bcm2835-bootfiles/cmdline.txt } + +do_rpiboot_mkimage() { + if test "x${KERNEL_IMAGETYPE}" != "xuImage" ; then + if test -n "${KERNEL_DEVICETREE}"; then + # Add RPi bootloader trailer to kernel image to enable DeviceTree support + ${STAGING_DIR_NATIVE}/usr/lib/rpi-mkimage/mkknlimg --dtok ${KERNEL_OUTPUT} ${KERNEL_OUTPUT} + fi + fi +} +addtask rpiboot_mkimage before do_install after do_compile diff --git a/recipes-kernel/linux/linux-raspberrypi_3.18.5.bb b/recipes-kernel/linux/linux-raspberrypi_3.18.5.bb new file mode 100644 index 0000000..663522e --- /dev/null +++ b/recipes-kernel/linux/linux-raspberrypi_3.18.5.bb @@ -0,0 +1,5 @@ +SRCREV = "a6cf3c99bc89e2c010c2f78fbf9e3ed478ccfd46" +SRC_URI = "git://github.com/raspberrypi/linux.git;protocol=git;branch=rpi-3.18.y \ + file://sl030raspberrypii2ckernel.patch \ + " +require linux-raspberrypi.inc