kernel-devicetree.bbclass 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. # Support for device tree generation
  2. python () {
  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. FILES_${KERNEL_PACKAGE_NAME}-devicetree = "/${KERNEL_IMAGEDEST}/*.dtb /${KERNEL_IMAGEDEST}/*.dtbo"
  9. FILES_${KERNEL_PACKAGE_NAME}-image-zimage-bundle = "/${KERNEL_IMAGEDEST}/zImage-*.dtb.bin"
  10. # Generate kernel+devicetree bundle
  11. KERNEL_DEVICETREE_BUNDLE ?= "0"
  12. normalize_dtb () {
  13. dtb="$1"
  14. if echo $dtb | grep -q '/dts/'; then
  15. bbwarn "$dtb contains the full path to the the dts file, but only the dtb name should be used."
  16. dtb=`basename $dtb | sed 's,\.dts$,.dtb,g'`
  17. fi
  18. echo "$dtb"
  19. }
  20. get_real_dtb_path_in_kernel () {
  21. dtb="$1"
  22. dtb_path="${B}/arch/${ARCH}/boot/dts/$dtb"
  23. if [ ! -e "$dtb_path" ]; then
  24. dtb_path="${B}/arch/${ARCH}/boot/$dtb"
  25. fi
  26. echo "$dtb_path"
  27. }
  28. do_configure_append() {
  29. if [ "${KERNEL_DEVICETREE_BUNDLE}" = "1" ]; then
  30. if echo ${KERNEL_IMAGETYPE_FOR_MAKE} | grep -q 'zImage'; then
  31. case "${ARCH}" in
  32. "arm")
  33. config="${B}/.config"
  34. if ! grep -q 'CONFIG_ARM_APPENDED_DTB=y' $config; then
  35. bbwarn 'CONFIG_ARM_APPENDED_DTB is NOT enabled in the kernel. Enabling it to allow the kernel to boot with the Device Tree appended!'
  36. sed -i "/CONFIG_ARM_APPENDED_DTB[ =]/d" $config
  37. echo "CONFIG_ARM_APPENDED_DTB=y" >> $config
  38. echo "# CONFIG_ARM_ATAG_DTB_COMPAT is not set" >> $config
  39. fi
  40. ;;
  41. *)
  42. bberror "KERNEL_DEVICETREE_BUNDLE is not supported for ${ARCH}. Currently it is only supported for 'ARM'."
  43. esac
  44. else
  45. bberror 'The KERNEL_DEVICETREE_BUNDLE requires the KERNEL_IMAGETYPE to contain zImage.'
  46. fi
  47. fi
  48. }
  49. do_compile_append() {
  50. for dtbf in ${KERNEL_DEVICETREE}; do
  51. dtb=`normalize_dtb "$dtbf"`
  52. oe_runmake $dtb CC="${KERNEL_CC} $cc_extra " LD="${KERNEL_LD}" ${KERNEL_EXTRA_ARGS}
  53. done
  54. }
  55. do_install_append() {
  56. for dtbf in ${KERNEL_DEVICETREE}; do
  57. dtb=`normalize_dtb "$dtbf"`
  58. dtb_ext=${dtb##*.}
  59. dtb_base_name=`basename $dtb .$dtb_ext`
  60. dtb_path=`get_real_dtb_path_in_kernel "$dtb"`
  61. install -m 0644 $dtb_path ${D}/${KERNEL_IMAGEDEST}/$dtb_base_name.$dtb_ext
  62. done
  63. }
  64. do_deploy_append() {
  65. for dtbf in ${KERNEL_DEVICETREE}; do
  66. dtb=`normalize_dtb "$dtbf"`
  67. dtb_ext=${dtb##*.}
  68. dtb_base_name=`basename $dtb .$dtb_ext`
  69. install -d $deployDir
  70. install -m 0644 ${D}/${KERNEL_IMAGEDEST}/$dtb_base_name.$dtb_ext $deployDir/$dtb_base_name-${KERNEL_DTB_NAME}.$dtb_ext
  71. ln -sf $dtb_base_name-${KERNEL_DTB_NAME}.$dtb_ext $deployDir/$dtb_base_name.$dtb_ext
  72. ln -sf $dtb_base_name-${KERNEL_DTB_NAME}.$dtb_ext $deployDir/$dtb_base_name-${KERNEL_DTB_LINK_NAME}.$dtb_ext
  73. for type in ${KERNEL_IMAGETYPE_FOR_MAKE}; do
  74. if [ "$type" = "zImage" ] && [ "${KERNEL_DEVICETREE_BUNDLE}" = "1" ]; then
  75. cat ${D}/${KERNEL_IMAGEDEST}/$type \
  76. $deployDir/$dtb_base_name-${KERNEL_DTB_NAME}.$dtb_ext \
  77. > $deployDir/$type-$dtb_base_name-${KERNEL_DTB_NAME}.$dtb_ext.bin
  78. ln -sf $type-$dtb_base_name-${KERNEL_DTB_NAME}.$dtb_ext.bin \
  79. $deployDir/$type-$dtb_base_name-${KERNEL_DTB_LINK_NAME}.$dtb_ext.bin
  80. if [ -e "${KERNEL_OUTPUT_DIR}/${type}.initramfs" ]; then
  81. cat ${KERNEL_OUTPUT_DIR}/${type}.initramfs \
  82. $deployDir/$dtb_base_name-${KERNEL_DTB_NAME}.$dtb_ext \
  83. > $deployDir/${type}-${INITRAMFS_NAME}-$dtb_base_name-${KERNEL_DTB_NAME}.$dtb_ext.bin
  84. ln -sf ${type}-${INITRAMFS_NAME}-$dtb_base_name-${KERNEL_DTB_NAME}.$dtb_ext.bin \
  85. $deployDir/${type}-${INITRAMFS_NAME}-$dtb_base_name-${KERNEL_DTB_LINK_NAME}.$dtb_ext.bin
  86. fi
  87. fi
  88. done
  89. done
  90. }