[coreboot] FILO 0.6.0 payload bootloader - Bug Reports!

Ivan Ivanov qmastery16 at gmail.com
Sat Jun 24 20:35:36 CEST 2017

Maybe a problem is 1TB size of my hard drive? (because FILO doesn't
work even with a small /boot partition)
FILO uses libpayload storage drivers, and surprisingly - by default,
STORAGE_64BIT_LBA option is disabled at

    bool "Use 64-bit integers to address sectors"
    depends on STORAGE
    default n
      If this is selected, sectors will be addressed by an 64-bit integer.
      Select this to support LBA-48 for ATA drives.

LBA-48 is must have for the hard drives above 137 GB, why is it still
disabled? Looks like nobody using FILO for a long time, thats why no
SATA messages and no LBA-48 by default

Thank you very much for your workaround about cross-compiling, now I
could compile FILO on x86_64 OS. But sadly there is a big new problem,
probably related to the updated gcc-6.3.0 (even with coreboot's
gcc-6.3.0) :

While booting, FILO "freezes" while relocating: ./filo/x86/segment.c ,
void relocate(void) . After enabling debug configs and inserting some
additional print messages, could clearly see that this assembly is a

    __asm__ __volatile__("rep; movsb\n\t"    /* copy everything */
                 "lgdt %3\n\t"
                 "ljmp %4, $1f\n1:\t"
                 "movw %5, %%ds\n\t"
                 "movw %5, %%es\n\t"
                 "movw %5, %%fs\n\t"
                 "movw %5, %%gs\n\t"
                 "movw %5, %%ss\n":"=&S"(d0), "=&D"(d1),
                 :"m"(gdtarg), "n"(RELOC_CS),
                 "q"((unsigned short) RELOC_DS), "0"(&_start),
                 "1"(new_base), "2"(prog_size));

Initially I thought that maybe my OS version of gcc-6.3.0 compiler
compiles this assembly incorrectly. But there is the same problem even
when I try using the coreboot's "pure" GCC and other "pure" coreboot's

Then I thought - maybe a problem is optimization? FILO has -Os
optimization, I replaced it with -O0 to disable (also had to remove
"inline" for three functions at ./filo/fs/mini_inflate.c . -O0
increases size from previous ~110K to about 460K, but if you use LZMA
compression while adding to coreboot - it becomes just ~120K so not
problem to use

But this does not solve a problem - it still stucks at this assembly,
while half year ago - when I compiled it on x86 OS with older
compilers it didn't stuck while booting on the same hardware. Sadly I
dont have time to find out what is the last compiler version that
worked. If everyone uses GRUB and nobody is trying to use FILO except
me, I will live without FILO as well :P

Best regards,
Ivan Ivanov

Very interesting, why it is not enabled by default, because L

2017-06-14 1:13 GMT+03:00 Nico Huber <nico.h at gmx.de>:
> Hello Ivan,
> On 13.06.2017 23:51, Ivan Ivanov wrote:
>> Sadly "filo> kernel hda1:/vmlinuz" doesnt work as well: gives
>> Disk read error dev=1 drive=0 sector=0
> this sounds much like the drive wasn't detected at all, not 100% sure
> though. If you enabled the libpayload AHCI driver, it should show
> detected drives on the console (only a short moment if you enabled
> the GRUB interface). A serial log would help or if that's not pos-
> sible, you can disable the GRUB interface to see the output, IIRC.
>> Error 15: File not found
>> My current situation seems like a standard use case:
>> 1) ext2 boot partition at /dev/sda1 (or which is called "hda1" in this case),
>> size of which is 1GB and it is at DOS-partitioned MBR hard drive
> It could also be the size of the filesystem. IIRC, I've run into pro-
> blems with bigger partitions too, but ignored them because our OS uses
> small boot partitions. You could try the same partitioning and file
> system in QEMU.
>> 2) vmlinuz is at hda1:/vmlinuz , initrd is at hda1:/initrd
>> But so far I am unable to even load a kernel.
>> Either I am doing something very wrong or there is a fundamental
>> problem with FILO which makes it useless outside of QEMU and maybe a
>> couple of IDE legacy systems.... which is really sad if indeed the
>> case :P
>> By the way, when I run "probe" command it tells:
>> IDE channel 0 not found
>> IDE channel 0 not found
>> IDE channel 1 not found
>> IDE channel 1 not found
>> IDE channel 2 not found
>> IDE channel 2 not found
>> IDE channel 3 not found
>> IDE channel 3 not found
>> No word about SATA, but maybe this is a correct behaviour? or not?
> It is expected behaviour. We've integrated the libpayload storage
> driver with little love, it just works for the file-system backend.
> Nico

More information about the coreboot mailing list