![](https://seccdn.libravatar.org/avatar/9435667f7160374bc34a8600b686aecd.jpg?s=120&d=mm&r=g)
On Thu, Apr 15, 2021 at 12:33 PM Michal Suchánek <msuchanek@suse.de> wrote:
It's the same for Windows.
Linux has drivers for large number of devices, and you need to preload some to be able to boot the system with a generic distribution kernel.
That prealod is done by packing essential drivers into the ramdisk. It works very well both for booting from device/filesystem/RAID not supported by bootloader/BIOS and booting form network. In both cases you store the kernel and the ramdisk on a separate medium that the bootloader/BIOS can access, load over network, whatever.
Similarily in the Windows case you can and will have large number of drivers installed, and a few drivers need to be preloaded on boot so that the kernel can access the boot disk once loaded and executed by the bootloader. The exact mechanism is secret MS sauce so I can't tell if there is an actual package of these boot drivers similar to ramdisk or if there is different underlying mechanism. Either way the basic solution is the same. Just having a driver is not enough, you have to tell Windows to preload the driver on boot, otherwise you get the infamous INACESSIBLE_BOOT_DEVICE error.
Windows loader is using firmware services to access system disk, it reads the registry where boot drivers are listed and loads them together with the kernel. This method won't work in Linux as you cannot load kernel and modules side by side; loading modules requires user space which is one reason for initrd.