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