Hello,I have MacBook late 2006 with broken CD-ROM drive. So, I need some trick. Moreover, it has 32 bit EFI, what doesn't make my life simpler :(I've formatted USB drive with two partitions: EFI (fat32) and anotherone, where I've dd'ed a Windows installation ISO to. So, the filesystemis UDF there.I tried to use GRUB2 to boot Windows from the second partition in suchconfiguration. It fails on secure boot, which it doesn't support, as far as I've read somewhere.Is it yet possible to configure reFind to do the job? As far I'veunderstand now, the main problem is Shim, which is x64 only, right?
Did you use Boot Camp assistant to partition the drive? If you can't use Boot Camp to create the partition then iPartition.app can do it (but you may need to boot macOS from a different drive). Create the partition (Microsoft Basic Data, ExFAT), mark it as Visable in Windows. In Windows Installer you'll choose to erase the partition as NTFS (don't use Windows to make the partition).
Can 2006 MacBook boot legacy/BIOS from USB? If it can, then the way to make the USB is probably more complicated than using dd. https://www.balena.io/etcher/
Or you might try a USB DVD ROM drive? I forget if that works or not on old Macs.
Even though the MacBook has a 32-bit EFI, the processor is still 64 bit.
For hackintoshes, there are boot loaders (e.g. Clover and OpenCore) that have a legacy/BIOS installation method that includes a UEFI implementation (Duet or OpenDuet) (that legacy type is not to be confused with the legacy in OCLP OpenCore Legacy Patcher). I wonder if that could be used to boot UEFI Windows? I've never tried it. They're meant for PCs to run macOS, so they are probably not suited for Macs to run Windows? https://www.tonymacx86.com/threads/macos-big-sur-on-legacy-system.306824/
Anyway, it would be a strange setup: 32-bit EFI -> Boot Camp/CSM/Legacy/BIOS boot -> OpenCore/Clover Duet -> Duet UEFI -> Clover/OpenCore EFI boot loader -> Windows UEFI
There's probably going to be some hardware that doesn't work if it works at all?
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Did you use Boot Camp assistant to partition the drive?
What drive? Are you about USB stick? No, I used GParted to do it. Ubuntu 20.04 is installed now in the HDD partition, where Mac OS X was located. Yet I have two ntfs partitions, one of which is taken by Win7x64. All three were created by BootCamp, when I installed Windows on this book many years ago. But Windows boot sector was killed by Ubuntu installation. I was perfect noob, when I installed Ubuntu over Mac OS. Otherwise I'd make MBR backup at least :( So, now I need to launch Windows installer somehow, to repair it. At least I don't see any other way. I installed Win7 from DVD many years ago, when CD drive yet worked.
Can 2006 MacBook boot legacy/BIOS from USB?
How to check it? I don't know. The only, what I know is that I've saved Ubuntu installer to USB stick (using Rufus on another Win7 computer) and inserted it into this Mac Book. The Boot Manager shows this stick among boot options, and I've installed Ubuntu x64 to HDD from USB without any troubles, though with a couple of tricks. Anyway the USB booting itself is definitely possible. I could describe the installation process more particularly, if it's interesting.
Or you might try a USB DVD ROM drive?
Could you explain it to the dumb, what is principal difference between USB stick and external USB CD/DVD drive? Does UEFI wok differently? Or does external drive work without UEFI?
Even though the MacBook has a 32-bit EFI, the processor is still 64 bit.
Could you explain it to me, where 32 bit world comes into 64 bit one? BOOTIA32.EFI=>GRUBIA32.EFI both are 32 bit. But GRUB can start linux kernel, which is 64 bit, as I believe. If so, then what is the problem with Windows boot loader? It's 64 bit, AFAIU, so the problem is to launch it from the 32 bit GRUB / feFind. GRUB tries to do it, but it doesn't support signed executables, AFAICU. But reFind does. So, where is the principal trouble?
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
BIOS boot on Macs usually only works on the internal hard drive. That is the one that needs partititioning, either with Boot Camp assistant or iPartition.app or gdisk (but the other two might be simpler - they create a Hybrid MBR/GPT add the MBR boot code as well.
There's nothing really special in the MBR that can't just be recreated. The partitions point to GPT partitions. The code just loads code from the partition that is marked in tthe MBR as the active partition. The code that lis loaded is from the PBR (first blocks of the partition). On Windows, that loads a BOOTMGR. On Linux, if it was a legacy install, it would load a BIOS version of grub.
The script at https://gist.github.com/joevt/a99e3af71343d8242e0078ab4af39b6c will dump all the info of all your partitions and all the MBRs and PBRs so you can see how legacy BIOS boot is setup. Then you'll want to examine the file hierarchy on the EFI partitions to see how EFI boot is setup.
For USB booting - you are talking about Linux, which can work with EFI 1.1. Windows cannot. Therefore you USB Linux install was probably using EFI. EFI booting uses NVRAM variables. In linux, use the efibootmgr command to look at those. I suppose it would give an error if it wasn't booted with EFI? In macOS, the dumpallbootvars will show the same info.
I don't know what the difference is between USB DVD ROM drive and USB flash. Apple's Boot Camp / BIOS boot might support USB DVD ROM drive or it might not. One of those links I provided has instructions for using an Apple Super Drive for installing Windows which I suppose is the same as a USB DVD ROM drive?
32bit vs 64bit: You have a 64 bit processor. It can run 32 bit software or 64 bit software in an OS. EFI is like an OS. The code can be 32 bit or 64 bit. The type of data that is mostly effected by the difference is "pointers". A pointer is a value that points to memory. I suppose 32 bit EFI is limited to 32 bit pointers? The EFI loads a EFI boot loader (boot.efi on macOS) which loads the kernel. In macOS, the kernel can be 32 bit or 64 bit. There are methods for a 32 bit kernel to deal with more than 32 bits of memory. The 32 bit kernel can work with a 64 bit user space? Some macOS apps (they run in user space) are 32 bit and some are 64 bit. Recent versions of macOS don't run 32 bit apps anymore (since Catalina). Tiger and Leopard have a 32 bit kernel. Snow Leopard defaults to 32 bit kernel but can be set to use a 64 bit kernel. Lion has only 64 bit kernel. I might be mistaken about those. Anyway, my Mac Pro 2008 (64 bit EFI) can run everything from Tiger to Montery (I haven't gotten around to installing Big Sur/Montery yet).
For that to work work on 32 bit EFI 1.1, you'll need to write EFI 1.1 drivers that add missing UEFI 2.x EFI protocols and functions; for Boot Services, just the functions/protocols Windows requires up to when it calls ExitBootServices; then there's a couple things for Runtime Services to take care of. One job of Runtime Services is to take care of NVRAM. OpenCore/RefindPlus have a Runtime Services override function to stop Windows from writing certain Windows specific NVRAM variables which are large or numerous and therfore may hasten the destruction of the fragile NVRAM of MacPro4,1/MacPro5,1. https://forums.macrumors.com/threads/mp5-1-bootrom-thread-144-0-0-0-0.2132317/
Hopefully you won't have to do any ACPI stuff.
While rEFInd can work on secure boot systems, it does not add secure boot to non-secure boot systems. Isn't a signed executable just a normal executable with some extra stuff? It should be loadable without secure boot?
The idea is to try 32 bit UEFI Windows until it stops working, then figure out why it stopped working, fix that and repeat. In the EFI stage, I suppose it may be possible to log what the Windows boot manager is trying to use, and if it's missing then decide whether it's necessary to add, and if so, then add it, and repeat. The log can be writen to a file until ExitBootServices is called. There is code (DumpUefiCalls) that does most of that.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hello,I have MacBook late 2006 with broken CD-ROM drive. So, I need some trick. Moreover, it has 32 bit EFI, what doesn't make my life simpler :(I've formatted USB drive with two partitions: EFI (fat32) and anotherone, where I've dd'ed a Windows installation ISO to. So, the filesystemis UDF there.I tried to use GRUB2 to boot Windows from the second partition in suchconfiguration. It fails on secure boot, which it doesn't support, as far as I've read somewhere.Is it yet possible to configure reFind to do the job? As far I'veunderstand now, the main problem is Shim, which is x64 only, right?
Thank you.
Windows UEFI is difficult on EFI 1.1 Macs. Probably imposible on EFI 1.1 32 bit Macs. You should be using legacy/BIOS Windows installation.
https://everymac.com/mac-answers/windows-on-mac-faq/
Did you use Boot Camp assistant to partition the drive? If you can't use Boot Camp to create the partition then iPartition.app can do it (but you may need to boot macOS from a different drive). Create the partition (Microsoft Basic Data, ExFAT), mark it as Visable in Windows. In Windows Installer you'll choose to erase the partition as NTFS (don't use Windows to make the partition).
Can 2006 MacBook boot legacy/BIOS from USB? If it can, then the way to make the USB is probably more complicated than using dd.
https://www.balena.io/etcher/
Or you might try a USB DVD ROM drive? I forget if that works or not on old Macs.
According to https://everymac.com/systems/apple/macbook/specs/macbook-core-2-duo-2.0-white-13-specs.html , the latest Windows supported is Windows 7 (32-bit). But maybe it can use later Windows versions https://www.reddit.com/r/mac/comments/frwue2/guide_how_to_install_windows_10_on_a_late_2006/
Even though the MacBook has a 32-bit EFI, the processor is still 64 bit.
For hackintoshes, there are boot loaders (e.g. Clover and OpenCore) that have a legacy/BIOS installation method that includes a UEFI implementation (Duet or OpenDuet) (that legacy type is not to be confused with the legacy in OCLP OpenCore Legacy Patcher). I wonder if that could be used to boot UEFI Windows? I've never tried it. They're meant for PCs to run macOS, so they are probably not suited for Macs to run Windows?
https://www.tonymacx86.com/threads/macos-big-sur-on-legacy-system.306824/
Anyway, it would be a strange setup: 32-bit EFI -> Boot Camp/CSM/Legacy/BIOS boot -> OpenCore/Clover Duet -> Duet UEFI -> Clover/OpenCore EFI boot loader -> Windows UEFI
There's probably going to be some hardware that doesn't work if it works at all?
What drive? Are you about USB stick? No, I used GParted to do it. Ubuntu 20.04 is installed now in the HDD partition, where Mac OS X was located. Yet I have two ntfs partitions, one of which is taken by Win7x64. All three were created by BootCamp, when I installed Windows on this book many years ago. But Windows boot sector was killed by Ubuntu installation. I was perfect noob, when I installed Ubuntu over Mac OS. Otherwise I'd make MBR backup at least :( So, now I need to launch Windows installer somehow, to repair it. At least I don't see any other way. I installed Win7 from DVD many years ago, when CD drive yet worked.
How to check it? I don't know. The only, what I know is that I've saved Ubuntu installer to USB stick (using Rufus on another Win7 computer) and inserted it into this Mac Book. The Boot Manager shows this stick among boot options, and I've installed Ubuntu x64 to HDD from USB without any troubles, though with a couple of tricks. Anyway the USB booting itself is definitely possible. I could describe the installation process more particularly, if it's interesting.
Could you explain it to the dumb, what is principal difference between USB stick and external USB CD/DVD drive? Does UEFI wok differently? Or does external drive work without UEFI?
Could you explain it to me, where 32 bit world comes into 64 bit one? BOOTIA32.EFI=>GRUBIA32.EFI both are 32 bit. But GRUB can start linux kernel, which is 64 bit, as I believe. If so, then what is the problem with Windows boot loader? It's 64 bit, AFAIU, so the problem is to launch it from the 32 bit GRUB / feFind. GRUB tries to do it, but it doesn't support signed executables, AFAICU. But reFind does. So, where is the principal trouble?
BIOS boot on Macs usually only works on the internal hard drive. That is the one that needs partititioning, either with Boot Camp assistant or iPartition.app or gdisk (but the other two might be simpler - they create a Hybrid MBR/GPT add the MBR boot code as well.
There's nothing really special in the MBR that can't just be recreated. The partitions point to GPT partitions. The code just loads code from the partition that is marked in tthe MBR as the active partition. The code that lis loaded is from the PBR (first blocks of the partition). On Windows, that loads a BOOTMGR. On Linux, if it was a legacy install, it would load a BIOS version of grub.
The script at https://gist.github.com/joevt/a99e3af71343d8242e0078ab4af39b6c will dump all the info of all your partitions and all the MBRs and PBRs so you can see how legacy BIOS boot is setup. Then you'll want to examine the file hierarchy on the EFI partitions to see how EFI boot is setup.
For USB booting - you are talking about Linux, which can work with EFI 1.1. Windows cannot. Therefore you USB Linux install was probably using EFI. EFI booting uses NVRAM variables. In linux, use the
efibootmgr
command to look at those. I suppose it would give an error if it wasn't booted with EFI? In macOS, thedumpallbootvars
will show the same info.I don't know what the difference is between USB DVD ROM drive and USB flash. Apple's Boot Camp / BIOS boot might support USB DVD ROM drive or it might not. One of those links I provided has instructions for using an Apple Super Drive for installing Windows which I suppose is the same as a USB DVD ROM drive?
32bit vs 64bit: You have a 64 bit processor. It can run 32 bit software or 64 bit software in an OS. EFI is like an OS. The code can be 32 bit or 64 bit. The type of data that is mostly effected by the difference is "pointers". A pointer is a value that points to memory. I suppose 32 bit EFI is limited to 32 bit pointers? The EFI loads a EFI boot loader (boot.efi on macOS) which loads the kernel. In macOS, the kernel can be 32 bit or 64 bit. There are methods for a 32 bit kernel to deal with more than 32 bits of memory. The 32 bit kernel can work with a 64 bit user space? Some macOS apps (they run in user space) are 32 bit and some are 64 bit. Recent versions of macOS don't run 32 bit apps anymore (since Catalina). Tiger and Leopard have a 32 bit kernel. Snow Leopard defaults to 32 bit kernel but can be set to use a 64 bit kernel. Lion has only 64 bit kernel. I might be mistaken about those. Anyway, my Mac Pro 2008 (64 bit EFI) can run everything from Tiger to Montery (I haven't gotten around to installing Big Sur/Montery yet).
Windows is not as flexible as Linux. Windows UEFI boot requires 64 bit UEFI and the version needs to be 2.x (later than the 1.1 that old Macs have). Maybe I'm wrong about 64 bit UEFI.
https://answers.microsoft.com/en-us/windows/forum/all/windows-10-32-bit-native-uefi-install-on/c72ff865-859a-43d7-b24c-5e726efba22a
https://social.technet.microsoft.com/Forums/en-US/9f34299b-bd2e-4cf5-a565-14edb6e9a031/how-to-install-windows-10-32-bit-in-uefi-mode?forum=win10itprosetup
In that case Windows may at least require 32 bit UEFI 2.x. The Windows 32 bit UEFI bootx64.efi -> bootwmgr.efi (or whaatever the 32 bit version is called) can then start 32 bit Windows. Does 32-bit Windows run 64-bit apps like macOS 32-bit kernel can?
For that to work work on 32 bit EFI 1.1, you'll need to write EFI 1.1 drivers that add missing UEFI 2.x EFI protocols and functions; for Boot Services, just the functions/protocols Windows requires up to when it calls ExitBootServices; then there's a couple things for Runtime Services to take care of. One job of Runtime Services is to take care of NVRAM. OpenCore/RefindPlus have a Runtime Services override function to stop Windows from writing certain Windows specific NVRAM variables which are large or numerous and therfore may hasten the destruction of the fragile NVRAM of MacPro4,1/MacPro5,1. https://forums.macrumors.com/threads/mp5-1-bootrom-thread-144-0-0-0-0.2132317/
Hopefully you won't have to do any ACPI stuff.
While rEFInd can work on secure boot systems, it does not add secure boot to non-secure boot systems. Isn't a signed executable just a normal executable with some extra stuff? It should be loadable without secure boot?
The idea is to try 32 bit UEFI Windows until it stops working, then figure out why it stopped working, fix that and repeat. In the EFI stage, I suppose it may be possible to log what the Windows boot manager is trying to use, and if it's missing then decide whether it's necessary to add, and if so, then add it, and repeat. The log can be writen to a file until ExitBootServices is called. There is code (DumpUefiCalls) that does most of that.