/Thinkpad-T490-Hackintosh-OpenCore

OpenCore EFI folder for running macOS Sequoia (with AirportItlwm) and newer on the Lenovo ThinkPad T490.

140
9
GitHub
Public

Repository Statistics

Key metrics and engagement data

140
Stars
9
Forks
1
Open Issues
0
Releases
1.06
Engagement Rate
Default branch: main

Timeline

Repository has been active for 2 years, 1 month

Repository Created

Last Activity
Inactive for NaN months

README.md

Lenovo ThinkPad T490 Hackintosh OpenCore

OpenCore macOS release

10053604


TABLE of CONTENTS


About

OpenCore EFI folder and config for running macOS Sonoma and newer on the Lenovo ThinkPad T490. Read the following documentation carefully in order to install/boot macOS successfully!

Before you begin

⚠️ The built-in Samsung PM981a NVMe that comes with the system is NOT compatible with macOS. You must use a different NVMe!

Notable Features

  • Compatible with macOS Sonoma and Sequoia (works with older versions of macOS as well, but requires different WiFi-Kexts and config adjustments)
  • Woorking Thunderbolt 3 over USB-C
  • New USB Port Mapping with support for docking station
  • Optimized Framebuffer Patch for smoother handshake with external displays via HDMI
  • Working clamshell mode (when connected to A/C and external display)
  • Working MicroSD Card Reader
  • Working 3D globe in Maps app (macOS 12+)
  • No injection of PlatformInfo data into Microsoft Windows.
  • YogaSMC support for additional features like CPU fan control, performance bias, handling Fn Keyboard shortcuts, additional OSD overlays, etc.
  • Lean EFI folder with slimmed kexts (20 MB instead of 62 MB overall):
    • AirportItlwm_Sonoma: 1,8 instead of 16 MB. Only contains Firmware for Intel AC 9560.
    • AppleALC: 86 Kb instead of 2,3 MB. Only contains layout 97.
    • IntelBluetoothFirmware: 560 KB instead of 11,5 MB.
    • itlwm (1.5 mb instead of 16 mb). Only Contains Firmware for Intel AC 9560.

Known Issues

  • Hibernation Mode 25 does not work properly
  • Fingerprint sensor does not work under macOS since there is currently no way to emulate Touch ID.
  • The audio combo jack creates an unpleasant buzz/noise during driver initialization. So it's best to connect headphones after booting.

[!IMPORTANT]

  • Before reporting any issues, ensure that your system uses the latest available UEFI and EC Firmware.
  • Don't install macOS on an external disk or flash drive – use a compatible internal disk.

Future Developments

  • Adding USB ports of docking station to the USB port kext
  • Creating an AppleALC Layout-ID for audio output on Docking Station
  • Adjusting Framebuffer Patch so HDMI/DP Ports on docking stations can be utilized

System Specs

CategoryDescription
ModelLenovo ThinkPad T490
Variant20N3
BIOSUEFI: v1.83 (2024-06-20)
Embedded Controller: v1.27
CPUIntel Intel Core i5 8265U (Quad Core)
RAM16 GB:
  • 8 GB Samsung DDR 4 @2666 Mhz (soldered)
  • 8 GB Samsung DDR 4 @2666 Mhz (RAM Slot)
StorageSamsung PM981a NVMe (unusable)
Western Digital PC SN530 NVMe SSD
DisplayFull HD (1080p) (Non-Touch)
iGPUIntel(R) Grpahics UHD 620 (spoofed as Iris 655, BusID: 2)
dGPUNone
AudioRealtek ALC257 (using Layout 97)
ThunderboltTitan Ridge Thunderbolt 3 Connector (USB-C)
Tested with i-tec USB-C Metal Nano Docking Station
EthernetIntel I219-V
WiFiIntel AC-9560
Firmware: iwm-9000-46 (Screenshot)
BluetoothDevice: Intel Wireless Bluetooth
BT Version: 5.1
VID: 0x8087, PID: 0x0aaa
Firmware: ibt-17-16-1.sfi, ibt17-16-1.ddc
USB Port: HS10
TrackpadSynaptics
Device-id: pci8086,9de8. Controlled via SMBus.
SD Card ReaderRealtek MicroSD Card Reader
DockThinkPad Ultra Docking Station

BIOS Settings

After powering on the machine, spam F1 until you hear a beep to enter the BIOS. Change the following settings:

CategorySetting
ConfigDisplay
  • Shared Display Priority: HDMI
  • Total Graphics Memory: irrelevant for macOS
CPU
  • Intel Hyperthreading Technology: ON
SecurityFingerprint
  • Predesktop Authentication: OFF
Security Chip
  • Security ChipON or OFF (enable for Windows 11)
Memory Protection
  • Execution Prevention: ON
Virtualization
  • Kernel DMA Protection: ON (enables VT-D by design)
I/O Port Access
  • Ethernet LAN: ON
  • Wireless LAN: ON
  • Bluetooth: ON
  • USB Port: ON
  • Memory Card Slot: ON
  • Smart Card Slot: OFF
  • Integrated Camera: ON
  • Integrated Audio: ON
  • Microphone: ON
  • Fingerprint Reader: ON (works in Windows only) or OFF
  • Thunderbolt 3: ON
Absolute Persistance Module
  • Absolute Persistance Module Activation: Disabled
Secure Boot Configuration
  • Secure Boot: OFF
Intel SGX
  • Intel SGX Control: Disabled
Startup
  • UEFI/ Legacy Boot: UEFI Only
  • Boot Mode: Quick (Skips Diagnostics)

EFI Folder Content

Click to reveal
1EFI
2├── BOOT
3│   └── BOOTx64.efi
4├── OC
5│   ├── ACPI
6│   │   ├── DMAR.aml
7│   │   ├── SSDT-ALS0.aml
8│   │   ├── SSDT-AWAC.aml
9│   │   ├── SSDT-ECRW.aml
10│   │   ├── SSDT-EXT1-FixShutdown.aml
11│   │   ├── SSDT-EXT3-LedReset-TP.aml
12│   │   ├── SSDT-EXT4-WakeScreen.aml
13│   │   ├── SSDT-GPRW.aml
14│   │   ├── SSDT-MCHC.aml
15│   │   ├── SSDT-PLUG.aml
16│   │   ├── SSDT-PNLF.aml
17│   │   ├── SSDT-PORTS.aml
18│   │   ├── SSDT-PTSWAK.aml
19│   │   ├── SSDT-T490-KBRD.aml
20│   │   ├── SSDT-THINK.aml
21│   │   └── SSDT-USBX.aml
22│   ├── Drivers
23│   │   ├── AudioDxe.efi
24│   │   ├── HfsPlus.efi
25│   │   ├── OpenCanopy.efi
26│   │   ├── OpenRuntime.efi
27│   │   └── ResetNvramEntry.efi
28│   ├── Kexts (Loading managed by MinKernel/MaxKernel settings)
29│   │   ├── AdvancedMap.kext
30│   │   ├── AirportItlwm_Sequoia.kext
31│   │   ├── AirportItlwm_Sonoma.kext
32│   │   ├── AMFIPass.kext
33│   │   ├── AppleALC.kext
34│   │   ├── BlueToolFixup.kext
35│   │   ├── BrightnessKeys.kext
36│   │   ├── CPUFriend.kext
37│   │   ├── CPUFriendDataProvider.kext
38│   │   ├── ECEnabler.kext
39│   │   ├── HibernationFixup.kext
40│   │   ├── IntelBluetoothFirmware.kext
41│   │   ├── IntelBluetoothInjector.kext
42│   │   ├── IntelBTPatcher.kext
43│   │   ├── IntelMausiEthernet.kext
44│   │   ├── IO80211FamilyLegacy.kext
45│   │   ├── IOSkywalkFamily.kext
46│   │   ├── itlwm.kext
47│   │   ├── Lilu.kext
48│   │   ├── NVMeFix.kext
49│   │   ├── RealtekCardReader.kext
50│   │   ├── RealtekCardReaderFriend.kext
51│   │   ├── RestrictEvents.kext
52│   │   ├── RTCMemoryFixup.kext
53│   │   ├── SMCBatteryManager.kext
54│   │   ├── SMCProcessor.kext
55│   │   ├── SMCSuperIO.kext
56│   │   ├── USBMap.kext
57│   │   ├── VirtualSMC.kext
58│   │   ├── VoodooPS2Controller.kext
59│   │   │   └── Contents
60│   │   │   └── PlugIns
61│   │   │   ├── VoodooInput.kext (disabled)
62│   │   │   ├── VoodooPS2Keyboard.kext
63│   │   │   ├── VoodooPS2Mouse.kext (disabled)
64│   │   │   └── VoodooPS2Trackpad.kext
65│   │   ├── VoodooRMI.kext
66│   │   │   └── PlugIns
67│   │   │      ├── RMII2C.kext (disabled)
68│   │   │      ├── RMISMBus.kext
69│   │   │      └── VoodooInput.kext
70│   │   ├── VoodooSMBus.kext
71│   │   ├── WhateverGreen.kext
72│   │   └── YogaSMC.kext
73│   ├── OpenCore.efi
74│   ├── Resources
75│   │   ├── Audio
76│   │   │   └── OCEFIAudio_VoiceOver_Boot.mp3
77│   │   ├── Font
78│   │   │   ├── Font_1x.bin
79│   │   │   ├── Font_1x.png
80│   │   │   ├── Font_2x.bin
81│   │   │   └── Font_2x.png
82│   │   ├── Image
83│   │   │   ├── Acidanthera (removed icons from tree view)
84│   │   │   │   ├── Chardonnay
85│   │   │   │   ├── GoldenGate
86│   │   │   │   └── Syrah
87│   │   │   └── Blackosx
88│   │   │   └── BsxM1 (removed icons from tree view)
89│   │   └── Label (removed files from tree view)
90│   └── Config.plist
91└── OC Changelog.md

Preparations

Config Adjustments

  • Download the latest Release of my EFI folder and unzip it
  • Open the config.plist with a plist editor (e.g. ProperTree or OCAT) and adjust the following settings based on the used version of macOS and personal preferences:
    • Graphics
      • Devices/Properties/Add/PciRoot(0x0)/Pci(0x2,0x0)
        • For macOS ≤ 13.3, disable/delete enable-backlight-registers-alternative-fix and use enable-backlight-registers-fix instead to fix black screen issues.
        • If other issues occur, try another framebuffer patch. I collected addtitional ones which be found here
    • Wi-Fi: Decide, which Wi-Fi kext you want to use (→ see AirportItlwm vs. itlwm):
      • By default, Sonoma uses AirportItlwm_Sonoma
      • By default, Sequoia requires Itlwm. But with the help of OpenCore Legacy Patcher, AirportItlwm can be used as well. And that's what I configured my config for.
    • Kernel/Quirks
      • AppleXcpmCfgLock is not required on my system. Try for yourself if your T490 needs it to boot.
    • NVRAM/Add/7C436110-AB2A-4BBB-A880-FE41995C9F82
      • Optional: add boot-args -v, debug=0x100 and keepsyms=1 for debugging if you face issues.
    • UEFI/APFS
      • Change MinVersion and MinDate to -1 if you want to run macOS Catalina or older.
    • Platforminfo/Generic: SMBIOS
      • Generate MLB, Serial and ROM for MacBookPro15,2 using GenSMBIOS or OCAT.
  • Save the changes

[!CAUTION]

  • Don't change the SMBIOS or the USB port mapping injected by USBMap.kext won't be applied and Bluetooth won't work either! If you change the SMBIOS, then you also need to change the model property in the info.plist contained in the kext to match the selected SMBIOS (instructions).
  • If your T490 model uses a different WiFi/BT card than the stock Intel AC-9560 card, use the official itlwm.kext instead because mine only contains the firmware for the AC-9560, so it won't work with other cards.

AirportItlwm vs. itlwm WiFi kext

Although the Intel AC-9560 Card is compatible with both kexts (use either one or the other), there are Pros and Cons to both of them (check the FAQs for other differences):

  • AirportItlwm: (used in macOS Sonoma, requires root patches in Sequoa)

    • Pro: Can be used during macOS Setup/Recovery which is not possible with itlwm.kext
    • Pro: Supports Location Services and "Find My Mac"
    • Pro: Connects faster to Wi-Fi Hotspots than itlwm.kext
    • Con: Doesn't perform as well as itlwm.kext
    • Con: Can't connect to hidden WiFi Networks
    • Con: Requires the correct kext per macOS version, so running multiple version of macOS requires multiple versions of this kext controlled via MinKernel and MaxKernel settings
    • Con: iMessage and FaceTime don't work when using AirportItlwm (→ See Issue 14)
  • itlwm.kext (used in macOS Tahoe)

    • Pro: itlwm.kext works across multiple versions of macOS
    • Pro: Loading webpages feels a lot quicker than with AirportItlwm
    • Pro: Can connect to hidden WiFi Networks
    • Pro: Does work with iMessage and FaceTime
    • Con: Requires HeliPort app to connect to Wi-Fi hotspots, so it can't be used during macOS Setup/Recovery
    • Con: Doesn't support Location Services
  • Pre-compiled WiFi kexts for other versions of macOS can be found in the Additional Files section! You will need them if you want to run older versions of macOS!

[!NOTE]

My config uses AirportItlw by default since it allows accessing the internet during macOS installation (unlike itlwm.kext, which requires an additional app to do so). Currently, AirportItlwm kexts for macOS Sonoma and Sequoia are included, while macOS Tahoe requires itlwm.kext.

If you want to use itlwm, disable AirportItlwm (all variants), enable itlwm and adjust the MinKernel setting to match the Kernel version of macOS (currently: 24.0.0 = macOS Sequoia). Next, download the HeliPort app, run it and add it to "Login Items" (in System Settings), so that it starts automatically with macOS.

Deployment

If macOS is installed already

  • Put the EFI folder on a FAT32 formatted USB flash drive
  • Reboot from said USB flash drive for testing
  • If it works, mount your system's ESP, replace the BOOT and OC folders in the EFI folder
  • Continue with Post-Install

If macOS is not installed

  • Follow Dortania's OpenCore Install Guide to prepare a USB Installer
  • Optional: Once the USB has been created, download the latest version of HeliPort and copy the .dmg to your USB Installer (only required when itlwm.kext is used for Wi-Fi)
  • Next, mount the ESP of the USB Installer (you can use MountEFI for this)
  • Put the EFI folder on the EFI partition of the USB installer
  • Reboot from the USB installer
  • Install macOS
  • Once that is completed, continue with Post-Install

[!CAUTION]

Upgrading from to macOS 14.3.1 to 14.4 or newer via System Update causes a Kernel Panic during install! Disable AiportItlwm and enable itlwm.kext instead. Set SecureBootModel to Disabled, reset NVRAM and run the update again. If this does not work, use this workaround to install macOS 14.4 on a new APFS volume. Use Migration Manager afterwards to get your data onto the new volume!

Post-Install

Disable Gatekeeper (optional)

Gatekeeper can be really annoying and wants to stop you from running python scripts from github, etc. Do the following to disable it:

  • Open Terminal and run: sudo spctl --master-disable
  • The process has slightly changed in macOS Sequoia 15.1.1. and newer more info

Fixing On-Board Audio with OCLP Mod (macOS Tahoe beta 2)

Apple deleted the AppleHDA required for on-board audio in macOS 26 beta 2. Since there's no official OCLP version available for macOS Tahoe yet, we are going to use OCLP Mod to apply root patches – which will also install AppleHDA, thereby re-enabling audio. (→ Instructions)

WiFi

Option 1: enable AirportItlwm.kext in macOS Sequoia

By default, Itlwm.kext is requird when running macOS 15. But if you want to use AirportItlwm.kext instead, you have to apply "Modern WiFi" patches with OpenCore Legacy patcher:

  • Download OpenCore Legacy Patcher (.pkg).
  • Remove HeliPort from Login-Items (if present) – you won't need it any more.
  • Download my EFI folder and extract it.
  • Place it in your EFI partition.
  • Reboot
  • Reset NVRAM
  • Boot into macOS Sequoia
  • At this stage, WiFi won't work!
  • Install OpenCore legacy patcher and run it
  • Click on "Root Patches"
  • Next, click on "Start Root Patching" to install the required frameworks for "Modern Wi-Fi"
  • Once that's done, reboot
  • Reset NVRAM and start macOS Sequoia.
  • Connect to a WiFi AP via Airport-Utility

More details about this patch can be found here

Option 2: For Itlwm.kext users

  • Mount HeliPort.dmg, drag the app into the "Programs" folder and run it.
  • Use it to connect to your WiFI hotspot.
  • Add HeliPort to "Login Items", so it stars with macOS and connects to your WiFi network automatically.

Enable YogaSMC (optional, not recommended)

Starting with Release 1.0.5 v1.0 of my OC EFI folder, I've disabled YogaSMC, CPUFriend and the required SSDTs due to reported CPU performance issues. You can still re-enable it if you want to but I won't support it.

  • Config Settings:
    • Enable SSDT-ECRW.aml, SSDT-THINK.aml and YogaSMC.kext
    • Disable SSDT-T490-KBRD.aml and ACPI patches for the Keyboard Shortcuts
  • Download YogaSMC-App and mount it. This is a custom build which fixes the "Failed to open Preferences" issue in Ventura and newer
  • Double-click the YogaSMC prefPane to install it
  • Drag the YogaSMC app into the "Programs" folder and run it
  • Click on the icon (⌥) in the menu bar and select "Start at Login"
  • Now you can control performance profiles, fan speed and other settings

Configure CPUFriend

  • Use CPUFriendFriend to generate your own CPUFriendDataProvider.kext to optimize CPU Power Management if your T490 uses a different CPU than mine.

Configure Hibernation

  • Disable PowerNap: sudo pmset -a powernap 0
  • Change Hibernatemode to 3: sudo pmset -a hibernatemode 3
  • For more details, have a look at my Hibernation Configuration Guide

[!IMPORTANT]

Currently, Hibernatemode 25 does not work properly since I haven't figured out completely which RTC memory regions to block. I've managed to skip RTC memory checksum errors and restore the system from the sleepimage but it freezes after returning to the desktop after 2 seconds (scrambled image). Any assistence for fixing this would be highly appreciated.

Install MonitorControl (optional)

MonitorControl is a helpful little tool that lets you control the brightness and contrast of external displays from the menubar.

Understanding YogaSMC Settings

Open the YogaSMC preference pane. You will find the following options (among others):

  • DYTC: DYTC stands for Dynamic Thermal Control. It allows the OS or firmware to manage the thermal characteristics of a device or component dynamically, adjusting power and performance to maintain safe operating temperatures. 3 profiles are available: "Quiet", "Balanced", and "Performance"
  • If you tick the PSC support, the control for the slider becomes more nuanced. Instead of 3 positions it gets more increments. I think PSC refers to Power State Current in the DSDT and is used to control different levels of performance via the slider.

Disabling YogaSMC

If you don't want to use YogaSMC, do the following:

  • In macOS:
    • Open System Preferences
    • Right-Click on YogaSMCPane and remove it
    • Under "Login items" (or similar) remove the YogaSMC App from the list
  • Config.plist:
    • Under ACPI, disable SSDT-THINK.aml and SSDT-ECRW.aml
    • Under Kernel, disable YogaSMC.kext

[!NOTE]

After disabling YogaSMC, fan and performance controls are no longer available. F-keys besides Volume and Brightness will no longer work either.

Compiling Intel Wi-Fi and Bluetooth Firmware kexts easily

Chris1111 has created a helpful little app called Wifi-Intel-KextsBuilder which automates the process of compiling Intel Wi-Fi and Bluetooth Firmware kexts. It only requires you to have Xcode installed and will handle the rest on its own once you run it.

Wifi-Intel-KextsBuilder downloads the source code of itlwm, IntelBluetoothFirmware, MacKernelSDK and Lilu and then compiles itlwm, AirportItlwm and Intel Bluetooth Firmware kexts. They will be located under "Users/YOUR_USERNAME/Developer/Wifi-Intel-KextsBuilder/ in the "build/Release" folder of each repo.

These kexts won't be slimmed like the ones present in my EFI folders but at least you now have a simple option to compile them on your own in the future. For compiling slimmed kexts, you can follow my guide to do so.

Credits and Thank Yous