On Thu, Aug 11, 2022 at 09:27:44AM -0700, Tim Harvey wrote: > Greetings, > > After a couple of hours troubleshooting a bad boot image today I > realized the issue was that I had some 0 byte files for the lpddr4 > training blobs that are part of the imx8mp binman created image. > > Digging in I found that if a blob referenced in the binman node is > missing a warning will be output but the missing files will be > 'created' as 0 byte files such that the next time you build you will > get no warning (but will have a non-working image). Additionally the > error does not cause a non-zero exit code. > > I'm not that fluent in python these days, and don't have the time for > a while to try and fix this but I figured I would at least send this > email in case someone else does. > > Example: > # rm *lpddr4*.bin # make sure lpddr4*.bin files referenced in binman > nodes are missing > # make distclean imx8mp_venice_defconfig flash.bin && echo "build ok" > ... > BINMAN flash.bin > Image 'main-section' is missing external blobs and is non-functional: ddr-1d-ime > m-fw ddr-1d-dmem-fw ddr-2d-imem-fw ddr-2d-dmem-fw > Image 'main-section' has faked external blobs and is non-functional: lpddr4_pmu_ > train_1d_imem_202006.bin lpddr4_pmu_train_1d_dmem_202006.bin lpddr4_pmu_train_2d > _imem_202006.bin lpddr4_pmu_train_2d_dmem_202006.bin > > Some images are invalid > ^^^ excellent warning > build ok > ^^^ not so great that there is a successful exit code > # make flash.bin && echo "build ok" > ... > BINMAN flash.bin > build ok > ^^^ absolutely horrible that 0 byte files were created and thus > everything looks good this time around! > # stat -c "%s %n" lpddr4*.bin > 0 lpddr4_pmu_train_1d_dmem_202006.bin > 0 lpddr4_pmu_train_1d_imem_202006.bin > 0 lpddr4_pmu_train_2d_dmem_202006.bin > 0 lpddr4_pmu_train_2d_imem_202006.bin So, this isn't the first time someone has had this problem. On the one hand, we need CI to pass, and not require fetching of arbitrary further images to assemble the binary. On the other hand, we don't want users spending a bunch of time because something didn't work and the normal way of conveying THIS WON'T WORK is a non-zero exit status. Can we easily make some flag for buildman or binman that we do set in CI but won't be set by users? -- Tom