5 ms·
Ask HN: Resources for learning about boot loaders?
I’m trying to find the best resources I can for learning about boot loaders. I recently installed Fedora dual boot on my MacBook Air and want to understand what is happening during the boot process, and why, for example, I’m now staring at a Grub console after resizing my APFS partition.
- yjftsjthsd-h 9y agoObligatory: http://wiki.osdev.org/Main_Page http://wiki.osdev.org/Main_Page
- mindcrash 9y agoRealmode assembly - writing bootable stuff: https://0x00sec.org/t/realmode-assembly-writing-bootable-stuff-part-2/2992 https://0x00sec.org/t/realmode-assembly-writing-bootable-stu... Writing a bootloader: http://3zanders.co.uk/2017/10/13/writing-a-bootloader/ http://3zanders.co.uk/2017/10/13/writing-a-bootloader/ (Both from my HN archive, posted somewhere this year)
- gbugniot 9y agoYou should take a look at U-Boot implementation. https://github.com/u-boot/u-boot https://github.com/u-boot/u-boot
- kruhft 9y agoUse the source.
- hawski 9y agoThe one I'm using at the moment: https://www.rodsbooks.com/efi-bootloaders/index.html https://www.rodsbooks.com/efi-bootloaders/index.html It is still maintained and updated. It covers most not loaders out there in context of Linux. It is also very practical.
- no_protocol 9y agoI quite like rEFInd. It seems to be still getting regular updates and has definitely improved since forking from rEFIt.
- rayascott 9y agoThat’s awesome thanks!
- JdeBP 9y agoHmmm. I thought that I told M. Smith about the relocation back when it happened. The hyperlink on that page to one of my articles should read http://jdebp.eu./FGA/efi-boot-process.html http://jdebp.eu./FGA/efi-boot-process.html That is one of several frequently given answers at http://jdebp.eu./FGA/#Boot http://jdebp.eu./FGA/#Boot
- feelin_googley 9y agoI think looking at the bootloader source is an excellent way to learn. However the more complex the bootloader, IME the less rewarding the time spent reading its source. While Grub is highly well-known, popular, sometimes innovative and of course very flexible, it is also more complicated than I would like and so I am not a user. The primary reason is because of its strategy to locate parts of the bootloader on the media in a way that can vary from one installation to another. The alternative, "standard" approach being to locate all parts of the bootloader in some pre-defined area, usually near the start of the "disk". The Grub approach obviously has its justifications and advantages. Maybe some see the Grub approach as an advantage because e.g. if one accidentally loses access to an area near the start of the media where most bootloaders historically reside, then one can still potentially recover. However, if understanding the boot process is a goal, I see the Grub approach as a disadvantage. It makes locating and verifying the bootloader more complex when it is fragmented into parts that are potentially scattered around the media instead of located in a pre-defined area near the start of the disk. If one makes changes such as the formatting or partitioning of the disk, are all the fragments from a prior Grub install accounted for? I would prefer not to have to consider that question. Whereas I know how to completely remove/reinstall the bootloader if I always know where it will be located. If the goal is to understand the bootloader one is using on a lower level than simply using it, e.g., verifying it is there on the media, I think there are more simple alternatives than Grub. Alas, last time I checked the Linux kernel is still not compliant with the "Multiboot Specification". This is unfortunate for me because the non-Grub alternative I prefer supports it and it really works well for multibooting. I would love to use it to try booting a Linux kernel. I suspect there is probably a workaround but making the easy choice to use Grub probably obstructs people from experimenting with alternatives. While experimenting years ago, if I remember correctly, I booted a NetBSD kernel using the FreeBSD bootloader (the part written in Forth). I seem to remember this was possible because of compliance with the Multiboot Specification. "One bootloader, many kernels." (Without chainloading.)
- peterkelly 9y agoThis is what first got me started, and I highly recommend it: http://www.brokenthorn.com/Resources/OSDevIndex.html http://www.brokenthorn.com/Resources/OSDevIndex.html
- rayascott 9y agoThanks! That looks really interesting.
- josefbacik 9y agoI spent an unreasonable amount of time working on grub2. The stuff I looked at the most where the uefi spec http://wiki.phoenix.com/wiki/index.php/Category:UEFI http://wiki.phoenix.com/wiki/index.php/Category:UEFI And then the uefi stub code in the Linux kernel, as well as the grub2 source code. It’s not too hard to figure out the flow in grub2, just figure out where it does EXIT_BOOT_SERVICES and work from there.
- colejohnson66 9y agoFor some reverse engineered versions of the Windows bootloaders: http://thestarman.pcministry.com/asm/mbr/ http://thestarman.pcministry.com/asm/mbr/
- cmurf 9y agoGeneral purpose understanding probably won't help you with the specific problem you're having. I know quite a bit about the user space foils of your situation with Apple's EFI firmware, the NVRAM boot entries that point to the bootloader, GRUB2, and the peculiarities of Fedora's installer. And there is really nothing standard about it.. a. Fedora's installer, only on Macs, creates a 2nd "EFI System partition" that's HFS+ formatted. And that's because Apple's EFI firmware can read HFS+ directly, and it enables showing Fedora as a boot option when you boot with the option key held down. This doesn't happen if the bootloader is on the "real" FAT32 EFI system partition, which hilariously Apple doesn't use for booting either, they only use it for staging firmware updates. Right out of the gate you're in the weeds of super esoteric stuff... b. That you get a GRUB prompt means the firmware found the GRUB EFI OS Loader binary, which is on that HFS+ faux-EFI System partition. In that same directory should be the grub.cfg, which it should read automatically and display a menu of kernels to boot. Therefore, the GRUB prompt also means the OS Loader isn't finding the grub.cfg. So you have something of a mystery on your hands and it'll take an autopsy to find out what's going on. First thing would be to use one of the netinstallers (any Fedora edition netinstall image) put onto a USB stick, boot that with the option key, choose Troubleshooting, then Rescue a Fedora system, wait for boot process, pick the first option to find and assemble the system. And then you'll chroot /mnt/sysimage grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg exit reboot That should work unless there are extenuating circumstances (some other distro's GRUB is somewhere on this system). But I still don't really understand how APFS resize can affect the grub.cfg alone, without nerfing the entire HFS+ faux-ESP as well, in which case you wouldn't have a GRUB prompt.
- rayascott 9y agoThanks for your reply, it’s extremely informative and useful. It’s actually the second time I’ve resized the APFS container and this didn’t happen the first time. I was also shocked to wake up this morning to discover the resize had actually left me with a new partition, considering that every time I tried to resize it, the process failed with a well documented error code or the machine just spontaneous rebooted while frozen. One other question I have is, that once I’d installed Fedora, my Mac would automatically boot into Fedora. So now if I want to use macOS I have to use the Option key. Has the Fedora boot loader over written something and is it even possible to swap it back? I’m going to give the net installer Rescue a bash now. Thanks.
- fao_ 9y agoPoC || GTFO has a series of articles about the bootloader and operating systems all written in under 512 bytes. It's quite adorable. I also recommend the website wiki.osdev.org -- it saw me through harsh undocumented times.
- amorphid 9y agoI learned by playing around with the Grub bootloader in Linux VMs launched with Vagrant. I deleted every non-essential line of code in the bootloader config, and then stared at it & the Grub docs until it made sense. My ultimate goal was learning how to turn a Linux container into a bootable VM.
- sigjuice 9y agoSo how does one turn a Linux container into a bootable VM?
- fuzzfactor 9y agohttp://reboot.pro/ http://reboot.pro/