This guide will discuss the process of getting OS X Mavericks to run on Dell Vostro 3450 & Dell Inspiron 14R (N4110) using UEFI Clover, no other discussions please.
I should start by saying that I'm not responsible for any bricks that may happen if you follow this guide and I'm not saying I will be updating this with every bit of changes I do to my personal system after every minor OSX upgrade. Though, with this kind of setup you shouldn't have to lift a finger after installing OSX updates...
This is your goal:
I'm sure if you ended up here you probably know the majority of limitation that Phoenix SecureCore Tiano firmware applies to this system, but I'll mention them none the less:
- Can't boot GPT formatted disk with legacy bootloader such as XPC, Chameleon, Chi*mera
- Can't boot UEFI OS or bootloader as UEFI is locked down from the factory
- Cardreader is not bootable
- Secondary disk installed in place of DVD drive is not bootable either
- BIOS doesn't let you disabled Turbo Boost or Hyper Threading
So, let's get to the point, shall we?
1. Flashing a UEFI-capable modified BIOS
BIOS images are meant only for Dell Vostro 3450 and Inspiron 14R (both Intel model and AMD Switchable Graphics models) and no other! Vostro 3350 and 3550 use Inyde H2O BIOS, not SecureCore Tiano!
Modified BIOS image for Vostro 3450 includes the following changes:
- Unlocked write access to MSR 0xE2 - credits to RevoGirl;
- Unlocked Advanced Setup options (includes UEFI Boot option) - credits to jkbuha, HairyCube and myself;
- CPUID 206A7h microcode updated to V28 - credits to jkbuka (again) and Florin9doi;
- Video BIOS for Intel updated from 2098 to 2158 with GOP protocol support (bring 1366x768 resolution to GUI) - credits to Ash;
- BIOS DSDT modified to fix Dell's ACPI syntax screw-up while checking for MBT (media buttons) - credits for PhoenixTool fix in 2.14 to AndyP.
Compared to Vostro's, modified BIOS for Inspiron 14R has stock CPU microcode as well as stock DSDT, ACPI syntax error is fixed with a Clover patch. The rest is the same.
In order to flash the modified BIOS image you have to obtain the first.
- Vostro 3450 A13 custom BIOS: LINK
- Inspiron 14R A12 custom BIOS: LINK
When that's done unpack the files under Windows and simply run the bat file called flash.bat, WinFlash will open saying the capsule is about to be loaded in memory.. agree with that and agree once more to reboot. The system will reboot into UEFI SHELL Flasher and will flash your BIOS. You might not want to do that at night at your campus because your roomies won't be happy with obnoxiously loud beeps the machine will produce while flashing.
When you are done flashing go to your BIOS Setup and navigate to Advanced tab, go to Boot Configuration section and enable UEFI Boot.
You can probably set Function Key Behavior to Multimedia Keys to mimic MacBook keyboard (no need to press Fn when pressing buttons marked orange).
2. How to install OSX and add Clover as F12 boot entry
In case you want to boot Legacy Windows from primary HDD (because let's face it, Dell made it pretty hard to use UEFI Windows with all the freezing issues caused by their proprietary software while having a UEFI installation) and you have a caddy in place of your DVD drive with a disk you want to dedicate to booting OSX simply put you can't do that by default BIOS means as caddy is not bootable. You can only make it bootable as a UEFI medium and there is why this guide was even put together. Also I should mention that booting Legacy Windows from UEFI Clover is a big no go with Tiano firmware, so don't expect that. The only way to access Legacy Windows is to either use F12 and choosing Hard Disk or exiting Clover.
Now go ahead and download the rest of the files needed for this guide:
Vostro 3450 files: LINK
Inspiron 14R files: LINK
The archive includes the following set of files that will make you achieve your goal.
Use Vostro's files from folders numbered 1, 4 and 5 as a base for Inspiron 14R post install setup.
2.1. You have to have a flash drive prepped with UEFI Clover (no need to prepare it in some weird way, just copy the files to it), of version 2199 and up (this set of files includes r2222). This is the revision with my changes to NVRAM Emulation merged in, so that you don't need to remove EmuVairbale while you add boot entry. Just format the flashdrive to FAT32 and put the contents of "2. UEFI Clover USB" onto it. Here ACPI, kexts and config.plist have been put inside OEM folder 0YW3P2 which is the board identifier for Vostro 3450 Intel-only model. If your model has AMD SG, then put these folders and file inside CLOVER folder to boot.
2.2. You need a second flash drive as well as an access to a genuine Apple computer (or a VM) that is capable of accessing Mac AppStore in order to download the free Mavericks installation app. Then, using Lion Disk Maker application you have to make a bootable OSX drive. When that's done use UEFI Clover usb drive to boot your OSX medium (press Space in Clover, select Boot with Injected kexts) and partition your HDD in the DVD caddy as you desire, but make sure partition map is GPT. You can then install OSX to that target disk while you are at it. The installation process is usually 2 stage process and you will be required to perform the Space trick twice to finish the installation successfully.
2.3. When the above is done start UEFI Clover from usb drive again, press F3 and start the Shell entry that has appeared. While in shell you first need to determine what is the number of file system of the EFI System Partition on your DVD caddy drive. Perform the command:
The usb flash drive file system will have USB mentioned and it's usually fs0 when booting from it, the ESP on the GPT disk will be marked as GPT,1 and is usually either fs2 or fs3. Let's assume fs0 ended up as usb drive and fs3 is ESP. You need to copy the contens of your usb drive's EFI folder to the EFI System Partiton on the target disk. In order to do that just:
fs0: fs3: ls cp -r fs0:\EFI fs3:\
This will copy the EFI folder from usb to your ESP. But we don't want the BOOT folder as it won't ever be bootable with HDD sitting in DVD caddy, so we get rid of that:
fs3: cd \EFI rm -r BOOT
Then, to add custom Clover boot entry you need to do the following:
bcfg boot add 3 fs3:\EFI\CLOVER\CLOVERX64.efi "Clover"
We used 3 here as by default in BIOS 0 is diagnostics, 1 is Bios Setup and 2 is Boot Manager. Now, go to your BIOS Setup and just for emergency set the boot order as follows:
- USB - CD/DVD Drive - Clover - Hard Disk - eSata - Network - Removable Disk
Having this boot order configuration first off will be as a precaution if something ever happens and you can't start the laptop normally, so USB as the first device will allow you to boot a crisis bios recovery PFlash.efi with a BIOS capsule. Also, this kind of boot order will allow you to boot legacy Windows installed on your primary HDD by just exitting Clover, so there won't be a need to go to boot menu (F12) to select HDD when you need to boot Windows.
You can add Shell binary to boot menu the same way, you just have to point it to the other EFI application:
bcfg boot add 9 fs3:\EFI\CLOVER\tools\Shell64U.efi "Shell"
3. Post install information and files
- HWMonitor is an app by kozlek (from HWSensors package) to be used for monitoring various temperature sensors, fan speed, power consumption etc. This app requires you to have ACPISensors and CPUSensor plugins installed as well as additional SSDT table meant for monitoring EC sensors. If everything was set up properly you should be seeing this:
- Kext Utility - application coded by cVaD, the sole purpose of this is to install kernel extensions into the system. Just drag a kext onto the application icon and wait for it to finish.
- Mounter and easy app based on a shell script that is able to mount and unmount your EFI System Partition without the need of using terminal or disk utility.
- unpkg - a simple app designed to unpack Mac package files (.pkg extension) into the catalog hierarchy they were suppose to be installed to.
Clover isnow found on your EFI System Partition in /EFI/CLOVER/
You can mount the ESP by using the Mounter app from the Application folders included in this set of files.
* CLOVERX64.efi and BOOT/BOOTX64.efi are the same file. BOOT catalog is only needed when booting from USB and if you followed the steps outlined in stage 2 of this guide you wouldn't have it on your ESP. To update Clover no need to run the installer all the time. Just use Mounter app and mount the ESP, download the copy of Clover installer package and use unpkg app to extract it. Update the CLOVERX64.efi binary by just swapping the old one with the new one. It's that easy! Then use the Mounter app again to unmount the ESP.
* config.plist - probably the most needed file for having a proper configuration.
More info on configuring Clover can be found in the WIKI
- DefaultVolume - change this to your desired name in order to make it boot that given disk when after timeout
- Item 0: configurePM BT, this patch is required to prevent 30 sec delay that BT kernel extensions stalls for waiting for notification from BT controller. As firmware gets reuploaded across sleep this notification is never received and bluetooth remains non functional for 30 second after boot or wake.
- Item 1: HDMI+VGA+Brightness - title says it all. This patch is fixing the low brightness issue at boot, also changes the connector layout setting @1 as VGA, @2 as HDMI and removing @3 completely. This allows your VGA port to work (no hot plug, you have to cold boot with monitor attached, only then hot plug works during an active session) and HDMI audio will work with that too!
- Item 2: FL1009 XHCI Sleep Code - if your laptop is produced in Early 2012 chances are it won't have NEC USB3.0 controller, but a Fresco Logic FL1009 chip rather. This chips works out of the box with AppleUSBXHCI kext starting from 10.8.2, with one minor hiccup - the controller won't work after sleep. This patch disabled controller sleep and allows it to resume after sleep properly.
- Item 3: xml.zlib -> aml.zlib - a patch intended to trick AppleHDA into thinking it needs to read Resources with extension .aml.zlib and not xml.zlib. What this allows you to do is place your own layout and platform resources inside AppleHDA and they won't be updated...; ever! Keep reading about AppleHDA patches.
- Item 4: AD1984 -> ALC269 Codec - patch Analog Devices AD1984B with ALC269 device ID.
- Item 5: Zero our jne check for 10.7 and up - what this does is makes sure when comparing ALC884 against ALC269 the checks doesn't get sent to ACL885 spot, but instead just proceeds to match at offset where AD1984 used to be.
- BoardSerialNumber - make sure to set it so any 17 characters you desire. Make a note on this number because you will need to use it once more later.
- SerialNumber - define your Mac serial number here, its a 12 character string that you can get from Champlist, Chameleon Wizard or similar software...; or make up one yourself knowing what sections of serial number mean. Make sure your number ends with DH2L as it defined MacBookPro8,1 device.
- CustomEDID: this is the same EDID string we will use later as our Display Override. More on what it is and why it's needed will come below.
- Item 0: Remove IRQ TMR-RTC(Length) - removed IRQs from TMR and RTC devices and adjust RTC length from 08 to 02.
- Item 1: BAT0 Override - override the entire battery device merging split 16 bit register back with B1B2 method
- Item 2: ECRAM 16to8 - plits EC RAM register from 16 bit down to 2x 8 bit registers for new AppleACPIPlatform (Lion, Mountain Lion, Mavericks).
- Item 3: B1B2-PM30-PTS - adds B1B2 methods used for battery, adds Shutdown fix by adjusting _PTS methods and adding a write command to PM+30 bit 4 SLPE_SMI_EN register.
- Item 4: AMW0 Override - adds "DELLWMI" instead of Zero in _UID for AMW0 device, this is needed for DellWMIController to attach.
- Item 5: Disable A_CC - simply put, ST Micro Accelerometer requires a special driver to function and there is no such driver in OSX, so we disable it.
- Item 6: Deactivate FOWM() - in UEFI boot mode pressing Fn+F2 to toggle radio interfaces causes the machine to lock up, in order to prevent this methods FOWM needs to be wiped clean (no action taken when method is called).
- Item 7: Windows 2001 -> Darwin - patches _INI, replacing Windows XP with Darwin.. this is needed for HPET to work as well as a series of other OSYS check to pass properly.
- Item 8: HPET 4xIRQ - allocates 4 IRQs to HPET timer preventing it from stealing IRQs from EHCI or HDEF.
- Item 9 to Item 12 just rename ACPI devices accordingly. Item 12 is particularly crucial as AGPM won't work without this patch.
- MLB: put the same 17 character number here that you used in BoardSerialNumber
- ROM: what this is your network card MAC address without colons, so jut get it from System Preferences > Network > Advanced > Hardware
- SSDT-1.aml - PollDevc an ACPI tabled meant for use in conjuection with later versions of kozlek's ACPI Sensors. Additionally one can have an ACPI table that can handle fan control (partially). More on that on my github.
- SSDT-2.aml - CpuPm is essentially a table from MacBookPro8,1... it just happened to have same kind of CPU (same base frequency, same TDP), I just ditched turbo states and set APSN (additional power state number) to zero.
- SSDT-3.aml - SsdtIGPU basically an ACPI table with all kinds of property injection as well as device injection that is required for proper OSX support. Has to be used in conjection with my Clover's DSDT patches.
As you can probably tell there is no pre-patched DSDT for this laptop, everything is done through custom SSDT tables and on-the-fly patches. This allows both laptops (Intel and AMD models) to use same patch set. Additional patches for AMD model are required though, one must disable AMD SG and add LVDS panel related injections to make the laptop wake with working display and not the black screen.
- SLIC.aml - genuine Dell SLIC table pulled from Vostro BIOS, has to be present if booting UEFI installation of Windows 7 x64 to preserv Windows OEM activation.
- EmuVariableUefi-64.efi this is the driver that is required to store, preserve and emulate NVRAM for runtime services support on this Vostro laptop. Dell has originally locked down the UEFI boot option as it has had some problems with it. The sympthom of missing this driver is that the system boots and you get to the desktop, time keeps ticking but you can't click on anything for good 10 minutes. This happens because a dead loop in UEFI has occurred.
- FSInject-64.efi - needed to be able to inject kext into kernel cache, especially useful during OSX installation.. not so useful thereafter.
- NTFS.efi a driver that is capable of reading NTFS drive names (if you remove if the name will be HD1, HD2 etc). This is also required if you need to boot UEFI Windows.
- OsxAptioFixDrv-64.efi is an absolutely crucial driver designed to override some boot.efi calls as well as emulate memory space for kernel to load.
- OsxFatBinaryDrv-64.efi is the driver that is responsible for match_kernerl loading.
- HFSPlus.efi is Apple's proprietary driver pulled from Mac EFI firmware and is used for reading HFS+ volumes. The advantage of this driver over the opensoruce VBoxHfs-64.efi is that it can read symbolic links that are used in Mavericks installer.
- Basic kexts needed during the installation of OSX, compiled from sources for Target OS 10.9
- There may be some cases of Clover not determining the correct OSX version, used to happen for second stage of installing OSX as well as Recovery HD booting. So I prefer to keep FakeSMC here just in case things go wrong at some point.
- Shell64U.efi - Clover stock binary, capable of properly dumping nvram (dmpstore), firmware file handles (dh)
- SHELL2.efi - dmazar's compilation, capable of adding and dropping boot entries (bcfg).
You can press F3 in Clover's GUI to unhide this secondary Shell, but you know this at this point already.
Files for /System/
* DisplayProductID-1464 - display override for Chimei KJ303 (1366x768, matte)m this is the same EDID override used in Clover's config. The file is meant to be put in /Library/Displays/Overrides/DisplayVendorID-daf. It resolves LVDS panel name (Color LCD) not appearing in About this Mac as well as sets custom frequency to the panel to prevent artifacts (tearing lines and fuzzy squares) from appearing at random.
* Extensions - console messages disabled for most of the kexts. All the extensions are meant to be installed (use KextUtility app) to /Library/Extensions.
- ACPIBatteryManager.kext - RehabMan's version of ACPIBatteryManager, Extended and Extra Information methods disabled in Info.plist as Vostro doesn't support neither of those. EstimateCycleCountDivisor is set to 7 to matcht the ePSA reported cycle count the most.
- AppleHDA.kext - virtually untouched extension as patching is done from other places, here only two resource files were added for ALC269VB support.
- BTFirmwareUploader.kext - EMlyDinEsh's extension meant for firmware uploading to AR3011 bluetooth controller across sleep and on cold boots. Info.plist is configured to use Linux firmware as Windows firmware is unstable and alternative Windows firmware causes abnormal LED behavior.
- CodecCommander.kext - an extension I have coded based on km9's work in order to hanlde codec command sending to the controller, allows the external amplifier to be powered up after sleep. Has to be used in conjunction with antipop to properly enable audio after sleep.
- CustomPeripheral.kext - a legacy kext that is namely meant for enabling the card reader. Also contains AppleHDA pinConfiguration data and fake injection for HD Web Camera.
- FakeSMC.kext + CPUSensors and ACPISensors (required additional ACPI table for sensor monitoring) - most essential extension for booting OSX at this point, here using kozlek's works. The main kext has had platform smc-napa changed to smc-huronriver and ACPI plugin has had unneeded features (TZ monitoring and PTID monitoring) removed.
- IOWMIFamily.kext + DellWMIController - modified hotkoffy's extension to handle brightness controls on Vostro. When this kext is present in the sysem Fn+F5/F6 keys work as intended and "Function Buttons" can be reversed to "Media Buttons" in BIOS if needed.
- RealtekRTL8111.kext - Mieze's networking kext that supports built-in ethernet controller. Wake for network access is working with this one too.
- VoodooPS2Controller.kext - RehabMan's extension with a piece of code added by me to support getting platform data from Clover. Both Keyboard and Synaptics Toucpad plugins have had plaform profiles defined for Vosto (0YW3P2). Default behavior for touchpad changed to 3 finger tap is right click, 2 finger tap is middle click. Drag Lock delay has been reverted to 0 to obtain regular behavior. Keyboard map requires you to set F3 as Show Desktop and F5 as Expose .. this will allow you to swipe with 3 fingers up to Show Desktop and down to call Expose.Also, this custom map allows Fn+F3 (disable the touchpad) button combination to work.
* CoreServices - this is a tidbit of customization related to System Profiler. To make your laptop show up as an image instead of MacBookPro you can do the following. Go to System/Library/CoreServices and right click CoreTypes.bundle, select Show Package Contents. Go to Contents/Resources folder and replace com.apple.macbookpro-13-unibody.icns with a customized one. To finish your customization go to ~/Library/Preferences and snatch com.apple.SystemProfiler.plist from there. Open it up with TextEdit, Xcode or any software you desire and edit the MacBook Pro (13-inch, Early 2011) string to Vostro 3450 (14-inch, Early 2012)... or Inspiron 14R (14-inch, Late 2011) the year depends on your model of course. Save the file and put it back into the place it belongs.
The result of this would be the following:
Files for /Library/
* antipop - this is a piece of software that has a basic purpose of not letting the codec get to sleep on platforms that use HDA power management.
Every 10 second it uses Mac command say " ", so essentially it just says space every 10 seconds. This is especially needed for Vostro's crippled ALC269VB codec that won't properly resume after sleep even if the codec verb to wake external amp was sent by CodecCommander. If there's no audio stream (that antipop creates) for 30 seconds after waking up you will loose audio from speakers (if you have HDMI receiver or Headphones plugged in it won't happen) as well as jack auto detect functionality.
After installing it make sure to run terminal command echo -n "0" > /usr/local/share/antipop/ac_only in order to make it use say even when running on battery. This won't affect your battery life drastically.. not even in a slightest way that you'd be able to notice.
* Keyboard Layouts - if using Russian keyboard layout the "Ё"; key won't work properly. It's actually an easy fix within sources, but I prefer having a dedicated layout just because:
a. it has a cleaner country flag without and additional Apple logo when using Russian-PC layout;
b. this is a unicode layout which means you can actually run and type in say, World of Warcraft, which wasn't possible at one point with stock layout.
Put Russian.keylayout and Russian.icns in the respective folder on the hard disk, then log out and log back in. To select this layout go to System Preferences > Keyboard > Input Sources > + > Others > Russian.
* com.apple.audio.ServerSettings - this is a property list that helps disable the spam in Console that antipop produces. Just install it to /Preferences/Audio/ and reboot to take effect.
* org.rehabman.voodoo.driver.Daemon - property list meant for use in conjunction with RehabMan's Voodoo PS/2 driver. Install it to /LaunchDaemons/
This is needed for the monitoring daemon that can sense when you plug in external USB mouse. So if you desire to disable the touchpad when you are using a mouse you can do that by going into System Preferences > Accessibility > Keyboard&Mouse and tick "Ignore built-in trackpad when mouse or wireless trackpad is present".
For daemon to actually work you have to copy the VoodooPS2Daemon binary into /usr/bin
These are simplified Clover scripts used for storing nvram contents in nvram.plist on the root of your disk as well as for storing and accessing the Clover boot log from Console. If this scripts are not present Clover won't be able to store essential data needed to restoring brightness level across reboot as well as some important bits relatef to Location Services and Find My Mac.
The scripts have to be installed to /etc and you have to set certain permissions to them in order for them to be executed upon login and at shutdown. Just copy the files to /etc (you can get there by using Finder > Go > Go to Folder), then open up terminal and navigate to /etc:
cd /etc sudo -s (enter your password and confirm /w return - it won't show up, but you are still entering it) sudo chown root:wheel rc.shutdown.local sudo chown root:wheel rc.local sudo chmod 644 rc.shutdown.local sudo chmod 644 rc.local
ls -l | grep rc.
Make sure the permissions to these two files are as follows:
-rw-r--r-- 1 root wheel
If it says staff or you see some extra w's in there - rinse and repeat. Shutdown the laptop when ready.
That's it. If you followed the guide at this point you should have a fully working OS X Mavericks installation.
Table design courtesy of OSX Latitude. I hope they are ok with me borrowing the canvas.