Monday 19 May 2014

MPI_Clover_Pack_Lite_005 (bugfix)

If you are using two images at the same time, please update to Clover Pack 005 (menu.lst has changed)

There was a problem if using two image files at the same time.

For example:

You can quickly add multiple NTFS image partitions of Windows x64 ISOs   (useful for >4Gb install.wim AIO ISOs) to E2B for UEFI or MBR booting as follows:

1. Create a WINSTUB64 empty folder
2. Use this empty folder as the Source folder to create a FAT32 image partition using MPI  (e.g. WINSTUB64.imgPTN). e.g. drag-and-drop the empty folder onto your MPI AUTO FAT32 shortcut.

Now for each Win7/8 64-bit ISO that you have...

1. Use MPI to create an NTFS image from the ISO - e.g. drag-and-drop the ISO file onto your MPI AUTO NTFS shortcut.

To add these files to your E2B drive

1. Copy the large NTFS image file to \_ISO\MAINMENU (or \_ISO\WIN or \_ISO\AUTO)
2. Remove the file extension - the name must not have a . in it - e.g. change Win8.1.imgPTN to Win8_1
3. Copy the WINSTUB64.imgPTN file to the same E2B folder
4. Change the file name and file extension to .imgPTNLBAa  - e.g. Win8_1.imgPTNLBAa
5. (optional) add a .txt file - e.g. Win8_1.txt with a 'title' entry

e.g.
\_ISO\WIN\Win8_1.imgPTNLBAa      - contains CSM and Clover files
\_ISO\WIN\Win8_1                           - contains image of Win x64 ISO installer
\_ISO\WIN\Win8_1.txt                      - (optional) replacement title

When you boot from the .imgPTNLBAa file to the CSM Menu, it will have a Clover entry and a '3 Boot Windows on 3rd partition (MBR-mode) entry. The '1 BOOT  (MBR mode)' menu entry will not work unless you have also included bootable files in the WINSTUB image.


If you wish, you can edit the \menu.lst file to remove the non-working menu 1 entry by deleting the 20 or so lines below the # --- GENERIC BOOT MENU --- line.

You might also like to change the menu title to whatever is appropriate (e.g. set PAYLOAD=KonBoot and Win8.1 x64 Install).

Instead of the WINSTUB64 file having no payload, you could use any non-Windows Vista/7/8 payload (e.g. Rufus Windows XP flash drive image or KonBoot 2.4). Then the menu  1 BOOT option would boot to Xp install or KonBoot and you could also UEFI-boot to either KonBoot or Win7/8 install via the Clover GUI.

Note that because the Win7/8 install is on an NTFS partition, you cannot boot to it via rebooting from your UEFI system's firmware as that will only 'see' the FAT32 partition.




Why can't I boot from the USB 3.0 ports on my PCI add-in card?

I was asked this question today via email from Guptila. I thought I would share my reply here too.

The short answer is - you cannot boot via the BIOS on any device that is an 'add-in' device, unless it is a PCI card that also contains an option ROM.

BIOS Code

Think about how the BIOS works...

The BIOS knows that it's mainboard contains a certain chipset (it was designed for that chipset).
The BIOS contains the code required to access the registers on that chipset.
The BIOS has to have code which allow the operator to boot from devices connected to the chipset.
If the board has an ABC chipset, then the BIOS will contain code to access an ABC chipset with ABC-type USB registers.

Now you connect a PCI card containing a different (e.g. Renesas) chip. The BIOS will see a XYZ chip connected to the PCI Bus when you switch on the system, but the BIOS does not contain any code to access this XYZ chip - it does not even 'know' that the chip has USB 3.0 ports connected to it. In fact, when the BIOS code was written by the manufacturer, USB 3.0 chips probably did not even exist!

It would be the same even if you connected a USB 2.0 Renesas add-in card - the BIOS only contains code to boot from the chipset on the mainboard, it does not contain code for the 1001 different cards that could possibly be connected to the PCI bus.

So you cannot expect your system to boot from an add-in card... or can you...


So how can you add a SATA Add-in card to a system, and how come it can boot from SATA drives then?
You may well ask this question!

These add-in cards contain an option ROM - a chip that contains extra BIOS code. VGA (graphics) cards also contain these option ROMs so that you can see the BIOS text and setup menu etc when you switch on the computer. 

When the computer is switched on, it scans for Option ROMs and adds the code in the Option ROM to it's own BIOS code. In this way, the BIOS 'knows' about the extra chips that are now in the system.

Unfortunately, I am not aware of any USB 3.0 add-in cards which have their own Option ROMs that allow you to boot from their USB 3.0 ports. There are products such as 
which contain an Option ROM, but this only allows you to boot from the SATA devices and not from the USB 3.0 devices.

You have these options available to you if you have an add-in USB 3.0 card:

1. Get a mainboard\system that has a USB 3,0 chipset and ports
2. Plug your USB 3 devices into your systems USB 2.0 mainboard ports
3. Use a Virtual Machine and connect your USB drive to the add-in card's USB 3.0 port - however anything you boot to will see the USB drive as a non-USB hard disk and not a USB 3.0 drive. It does mean that most things will boot at USB 3.0 speeds in the VM though (see RMPrepUSB - Tutorial 4 and the video).


Also bear in mind that many bootable OS's do not contain support for USB 3.0 chips, so even if you could boot from a USB 3.0 port, once you boot to an OS (e.g. plop, Vista\Win7 and many linux distros) the boot will fail because it cannot access the USB drive on a USB 3.0 port because the OS does not contain any USB 3.0 drivers.

Sunday 18 May 2014

MPI_Clover_Tool_Pack 004 now available

I have managed to get the Clover ntfs driver to automatically load and to get the GUI to show and correctly UEFI-boot from an NTFS partition.

To add drivers which will automatically load on a 64-bit system, just add them to the \EFI\CLOVER\drivers64 folder - so I just added the ntfs.efi file!

Even though I did this, there was no GUI icon for the NTFS efi boot file. It turns out that the default \EFI\CLOVER\config.plist file has entries to hide \EFI\BOOT\bootx64.efi files! I guess this is because the ISO contained this file which was the Clover UEFI boot file (i.e. if you booted the CD in UEFI mode, it used this to boot to Clover). Anyway, I edited the 'Hide' list as below:

<key>Hide</key>
<array>
<string>Windows</string>
<string>XXXBOOTX64.EFI</string>
<string>cdboot.efi</string>
<string>bootmgr.efi</string>
<string>bootmgfw.efi</string>
</array>

I just put XXX in front of the BOOTX64.EFI entry and added a few others that are not relevant. If you need the bootmgr.efi and bootmgrfw.efi options (e.g. to boot to an installed UEFI OS), just delete these lines from the file (or put XXX in front of them).

Now we can boot from Clover to a FAT32 or NTFS volume with no scripts or command lines to worry about!

grub4dos, Clover, UEFI-booting and NTFS - Tutorial 122

Tutorial 122 on www.rmprepusb.com

This new Tutorial allows you to have 64-bit Windows Install files (e.g. large All-In-One) on an NTFS partition and boot to it using Clover via a grub4dos menu.

Partition 1 = FAT32 grub4dos files, etc.
Partition 2 = NTFS containing Win7/8 AIO 64-bit installer files

Partition 1 MUST NOT contain a \EFI\BOOT\bootx64.efi file.
Partition 2 MUST contain both  \EFI\BOOT\bootx64.efi and \Sources\Setup.exe.

When you boot to grub4dos, you can choose to boot to whatever payload you have in the FAT32 partition (e.g. ISOs, Hirens, etc.) as usual.

To boot to the Win7/8 64-bit NTFS partition, run the Clover grub4dos option and then choose the EFI Shell 64-bit icon to get to the EFI shell. Then type WIN to boot to the NTFS \EFI\BOOT\bootx64.efi UEFI boot file to run Windows 64-bit  Setup in UEFI mode.

What happens is that when you boot to the UEFI shell from Clover, it runs startup.nsh which loads an NTFS driver. When you type WIN it runs win.nsh which looks for the Windows installer files on the NTFS volume and then boots to the \EFI\BOOT\bootx64.efi file.

There will also be a menu entry to boot from the NTFS Windows installer in MBR\CSM mode.

STARTUP.NSH

# UEFI Shell script to load NTFS driver and map new drives
echo -OFF
FOR %a IN fs0 fs1 fs2 fs3 fs4 fs5 
If exist %a:\Clover\NTFS.efi then
load %a:\Clover\NTFS.efi
endif
endFor
cls 1
echo " "
echo "TYPE WIN - to UEFI-boot from the volume containing \autorun.inf"
echo " "
# map the newly discovered drives (this script file path will be lost!)
map -r


WIN.NSH

@echo -OFF
FOR %b IN fs0 fs1 fs2 fs3 fs4 fs5 fs6 fs7 fs8 fs9 fs10
cd %b:
%b:
IF exist \sources\setup.exe then
goto act
endIF
endFOR

:err
cls 4
ECHO "Unable to locate \EFI\BOOT\bootx64.efi or \Sources\Setup.exe"
ECHO "Please check if windows installer has a EFI\BOOT\BootX64.efi"
goto xx

:act
IF NOT EXIST \EFI\BOOT\bootx64.efi THEN
goto err
ENDIF

cls 2
echo " "
echo "Found \EFI\BOOT\bootx64.efi"
echo "Press ENTER to UEFI boot or q to Quit"
echo " "
pause
cd efi\boot
bootx64.efi

:xx

For details of how to add Clover to your existing grub4dos menu - see Tutorial 122 here.

The MPI_Clover_Pack_Lite_003.zip download (Alternate Download Area) also includes these files.



Friday 16 May 2014

MPI_Clover_Pack_002 for Easy2Boot now available

The next version of the Clover Pack is now available. The full 4.3MB Version 002 is available in the Alternate Download area here.
There is also a 1.3MB 'Lite' version which has some unneeded 32-bit and other files removed and uses a smaller 'theme' folder. I may add this Lite version as standard into the next MPI Toolkit Pack - so please let me know if you try it and find any problems!

By adding the files from the Clover Pack to your MakePartImage\CUSTOM folder, you will see an extra menu item on all FAT32 images you make, but only if they also contain a 64-bit default UEFI boot file.

Note: If you already use the CUSTOM folder for your own files, instead of adding the files to the CUSTOM folder under MakePartImage, you can add them to the csm folder (if you have a \CUSTOM\menu.lst file you will need to modify it to add in the new Clover menu entry though).

This means that you can make a Windows 7/8 install image and boot directly from MBR mode to Windows Setup in UEFI mode (without needing to reboot the PC and choose the UEFI: xxx option from the Boot Selection Menu). Cool eh?

Look at the ReadMe in the Clover Pack download to see how to add the files to MakePartImage. No new E2B version update is required. Just make your .imgPTN image file as usual - i.e.

1. Drag-and-Drop your Windows 7/8 64-bit ISO onto the MakePartImage shortcut you have made (or run it from an Admin command line and use the default values)
2. When prompted about EI.CFG, choose whichever option is appropriate for your usage
3. Rename the file with a .imgPTNLBAa file extension
4. Copy the file to your E2B drive (e.g. \_ISO\WIN folder)
5. Run WinContig  (RMPrepUSB - Ctrl+F2)

Now when you boot (Note: you must use a USB 2.0 port for Clover, not USB 3.0) you can switch to the new image and you should see a menu similar to this:

Note the Clover menu entry!

When you select this you will see the Clover Boot Selection GUI screen:

Note that the image has a volume label of LIVE as set by MakePartImage
This is the 'full-fat' version (black_green theme).

This is the 'Lite' version GUI (os_box theme)

Pick the 'Boot UEFI internal from xxxxx' to boot to Windows Setup in UEFI mode.

Note: Clover refers to MBR mode as 'EFI' (just to confuse you!)

You can change the volume label manually, so that it shows up as a Windows Installer image (e.g. Win8Inst) or specify the Volume label you want from the command line when you make the image.


Boot directly from grub4dos to UEFI using Clover!

Clover is a later revision of Tianocore. Both are 'firmware in RAM' replacements for UEFI firmware.
It allows you to boot in MBR\CSM mode and then run Clover which acts as a 'pseudo-UEFI boot manager', allowing you to boot to a UEFI OS from an MBR\CSM boot.

I would like to add this to the CSM menu of Easy2Boot so that users would not have to reboot the system and choose the UEFI: xxxxxx  boot option to boot from the E2B drive (when using .imgPTN image files).

First, I made a FAT32 USB Flash drive using BootDiskUtility.exe. This is a Windows tool that makes a Clover-bootable USB drive for you. Having done this, I found it would not boot under RMPrepUSB's QEMU (which doesn't support 64-bitness and just rebooted) or VirtualBox (text mode menu only) but did boot on a real system to the full GUI menu (see piccy below) - but only on a USB 2.0 port, Clover does not load on my Z87's USB 3.0 ports.

When is EFI not EFI?

Another important (and confusing!) point to note is that 'EFI booting' means MBR booting in 'Clover-speak' and UEFI booting means UEFI booting. If you see a Clover menu option to EFI-boot from a drive - it means MBR\CSM-boot!

This is the 'expected' full-GUI Clover Menu - select the UEFI option for UEFI booting as shown.

This is the text-mode screen I got!

Under VBox, I only got the 'text-mode' screen after making a USB Flash drive using BootDiskUtility.exe to make the USB drive. However, if I ran the USB drive on a real system, I got the correct GUI menu.

I later found that by pressing the 7 key after the first 2 seconds when booting from VBox, I managed to get the correct GUI menu!

To cut a long story short (essential data about Clover is hard to find!), here is how the Clover boot-chain works...

Master Boot Record (MBR)

First in the boot chain, we have the MBR. This is a normal MBR with a partition table, but the code in it seems to be 'special' (see PBR below for why I think this).

The MBR code can be found in a selection of boot0xxx files. You need to replace the boot code in your USB drive's MBR with the boot code from one of these files (but not the partition table).

The MBR code seems to look for and boot a Clover PBR. I found these files for the MBR code:

boot0af - looks for the active partition PBR
boot0ss - 'scan-signature' for AF type - MAC OS extended - seems to work best - no Active ptn needed.
boot0md - multiple drives - searches various drives for an HFS+/MAC OS extended partition - it seems to need the partition to be flagged as Active though!

see here for more (unclear) details! boot0ss still seems to boot from a FAT32 partition the best though!

Partition Boot Record

Moving on to the PBR - this code also seems 'special' in that we cannot just use chainloader ()+1 to boot from it in grub4dos. It seems we MUST go from the Clover MBR code to the Clover PBR code. Therefore both MBR code and PBR code are inter-dependent.

Again, various different Clover PBR code versions are available, these are prefixed as boot1xxx - the PBR code must be patched from byte 3 to byte 86 decimal. In the files produced by the BootDiskUtility, I had these files:

boot1f32 - understands the FAT32 filesystem
boot1f32alt - as above but waits for a key press for 2 seconds
boot1h - understands the HFS+ filesystem for MACs
boot1h2 - as above but waits 2 seconds for a key press

I used boot1f32alt for my experiments. See here for more PBR details.

The next stage in the boot chain is the file that is loaded by the PBR code. By default, this is a file in the root and is called boot.
  • boot - (default) Clover, recent or testing version - rumoured to be the same as boot6 in released versions
  • boot2 - Chameleon
  • boot3 - Clover 32-bit, tested and working version
  • boot6 - Clover 64-bit, tested and working version
  • boot7 - Clover 64-bit with BiosBlockIO driver that works with any controller supported by the BIOS.
Now, here we have a FUNDAMENTAL FLAW (did you spot it?) - the default boot file is boot but Windows uses a folder called boot to hold it's boot files - we cannot have both a file and a folder with the same name on a FAT32 partition! Great thinking guys!

So, assuming I must keep the \boot Windows folder, I had to press 6 or 7 on a real system  to get it to boot to Clover. Eventually I found a way around this though, the PBR code had an ASCII string of
   BOOT<space><space><space> 
near the beginning of the code. I then found that if I modified this to
   BOOT7<space><space>  
it loaded the \boot7 file automatically! I am guessing that when a user presses 7 manually, it just adds the ASCII code for 7 to the end of the 'BOOT' string in memory, and then tries to load that file.

More Files!

Once the \boot(n) code runs, it loads up the rest of Clover from the \EFI\CLOVER folder starting off with
CloverIA32.efi or CloverX64.efi or CloverGUI. Note how these files have the .efi file extension but actually run in MBR mode, whereas normal files such as Microsoft bootx64.efi and bootia32.efi files have the same file extension but run in UEFI mode! Confusing huh?

It then accesses more files under the \EFI\CLOVER folder - see here for more details.

Putting it all together

So after all this - here is my boot chain that works for 64-bit UEFI Windows 8 booting from a single FAT32 partition:

MBR (using boot0md code) ->  PBR (using modified boot1f32alt code) -> \boot7 -> \EFI\CLOVER\CloverX64.efi  ->  Clover menu - \EFI\boot\bootx64.efi ---> Windows UEFI boot.

However, I found that if I chainloaded to /boot0md or /boot0ss in grub4dos, as long as the PBR  had the Clover code in it, it would boot (the md version also needed the partition to be Active too). This meant I can boot to grub4dos in MBR mode to the grub4dos menu and then, from that menu, run Clover - at last!

Grub4dos

So here is my current grub4dos menu for booting directly to UEFI via Clover from grub4dos:
Note it is for FAT32 only and has not been tested on linux, only Windows 8.1 x64 so far.

iftitle [cat --locate="FAT32" --length=10 --skip=0x50 ()+1 > nul] Run Clover UEFI Boot Menu\n Run this if you wish to use Clover to UEFI boot
set CL=0
## boot7 is default boot file
cat --locate="BOOT7" --length=10 --skip=0x58 ()+1 > nul && set /a CL=%CL%+1 > nul
if "%CL%"=="1" echo Information: Clover is already installed to the PBR
## configfile /menu.lst
echo ffffffffff > (md)0x350+1
dd if=(hd0,0)+1 of=(md)0x350+1 > nul
dd if=()/clover/boot1f32alt7 of=(md)0x350+1 skip=87 seek=87 bs=1 > nul
dd if=()/clover/boot1f32alt7 of=(md)0x350+1 count=3 bs=1 > nul
#cat --hex (md)0x350+1 && pause 
if not "%CL%"=="1" cat --locate="SYSLINUX" --length=10 --skip=0x2 ()+1 > nul && pause PROBLEM: SYSLINUX PBR DETECTED - Cannot install Clover to PBR... && configfile /menu.lst
if not "%CL%"=="1" dd if=(md)0x350+1 of=(hd0,0)+1 > nul && pause --wait=2 PBR updated with Clover boot code
chainloader /clover/boot0ss || chainloader /clover/boot0md || chainloader /clover/boot0af

# User can press 2 for 3 for 32-bit UEFI, 6 for 64-bit UEFI or 1 for Chameleon - within 3 seconds
# boot0md gives a boot0 message and is slower - boot0ss is silent with no message

It needs a bit more work and tidying up.

boot1f32alt7 is the modified PBR 512-byte file which will load \boot7 instead of \boot.
The grub4dos menu code works by permanently installing the Clover PBR code into the PBR (it must be FAT32 and it must not have syslinux in the PBR as I assume that if syslinux is in the PBR, it needs it in order to boot to linux - overwriting it would prevent it from booting via syslinux in MBR mode!)
I also moved the boot0xx and boot1xx files to a \Clover folder to keep it tidier.
The user can still press 2, 3 6 or 7 to boot to \boot2, \boot3, \boot6 or \boot7 as these are (currently) still in the root of the FAT32 partition (Edit: in Clover_Pack 002 only boot6 and boot7 are present!).

It would be nice to be able to run syslinux in MBR-boot mode (see below for how I got this to work too).

I now need to test this out on different platforms and different scenarios - hey ho...

A good source of info on Clover is here.

E2B .imgPTN images - boot directly from the CSM menu to UEFI

If you have booted in MBR mode to Easy2Boot, you can select an image partition file (.imgPTN family) and switch partitions to it immediately. However, now you have to reboot the system and select the UEFI firmware boot option for the E2B USB drive.

This is inconvenient and takes time (especially if you are on a server).

I have now added an experimental UEFI Clover boot option to the MakePartImage Tool Pack. Extra menu entries have been added to the CSM menu.lst file to boot Clover ISO files.

You will need MPI v030 and the MPI_Clover_Pack.zip files, available from the EasyBoot download page.

If you add the Clover ISO file(s) to the MakePartImage\Custom\e2b folder before you make your image file using MakePartImage, you will now see one or two extra menu options:


When you select this option it will load Clover. You then need to select the Boot Maintenance Manager option:

and then the Boot from File option:
After that you select the partition and then you need to select the .efi boot file (which will normally be \EFI\boot\bootx64.efi, or bootia32.efi for 32-bit UEFI payloads). It should then boot via UEFI to the efi file on the USB drive. In this way you can directly boot to say, a Windows 8 install image, in UEFI mode without needing to reboot the system and pick the UEFI: USB drive boot menu option.

As you can see, using the Clover menu to boot from, is not exactly convenient, which is why it is not included in the default MPI build. 

Clover is not included as standard because:
1. It doesn't work on all systems - e.g. Z87 systems.
2. It takes up space in the image (and will be in every image you create)
3. You have to go through several steps in the Clover menu to select and boot from an EFI file
4. It dramatically increased the size of the MPI Tool Kit download

This feature is still a work in progress. There are many drivers and other files inside the clover iso files which cannot be accessed via the Clover menu but they could be accessed if they were extracted to the image. I could also reduce the size of the ISO by removing unnecessary files, etc.  As I have only just tried Clover today, I have a lot more learning and experimenting to do!

If you have any suggestions and/or are experienced with Clover, please contact me. Ideally, I would like to be able to boot to the Windows efi files directly from the grub4dos menu...




Wednesday 14 May 2014

E2B - MBR and UEFI booting of large All-In-One Windows Installers

For details about booting to Clover from grub4dos see here.

I was asked recently if it was possible to multiboot large >4GB All-in-One Windows installer ISOs using Easy2Boot in both MBR and UEFI mode.

After some work, I can now answer 'Yes - as long as you use a USB Hard disk for E2B'! - or a USB Flash drive of the 'Fixed Disk' type.

Note: Simone in the Comments below suggests splitting the install.wim file. If this is done with Win 8, you will need to add a special ei.cfg file too, in order to prevent a Microsoft 'licence' error (read the Comments for this blog post for details).

It has always been possible to directly use a AIO ISO on an NTFS-formatted E2B drive for normal MBR-type installs; the problem comes with UEFI installs. UEFI firmware can only boot from FAT filesystems and FAT32 has a 4GB file size limitation. If the Install.wim file is larger than 4GB then we have to place it on an NTFS filesystem.

The new procedure to work around this issue uses two partitions.

Partition 1 - FAT32 - contains all Windows Install files except the Install.wim file
Partition 2 - NTFS  - contains the large \sources\Install.wim file.

You must first make both partition images using MakePartImage. The partition 1 FAT32 image file should be given a filename extension of .imgPTNLBAa. The partition 2 NTFS image file should be given an identical filename but with no file extension at all - e.g.

\_ISO\WIN\Win8AIO.imgPTNLBAa
\_ISO\WIN\Win8AIO

Only the Win8AIO.imgPTNLBAa file will be listed in the Windows menu, but when it is run, the Win8AIO file will be mapped as (hd0,2) and the Win8AIO.imgPTNLBAa file will be mapped as (hd0,0).

In this way, you can boot via MBR or UEFI and install Windows even from an install.wim file larger than 4GB. The latest E2B versions include this feature.

Full step-by-step instructions on how to make the image files are here (scroll down to 'How to add Windows 7/8 installers with >4GB install.wim files').

Some UEFI systems may not like seeing two partitions - please let me know if you try this and what systems you tried it on!

Easy2Boot v1.39 - small bugfix

If you had a FAT32 E2B USB drive and you created a folder with a .  (dot) in the folder name, E2B would give an error during file enumeration. This is now fixed. Thanks to Chase for reporting it!

MPI Tool Pack also has been updated to v1.29. Small fixes for some syslinux ISOs.