At first, you need to have at least simple file system support in your bootloader. As long as in the bootloader is hard to support full featured file system, several tricks are possible:
Make very-simple-file system support. For example, search for a file with a given name from the root directory of the boot device.
Or simply reserve some physical sectors for your second stage binary and read it directly from there.
The second service you need is a executable file loading and executing. The most simple solution is to use plain binary image of the memory, like in DOS .com files.
So, then the bootloader will be able to load one bigger program from the disk, to place it in the memory and to run it. This bigger program now have enough space to provide file system support and complex executable files loading/running. In more simple cases, this executable may contain your whole kernel and to start it directly without loading additional modules.