On Tue, Nov 12, 2013 at 3:17 AM, Ming Liu <ming....@windriver.com> wrote: > In many cases, KERNEL_OUTPUT is a symbolic link to the real bootable image, > but in bundle_initramfs task, it's not considered so that the KERNEL_OUTPUT > is being renamed/restored as a regular file, this leads it finally point to > a incorrect target, or even worse, break the bundle_initramfs task for > KERNEL_OUTPUT is not going to be regenerated in case it is a symbolic link > to vmlinux. > > Also, we need move bundle_initramfs after kernel_link_vmlinux. > > Signed-off-by: Ming Liu <ming....@windriver.com> > --- > meta/classes/kernel.bbclass | 24 ++++++++++++++++++++---- > 1 file changed, 20 insertions(+), 4 deletions(-) > > diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass > index a4db9f5..2ec09ae 100644 > --- a/meta/classes/kernel.bbclass > +++ b/meta/classes/kernel.bbclass > @@ -123,13 +123,29 @@ do_bundle_initramfs () { > if [ ! -z "${INITRAMFS_IMAGE}" -a x"${INITRAMFS_IMAGE_BUNDLE}" = x1 > ]; then > echo "Creating a kernel image with a bundled initramfs..." > copy_initramfs > - if [ -e ${KERNEL_OUTPUT} ] ; then > + # Backuping kernel image relies on its type(regular file or > symbolic link) > + linkpath="" > + realpath="" > + if [ -h ${KERNEL_OUTPUT} ] ; then > + linkpath=`readlink -n ${KERNEL_OUTPUT}` > + realpath=`readlink -fn ${KERNEL_OUTPUT}` > + mv -f $realpath $realpath.bak > + elif [ -f ${KERNEL_OUTPUT} ]; then > mv -f ${KERNEL_OUTPUT} ${KERNEL_OUTPUT}.bak > fi > > use_alternate_initrd=CONFIG_INITRAMFS_SOURCE=${B}/usr/${INITRAMFS_IMAGE}-${MACHINE}.cpio > kernel_do_compile > - mv -f ${KERNEL_OUTPUT} ${KERNEL_OUTPUT}.initramfs > - mv -f ${KERNEL_OUTPUT}.bak ${KERNEL_OUTPUT} > + # Restoring kernel image > + if [ ! -z $realpath ]; then
Why not if [ -n "$realpath" ] ? I always find that reads easier. > + mv -f $realpath $realpath.initramfs > + mv -f $realpath.bak $realpath > + cd ${B}/$(dirname ${KERNEL_OUTPUT}) > + ln -sf $linkpath > + ln -sf $linkpath.initramfs Won't the links just follow .. they are symbolic after all. Since things are being put back in place. Or are the names changing underneath ? > + else > + mv -f ${KERNEL_OUTPUT} ${KERNEL_OUTPUT}.initramfs > + mv -f ${KERNEL_OUTPUT}.bak ${KERNEL_OUTPUT} > + fi > # Update install area > echo "There is kernel image bundled with initramfs: > ${B}/${KERNEL_OUTPUT}.initramfs" > install -m 0644 ${B}/${KERNEL_OUTPUT}.initramfs > ${D}/boot/${KERNEL_IMAGETYPE}-initramfs-${MACHINE}.bin > @@ -152,7 +168,7 @@ python do_devshell_prepend () { > os.environ["LDFLAGS"] = '' > } > > -addtask bundle_initramfs after do_compile before do_build > +addtask bundle_initramfs after do_kernel_link_vmlinux before do_build This isn't explained in the commit log. Bruce > > kernel_do_compile() { > unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE > -- > 1.8.4.1 > > _______________________________________________ > Openembedded-core mailing list > Openembedded-core@lists.openembedded.org > http://lists.openembedded.org/mailman/listinfo/openembedded-core -- "Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end" _______________________________________________ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core