1# Support for device tree generation 2python () { 3 if not bb.data.inherits_class('nopackages', d): 4 d.appendVar("PACKAGES", " ${KERNEL_PACKAGE_NAME}-devicetree") 5 if d.getVar('KERNEL_DEVICETREE_BUNDLE') == '1': 6 d.appendVar("PACKAGES", " ${KERNEL_PACKAGE_NAME}-image-zimage-bundle") 7} 8 9FILES:${KERNEL_PACKAGE_NAME}-devicetree = "/${KERNEL_IMAGEDEST}/*.dtb /${KERNEL_IMAGEDEST}/*.dtbo" 10FILES:${KERNEL_PACKAGE_NAME}-image-zimage-bundle = "/${KERNEL_IMAGEDEST}/zImage-*.dtb.bin" 11 12# Generate kernel+devicetree bundle 13KERNEL_DEVICETREE_BUNDLE ?= "0" 14 15# dtc flags passed via DTC_FLAGS env variable 16KERNEL_DTC_FLAGS ?= "" 17 18normalize_dtb () { 19 dtb="$1" 20 if echo $dtb | grep -q '/dts/'; then 21 bbwarn "$dtb contains the full path to the the dts file, but only the dtb name should be used." 22 dtb=`basename $dtb | sed 's,\.dts$,.dtb,g'` 23 fi 24 echo "$dtb" 25} 26 27get_real_dtb_path_in_kernel () { 28 dtb="$1" 29 dtb_path="${B}/arch/${ARCH}/boot/dts/$dtb" 30 if [ ! -e "$dtb_path" ]; then 31 dtb_path="${B}/arch/${ARCH}/boot/$dtb" 32 fi 33 echo "$dtb_path" 34} 35 36do_configure:append() { 37 if [ "${KERNEL_DEVICETREE_BUNDLE}" = "1" ]; then 38 if echo ${KERNEL_IMAGETYPE_FOR_MAKE} | grep -q 'zImage'; then 39 case "${ARCH}" in 40 "arm") 41 config="${B}/.config" 42 if ! grep -q 'CONFIG_ARM_APPENDED_DTB=y' $config; then 43 bbwarn 'CONFIG_ARM_APPENDED_DTB is NOT enabled in the kernel. Enabling it to allow the kernel to boot with the Device Tree appended!' 44 sed -i "/CONFIG_ARM_APPENDED_DTB[ =]/d" $config 45 echo "CONFIG_ARM_APPENDED_DTB=y" >> $config 46 echo "# CONFIG_ARM_ATAG_DTB_COMPAT is not set" >> $config 47 fi 48 ;; 49 *) 50 bberror "KERNEL_DEVICETREE_BUNDLE is not supported for ${ARCH}. Currently it is only supported for 'ARM'." 51 esac 52 else 53 bberror 'The KERNEL_DEVICETREE_BUNDLE requires the KERNEL_IMAGETYPE to contain zImage.' 54 fi 55 fi 56} 57 58do_compile:append() { 59 if [ -n "${KERNEL_DTC_FLAGS}" ]; then 60 export DTC_FLAGS="${KERNEL_DTC_FLAGS}" 61 fi 62 63 for dtbf in ${KERNEL_DEVICETREE}; do 64 dtb=`normalize_dtb "$dtbf"` 65 oe_runmake $dtb CC="${KERNEL_CC} $cc_extra " LD="${KERNEL_LD}" ${KERNEL_EXTRA_ARGS} 66 done 67} 68 69do_install:append() { 70 for dtbf in ${KERNEL_DEVICETREE}; do 71 dtb=`normalize_dtb "$dtbf"` 72 dtb_ext=${dtb##*.} 73 dtb_base_name=`basename $dtb .$dtb_ext` 74 dtb_path=`get_real_dtb_path_in_kernel "$dtb"` 75 install -m 0644 $dtb_path ${D}/${KERNEL_IMAGEDEST}/$dtb_base_name.$dtb_ext 76 done 77} 78 79do_deploy:append() { 80 for dtbf in ${KERNEL_DEVICETREE}; do 81 dtb=`normalize_dtb "$dtbf"` 82 dtb_ext=${dtb##*.} 83 dtb_base_name=`basename $dtb .$dtb_ext` 84 install -d $deployDir 85 install -m 0644 ${D}/${KERNEL_IMAGEDEST}/$dtb_base_name.$dtb_ext $deployDir/$dtb_base_name-${KERNEL_DTB_NAME}.$dtb_ext 86 if [ "${KERNEL_IMAGETYPE_SYMLINK}" = "1" ] ; then 87 ln -sf $dtb_base_name-${KERNEL_DTB_NAME}.$dtb_ext $deployDir/$dtb_base_name.$dtb_ext 88 fi 89 if [ -n "${KERNEL_DTB_LINK_NAME}" ] ; then 90 ln -sf $dtb_base_name-${KERNEL_DTB_NAME}.$dtb_ext $deployDir/$dtb_base_name-${KERNEL_DTB_LINK_NAME}.$dtb_ext 91 fi 92 for type in ${KERNEL_IMAGETYPE_FOR_MAKE}; do 93 if [ "$type" = "zImage" ] && [ "${KERNEL_DEVICETREE_BUNDLE}" = "1" ]; then 94 cat ${D}/${KERNEL_IMAGEDEST}/$type \ 95 $deployDir/$dtb_base_name-${KERNEL_DTB_NAME}.$dtb_ext \ 96 > $deployDir/$type-$dtb_base_name-${KERNEL_DTB_NAME}.$dtb_ext${KERNEL_DTB_BIN_EXT} 97 if [ -n "${KERNEL_DTB_LINK_NAME}" ]; then 98 ln -sf $type-$dtb_base_name-${KERNEL_DTB_NAME}.$dtb_ext${KERNEL_DTB_BIN_EXT} \ 99 $deployDir/$type-$dtb_base_name-${KERNEL_DTB_LINK_NAME}.$dtb_ext${KERNEL_DTB_BIN_EXT} 100 fi 101 if [ -e "${KERNEL_OUTPUT_DIR}/${type}.initramfs" ]; then 102 cat ${KERNEL_OUTPUT_DIR}/${type}.initramfs \ 103 $deployDir/$dtb_base_name-${KERNEL_DTB_NAME}.$dtb_ext \ 104 > $deployDir/${type}-${INITRAMFS_NAME}-$dtb_base_name-${KERNEL_DTB_NAME}.$dtb_ext${KERNEL_DTB_BIN_EXT} 105 if [ -n "${KERNEL_DTB_LINK_NAME}" ]; then 106 ln -sf ${type}-${INITRAMFS_NAME}-$dtb_base_name-${KERNEL_DTB_NAME}.$dtb_ext${KERNEL_DTB_BIN_EXT} \ 107 $deployDir/${type}-${INITRAMFS_NAME}-$dtb_base_name-${KERNEL_DTB_LINK_NAME}.$dtb_ext${KERNEL_DTB_BIN_EXT} 108 fi 109 fi 110 fi 111 done 112 done 113} 114