diff options
Diffstat (limited to 'meta/classes/kernel.bbclass')
| -rw-r--r-- | meta/classes/kernel.bbclass | 96 |
1 files changed, 84 insertions, 12 deletions
diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass index e039dfc15c..8cf66ce7dc 100644 --- a/meta/classes/kernel.bbclass +++ b/meta/classes/kernel.bbclass | |||
| @@ -9,6 +9,7 @@ INHIBIT_DEFAULT_DEPS = "1" | |||
| 9 | KERNEL_IMAGETYPE ?= "zImage" | 9 | KERNEL_IMAGETYPE ?= "zImage" |
| 10 | INITRAMFS_IMAGE ?= "" | 10 | INITRAMFS_IMAGE ?= "" |
| 11 | INITRAMFS_TASK ?= "" | 11 | INITRAMFS_TASK ?= "" |
| 12 | INITRAMFS_IMAGE_BUNDLE ?= "" | ||
| 12 | 13 | ||
| 13 | python __anonymous () { | 14 | python __anonymous () { |
| 14 | kerneltype = d.getVar('KERNEL_IMAGETYPE', True) or '' | 15 | kerneltype = d.getVar('KERNEL_IMAGETYPE', True) or '' |
| @@ -19,7 +20,15 @@ python __anonymous () { | |||
| 19 | 20 | ||
| 20 | image = d.getVar('INITRAMFS_IMAGE', True) | 21 | image = d.getVar('INITRAMFS_IMAGE', True) |
| 21 | if image: | 22 | if image: |
| 22 | d.setVar('INITRAMFS_TASK', '${INITRAMFS_IMAGE}:do_rootfs') | 23 | d.appendVarFlag('do_bundle_initramfs', 'depends', ' ${INITRAMFS_IMAGE}:do_rootfs') |
| 24 | |||
| 25 | # NOTE: setting INITRAMFS_TASK is for backward compatibility | ||
| 26 | # The preferred method is to set INITRAMFS_IMAGE, because | ||
| 27 | # this INITRAMFS_TASK has circular dependency problems | ||
| 28 | # if the initramfs requires kernel modules | ||
| 29 | image_task = d.getVar('INITRAMFS_TASK', True) | ||
| 30 | if image_task: | ||
| 31 | d.appendVarFlag('do_configure', 'depends', ' ${INITRAMFS_TASK}') | ||
| 23 | } | 32 | } |
| 24 | 33 | ||
| 25 | inherit kernel-arch deploy | 34 | inherit kernel-arch deploy |
| @@ -72,9 +81,82 @@ KERNEL_SRC_PATH = "/usr/src/kernel" | |||
| 72 | 81 | ||
| 73 | KERNEL_IMAGETYPE_FOR_MAKE = "${@(lambda s: s[:-3] if s[-3:] == ".gz" else s)(d.getVar('KERNEL_IMAGETYPE', True))}" | 82 | KERNEL_IMAGETYPE_FOR_MAKE = "${@(lambda s: s[:-3] if s[-3:] == ".gz" else s)(d.getVar('KERNEL_IMAGETYPE', True))}" |
| 74 | 83 | ||
| 84 | copy_initramfs() { | ||
| 85 | echo "Copying initramfs into ./usr ..." | ||
| 86 | # Find and use the first initramfs image archive type we find | ||
| 87 | rm -f ${B}/usr/${INITRAMFS_IMAGE}-${MACHINE}.cpio | ||
| 88 | for img in cpio.gz cpio.lzo cpio.lzma cpio.xz; do | ||
| 89 | if [ -e "${DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE}-${MACHINE}.$img" ]; then | ||
| 90 | cp ${DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE}-${MACHINE}.$img ${B}/usr/. | ||
| 91 | case $img in | ||
| 92 | *gz) | ||
| 93 | echo "gzip decompressing image" | ||
| 94 | gunzip -f ${B}/usr/${INITRAMFS_IMAGE}-${MACHINE}.$img | ||
| 95 | break | ||
| 96 | ;; | ||
| 97 | *lzo) | ||
| 98 | echo "lzo decompressing image" | ||
| 99 | lzop -df ${B}/usr/${INITRAMFS_IMAGE}-${MACHINE}.$img | ||
| 100 | break | ||
| 101 | ;; | ||
| 102 | *lzma) | ||
| 103 | echo "lzma decompressing image" | ||
| 104 | lzmash -df ${B}/usr/${INITRAMFS_IMAGE}-${MACHINE}.$img | ||
| 105 | break | ||
| 106 | ;; | ||
| 107 | *xz) | ||
| 108 | echo "xz decompressing image" | ||
| 109 | xz -df ${B}/usr/${INITRAMFS_IMAGE}-${MACHINE}.$img | ||
| 110 | break | ||
| 111 | ;; | ||
| 112 | esac | ||
| 113 | fi | ||
| 114 | done | ||
| 115 | echo "Finished copy of initramfs into ./usr" | ||
| 116 | } | ||
| 117 | |||
| 118 | INITRAMFS_BASE_NAME = "${KERNEL_IMAGETYPE}-initramfs-${PV}-${PR}-${MACHINE}-${DATETIME}" | ||
| 119 | INITRAMFS_BASE_NAME[vardepsexclude] = "DATETIME" | ||
| 120 | do_bundle_initramfs () { | ||
| 121 | if [ ! -z "${INITRAMFS_IMAGE}" -a x"${INITRAMFS_IMAGE_BUNDLE}" = x1 ]; then | ||
| 122 | echo "Creating a kernel image with a bundled initramfs..." | ||
| 123 | copy_initramfs | ||
| 124 | if [ -e ${KERNEL_OUTPUT} ] ; then | ||
| 125 | mv -f ${KERNEL_OUTPUT} ${KERNEL_OUTPUT}.bak | ||
| 126 | fi | ||
| 127 | use_alternate_initrd=CONFIG_INITRAMFS_SOURCE=${B}/usr/${INITRAMFS_IMAGE}-${MACHINE}.cpio | ||
| 128 | kernel_do_compile | ||
| 129 | mv -f ${KERNEL_OUTPUT} ${KERNEL_OUTPUT}.initramfs | ||
| 130 | mv -f ${KERNEL_OUTPUT}.bak ${KERNEL_OUTPUT} | ||
| 131 | # Update install area | ||
| 132 | echo "There is kernel image bundled with initramfs: ${B}/${KERNEL_OUTPUT}.initramfs" | ||
| 133 | install -m 0644 ${B}/${KERNEL_OUTPUT}.initramfs ${D}/boot/${KERNEL_IMAGETYPE}-initramfs-${MACHINE}.bin | ||
| 134 | echo "${B}/${KERNEL_OUTPUT}.initramfs" | ||
| 135 | cd ${B} | ||
| 136 | # Update deploy directory | ||
| 137 | if [ -e "${KERNEL_OUTPUT}.initramfs" ]; then | ||
| 138 | echo "Copying deploy kernel-initramfs image and setting up links..." | ||
| 139 | initramfs_base_name=${INITRAMFS_BASE_NAME} | ||
| 140 | initramfs_symlink_name=${KERNEL_IMAGETYPE}-initramfs-${MACHINE} | ||
| 141 | install -m 0644 ${KERNEL_OUTPUT}.initramfs ${DEPLOY_DIR_IMAGE}/${initramfs_base_name}.bin | ||
| 142 | cd ${DEPLOY_DIR_IMAGE} | ||
| 143 | ln -sf ${initramfs_base_name}.bin ${initramfs_symlink_name}.bin | ||
| 144 | fi | ||
| 145 | fi | ||
| 146 | } | ||
| 147 | do_bundle_initramfs[nostamp] = "1" | ||
| 148 | addtask bundle_initramfs after do_compile | ||
| 149 | |||
| 75 | kernel_do_compile() { | 150 | kernel_do_compile() { |
| 76 | unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE | 151 | unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE |
| 77 | oe_runmake ${KERNEL_IMAGETYPE_FOR_MAKE} ${KERNEL_ALT_IMAGETYPE} CC="${KERNEL_CC}" LD="${KERNEL_LD}" ${KERNEL_EXTRA_ARGS} | 152 | # The $use_alternate_initrd is only set from |
| 153 | # do_bundle_initramfs() This variable is specifically for the | ||
| 154 | # case where we are making a second pass at the kernel | ||
| 155 | # compilation and we want to force the kernel build to use a | ||
| 156 | # different initramfs image. The way to do that in the kernel | ||
| 157 | # is to specify: | ||
| 158 | # make ...args... CONFIG_INITRAMFS_SOURCE=some_other_initramfs.cpio | ||
| 159 | oe_runmake ${KERNEL_IMAGETYPE_FOR_MAKE} ${KERNEL_ALT_IMAGETYPE} CC="${KERNEL_CC}" LD="${KERNEL_LD}" ${KERNEL_EXTRA_ARGS} $use_alternate_initrd | ||
| 78 | if test "${KERNEL_IMAGETYPE_FOR_MAKE}.gz" = "${KERNEL_IMAGETYPE}"; then | 160 | if test "${KERNEL_IMAGETYPE_FOR_MAKE}.gz" = "${KERNEL_IMAGETYPE}"; then |
| 79 | gzip -9c < "${KERNEL_IMAGETYPE_FOR_MAKE}" > "${KERNEL_OUTPUT}" | 161 | gzip -9c < "${KERNEL_IMAGETYPE_FOR_MAKE}" > "${KERNEL_OUTPUT}" |
| 80 | fi | 162 | fi |
| @@ -219,18 +301,8 @@ kernel_do_configure() { | |||
| 219 | cp "${WORKDIR}/defconfig" "${B}/.config" | 301 | cp "${WORKDIR}/defconfig" "${B}/.config" |
| 220 | fi | 302 | fi |
| 221 | yes '' | oe_runmake oldconfig | 303 | yes '' | oe_runmake oldconfig |
| 222 | |||
| 223 | if [ ! -z "${INITRAMFS_IMAGE}" ]; then | ||
| 224 | for img in cpio.gz cpio.lzo cpio.lzma cpio.xz; do | ||
| 225 | if [ -e "${DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE}-${MACHINE}.$img" ]; then | ||
| 226 | cp "${DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE}-${MACHINE}.$img" initramfs.$img | ||
| 227 | fi | ||
| 228 | done | ||
| 229 | fi | ||
| 230 | } | 304 | } |
| 231 | 305 | ||
| 232 | do_configure[depends] += "${INITRAMFS_TASK}" | ||
| 233 | |||
| 234 | do_savedefconfig() { | 306 | do_savedefconfig() { |
| 235 | oe_runmake savedefconfig | 307 | oe_runmake savedefconfig |
| 236 | } | 308 | } |
