Le ven. 5 juil. 2024 à 13:55, Jose Quaresma <quaresma.j...@gmail.com> a écrit : > > > > Julien Stephan via lists.openembedded.org > <jstephan=baylibre....@lists.openembedded.org> escreveu (sexta, 5/07/2024 > à(s) 12:31): >> >> According to the comment in do_symlink_kernsrc, this function exists >> for compatibility with old style kernel recipes: >> >> # Old style kernels may set ${S} = ${WORKDIR}/git for example >> >> For such recipes S will always be different from STAGING_KERNEL_DIR. >> This is fine for the first build or when unpack is rerun because new >> sources are in S. However the following command breaks the build: >> >> bitbake -C do_symlink_kernsrc virtual/kernel >> >> At this point, S is a symlink to STAGING_KERNEL_DIR, (meaning S != >> STAGING_KERNEL_DIR). We first remove the contents of STAGING_KERNEL_DIR >> without removing the folder itself causing us to lose kernel sources. >> Then we create a symlink from S to STAGING_KERNEL_DIR which results in the >> following broken symlinks: >> >> ${WORKDIR}/git -> <...>/build/tmp/work-shared/<machine>/kernel-source >> kernel-source -> <...>/build/tmp/work-shared/<machine>/kernel-source >> >> The build fails with the following error: >> >> ERROR: <linux_recipe> do_kernel_checkout: FileExistsError(17, 'File >> exists') >> ERROR: Task (<linux_recipe>:do_kernel_checkout) >> failed with exit code '1' >> >> Attempting to access the kernel-source directory results in: >> >> ls: cannot access 'kernel-source': Too many levels of symbolic links >> >> Fix this by checking if S is a symlink, and if so, verifying whether the >> symlink >> points to STAGING_KERNEL_DIR to avoid losing sources >> >> Signed-off-by: Julien Stephan <jstep...@baylibre.com> >> --- >> meta/classes-recipe/kernel.bbclass | 7 ++++++- >> 1 file changed, 6 insertions(+), 1 deletion(-) >> >> diff --git a/meta/classes-recipe/kernel.bbclass >> b/meta/classes-recipe/kernel.bbclass >> index 89badd90f18..e328151cb59 100644 >> --- a/meta/classes-recipe/kernel.bbclass >> +++ b/meta/classes-recipe/kernel.bbclass >> @@ -184,7 +184,12 @@ do_clean[cleandirs] += " ${S} ${STAGING_KERNEL_DIR} >> ${B} ${STAGING_KERNEL_BUILDD >> python do_symlink_kernsrc () { >> s = d.getVar("S") >> kernsrc = d.getVar("STAGING_KERNEL_DIR") >> - if s != kernsrc: >> + if os.path.islink(s): >> + _s = os.readlink(s) >> + else: >> + _s = s >> + >> + if _s != kernsrc: >> bb.utils.mkdirhier(kernsrc) >> bb.utils.remove(kernsrc, recurse=True) >> if s[-1] == '/': >> -- >> 2.45.1 > > > What kernel bbclass are you using to build your kernel? > Please note that a very similar logic was replicated on the > kernel-yocto.bbclass do_kernel_checkout function > so it will be good to test with and without the kernel-yocto.bbclass. > https://git.yoctoproject.org/poky/tree/meta/classes-recipe/kernel-yocto.bbclass#n376 > > I recently came across this problem in a change that I ended up having to > revert. > https://github.com/Freescale/meta-freescale/pull/1843 > https://github.com/Freescale/meta-freescale/pull/1857 > > Jose
Interesting, I'll check this. Thank you for reporting :) Julien > >> >> >> >> >> > > > -- > Best regards, > > José Quaresma
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#201605): https://lists.openembedded.org/g/openembedded-core/message/201605 Mute This Topic: https://lists.openembedded.org/mt/107052142/21656 Group Owner: openembedded-core+ow...@lists.openembedded.org Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-