1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.

Lilu — патчер кекстов и процессов

Тема в разделе 'Хакинтош', создана пользователем vit9696, 22 фев 2017.

  1. vit9696

    vit9696 Apple Life Dev Разработчик

    Симпатии:
    2`069
    Базовый инструмент для заинтересованных разработчиков. Реализует интерфейс патчинга кекстов и процессов. Используется как основа в ранее выпущенных AppleALC и Shiki.

    Исходный код открыт: репозиторий.
    Использование: существующие плагины и SDK.

    Преимущества (по сравнению с существующими патчерами в загрузчиках):
    • Не зависит от используемого загрузчика;
    • Работает в Recovery / OS Installer;
    • Имеет символьный патчер;
    • Имеет доступ к API ядра и других кекстов;
    • Позволяет вносить модификации в процессы.
    Управление (через boot-args):
    • -liludbg — включает отладочные сообщения (только в DEBUG версии);
    • -liluoff — отключает Lilu;
    • -liluslow — патчер пользовательского уровня в режиме совместимости со старыми ос;
    • -lilulowmem — отключает распаковку ядра (отключает Lilu в Recovery/Installer);
    • -lilubeta — включает Lilu на неподдерживаемых системах.
    • -lilubetaall — эквивалентен -lilubeta, но также активирует все плагины

    Если вы любите ставить операционки в день первой беты (open)

    Все плагины и сам Lilu имеют 2 мажорные версии ядра XNU, ограничивающие загрузку только этими версиями XNU. Сейчас это минимально 12 (10.8), а максимально 17 (10.13).

    По этой причине в общем есть бутарги "beta" (-lilubeta, -alcbeta и другие), которые принудительно запускают Lilu и плагины на неподдерживаемой системе.
    Также, начиная с 1.1.5, есть "force" (-liluforce), который запускает Lilu в -s режиме, если нужно, а, начиная с 1.1.7, достаточно одного аргумента -lilubetaall, чтобы принудительно скипнуть проверку версии ядра для всех плагинов.

    Список поддерживаемых осей всегда есть тут:
    Код:
    Add -lilubeta to enable Lilu on unsupported os versions (10.13 and below are enabled by default).
     
    Последнее редактирование: 29 сен 2017
    Nacho, martin953, omnitrio и 30 другим нравится это.
     
    : Lilu, AppleALC, Shiki
  2. Vandroiy

    Vandroiy iГуру

    Симпатии:
    4`660
    Поздравляю с релизом:). А теперь немного ликбеза для деревянных - расскажи как теперь собирать AppleALC ибо он ошибку выдает и просит Lilu.kext. Что куда ложить? Куда добавлять исходники Lilu?
     
  3. vit9696

    vit9696 Apple Life Dev Разработчик

    Симпатии:
    2`069
    Дебажный Lilu.kext просто скопировать в папку с AppleALC.
     
    Slava77 и Vandroiy нравится это.
  4. Vandroiy

    Vandroiy iГуру

    Симпатии:
    4`660
    @vit9696, Понял... Все собралось))
     
  5. X-Tropic

    X-Tropic iЮзер

    Симпатии:
    105
    Гайд для простых юзеров будет? Интересует использование Lilu + Shiki (решение зависонов на HD4600).
     
  6. lvs1974

    lvs1974 Apple Life Dev Разработчик

    Симпатии:
    531
    Для лечения зависонов достаточно IntelGraphicsFixup + Lilu + Shiki, ничего настраивать не нужно.
     
    ymwild, X-Tropic и Vandroiy нравится это.
  7. Vandroiy

    Vandroiy iГуру

    Симпатии:
    4`660
    Та какой гайд? Lilu+IntelGraphicsFixup все решает...
     
    X-Tropic нравится это.
  8. vit9696

    vit9696 Apple Life Dev Разработчик

    Симпатии:
    2`069
    Вы бы про IntelGraphicsFixup подробнее написали в теме завода Intel графики…
    Он же ещё яблочко фиксит.
     
  9. chrome

    chrome iГуру

    Симпатии:
    936
    @vit9696, как-то у меня яблоко не фиксит. На HD530.
    ЗЫ разрыв есть в середине прогресс-бара. Сейчас не за компом повторить не получится.

    Прошу прошения у разработчиков. Кекст, яблочко фиксит на отлично. :)
     
    Последнее редактирование: 14 апр 2017
  10. vit9696

    vit9696 Apple Life Dev Разработчик

    Симпатии:
    2`069
    А есть то, что фиксит у тебя яблоко? Там как бы ровно то, что раньше было, просто под нормальным соусом.
     
  11. Vandroiy

    Vandroiy iГуру

    Симпатии:
    4`660
    Я у себя не вижу разницы на яблочке между патчем в конфиге и патчем кекстом. Оба работают одинаково, только кекст еще и в рекавери патчит яблочко.
     
  12. Slava77

    Slava77 iГуру

    Симпатии:
    574
    @chrome, патч find 01000075 25 replace 01000074 25 . Name IOGraphicsFamily у тебя фиксит ?
     
  13. chrome

    chrome iГуру

    Симпатии:
    936
    @Slava77, у тебя фиксит? Он ни у кого не фиксит. Просто на HDD загрузка дольше и его видно.
     
  14. vit9696

    vit9696 Apple Life Dev Разработчик

    Симпатии:
    2`069
    Так, mhm. Я могу прояснить, в чём я вижу суть проблемы. В наших амишных UEFI интеловская карточка инициализируются криво, или во всяком случае не так, как это делает драйвер макоси на поздней стадии загрузки.

    В IOGraphicsFamily заложена логика, что если мы грузимся в -v режиме или что-то ещё (не помню без сорцов), то после инициализации драйвера содержимое фреймбуфера сбрасывается и рисуется заново. В противном случае рисуется только прогресс-бар. На хаках IOGraphicsFamily считает, что всё ок (потому что на маках всё ок).

    Единственное, что делает патч (что в кексте, что бинарный) — говорит, что мы грузимся в -v режиме, и IOGraphicsFamily заново отрисовывает яблоко после перехвата управления карточкой кекстом карты.
    Соответственно на долю секунды (между отдачей управления GOP → ось) видно поехавшее содержимое фреймбуфера.

    Очевидно, что первопричину надо искать в GOP драйвере и/или его обёртках, но для этого надо сесть и отреверсить кусок прошивки Apple и кусок прошивки AMI. Кто здесь это осилит :)? Как вариант, можно ещё прошить GOP драйвер из настоящика и попробовать, но вряд ли сработает, наверняка дело не именно в нём, а в каком-нибудь управляющем модуле. В ненавидии, например, похожая проблема, если GOP не реализует проприетарный интерфейс Apple, то содержимое фреймбуфера ресетается кекстом при инициализации, отсюда имеем пропавшую картинку при загрузке FileVault 2 на позднем этапе загрузки.

    Вот только как вам сказать, у самой Apple в этом направлении куча проблем. У кого есть настоящики на интеле, могут попробовать загрузиться с включённым FileVault 2.x и нестандартным масштабом. Вас позабавят глюки процесса загрузки, как ранние, так и поздние при переходе с неретинового разрешения на ретиновое (тестил на mbp 2015 года). Так что я бы просто не парился.
     
    iStillS, Круглянин, GLXOZ и 2 другим нравится это.
  15. chrome

    chrome iГуру

    Симпатии:
    936
    @vit9696, на настоящике если грyзится с -v яблоко потом на сером фоне или на черном? Не знаешь?
     
  16. vit9696

    vit9696 Apple Life Dev Разработчик

    Симпатии:
    2`069
    @chrome, если я тебя правильно понял, то потом = после отображения лога, перед загрузкой стола. Тем не менее, лого всегда одного цвета на настоящиках. Либо серое, либо чёрное, либо произвольного цвета (может быть зашито в NVRAM).
    На новых девайсах яблоко будет на чёрном (перепроверил у себя). Но это от модели зависит. Конкретно вот мой незаконченный реверс из прошивки AAPL в UEFI, который решает, какое лого использовать (в кловере огрызок — AppleUITheme). В самой оси есть такой же код, но где-то в другом месте.

    Show Spoiler

    Код:
    #include <HobList.h>
    
    STATIC BOOLEAN mDefaultBgColorPresent;
    STATIC BOOLEAN mShowCriticalBatteryUi;
    STATIC UINT32  mCurrentColor;
    STATIC UINT32  mLowBatteryColor;
    
    #define BLACK_COLOR = 0x000000;
    
    #define APPLE_USER_INTERFACE_THEME_PROTOCOL_GUID \
    { 0xD5B0AC65, 0x9A2D, 0x4D2A, { 0xBB, 0xD6, 0xE8, 0x71, 0xA9, 0x5E, 0x04, 0x35 } }
    
    EFI_GUID gAppleUserInterfaceThemeProtocolGuid = APPLE_USER_INTERFACE_THEME_PROTOCOL_GUID;
    
    typedef EFISTATUS (EFIAPI *APPLE_USER_INTERFACE_THEME_GETCOLOR) (
      IN OUT UINT32 * Color
    );
    
    typedef struct {
      UINT64                                Version;
      APPLE_USER_INTERFACE_THEME_GETCOLOR   GetColor;
    } APPLE_USER_INTERFACE_THEME_PROTOCOL;
    
    BOOLEAN
    EFIAPI
    CriticalBattery (
      VOID
      )
    {
      EFI_STATUS              Status;
      APPLE_SMC_IO_PROTOCOL   *SmcIo;
      SMC_DATA                Value;
      UINTN                   DataSize;
      UINT8                   CriticalBatteryUi;
    
      Status = gBS->LocateProtocol(&gAppleSmcIoProtocolGuid, 0, (void **)&SmcIo);
    
      if (!EFI_ERROR(Status)) {
        Status = SmcIo->SmcReadValue(SmcIo, SMC_MAKE_IDENTIFIER('B', 'B', 'I', 'F'), 1, &Value);
    
        if (EFI_ERROR(Status) || !(Value & 1)) {
          DataSize = 0;
          Status = gRT->GetVariable("critical-battery-ui", &gAppleVendorGuid, 0, &DataSize, &CriticalBatteryUi);
          if (!EFI_ERROR(Status)) {
            return CriticalBatteryUi & 0xF;
          }
        }
      }
    
      return FALSE;
    }
    
    EFISTATUS
    EFIAPI
    UserInterfaceThemeGetColor (
      UINT32    *Color
      )
    {
      UINTN          DataSize;
      EFI_STATUS     Status;
    
      if (Color == NULL) {
        return EFI_INVALID_PARAMETER;
      }
    
      if (mShowCriticalBatteryUi && CriticalBattery()) {
        *Color = mLowBatteryColor;
        return EFI_SUCCESS;
      }
    
      *Color = mCurrentColor;
    
      if (!mDefaultBgColorPresent) {
        DataSize = 0;
        Status = gRT->GetVariable("BootUIPrefix", &gAppleVendorGuid, 0, &DataSize, NULL);
        if (Status == EFI_BUFFER_TOO_SMALL) {
          *Color = BLACK_COLOR;
        }
      }
    
      return EFI_SUCCESS;
    }
    
    STATIC APPLE_USER_INTERFACE_THEME_PROTOCOL mAppleUserInterfaceThemeProtocol = {
      1,
      UserInterfaceThemeGetColor
    };
    
    EFI_STATUS
    EFIAPI
    UserInterfaceThemeEntryPoint (
      IN EFI_HANDLE           ImageHandle,
      IN EFI_SYSTEM_TABLE     *SystemTable
      )
    {
      EFI_STATUS                    Status;
      EFI_HOB_HANDOFF_INFO_TABLE    *HobList;
      UINTN                         DataSize;
      UINT32                        Color;
      EFI_HANDLE                    Handle;
    
      mShowCriticalBatteryUi = CriticalBattery();
    
      Status = EfiGetSystemConfigurationTable(&gEfiHobListGuid, (VOID *)&HobList);
    
      if (!EFI_ERROR(Status) && HobList->Header.HobType == EFI_HOB_TYPE_HANDOFF && HobList->BootMode == 0x81) {
        mDefaultBgColorPresent = TRUE;
      }
    
      // Default color is black
      Color = BLACK_COLOR;
      mLowBatteryColor = BLACK_COLOR;
    
      DataSize = 0;
      Status = gRT->GetVariable("DefaultBackgroundColor", &gAppleVendorGuid, 0, &DataSize, &Color);
      if (!EFI_ERROR(Status)) {
        mDefaultBgColorPresent = TRUE;
        mCurrentColor = Color;
      }
    
      Status = gBS->InstallProtocolInterface(&Handle, &gAppleUserInterfaceThemeProtocolGuid, 0, &mAppleUserInterfaceThemeProtocol);
    
      return EFI_SUCCESS;
    }
    
     
    chrome, GLXOZ и Vandroiy нравится это.
  17. slice

    slice Apple Life Dev Разработчик

    Симпатии:
    10`208
    Я чего-то экспериментировал с "DefaultBackgroundColor", в конфиге Кловера есть, но до конца не разобрался, как бы не первоочередная задача.
    А вообще цвет фона решается здесь
    Код:
        if (gIOFBBlackBoot)
            gray = logo = 0;
        else if (gIOFBBlackBootTheme)
            gray = 0;
        else if (32 == consoleDepth)
            gray = 0xbfbfbf;
        else if (30 == consoleDepth)
            gray = (rgb108(0xbf) | (rgb108(0xbf) << 10 ) | (rgb108(0xbf) << 20));
        else
            return;
    
    А вот заполнение фона
    for (; x < framebufferWidth; x++) out[x] = gray;

    Ну а серая тема задается аргументом загрузки
    gIOFBBlackBootTheme = (0 != (kBootArgsFlagBlackBg & ((boot_args *) PE_state.bootArgs)->flags));
    Тот самый флаг, который задается в Кловере как BooterConfig, бит (1<<6) = 0x40?
     
    Последнее редактирование: 23 фев 2017
  18. Andrey1970

    Andrey1970 iГуру

    Симпатии:
    4`176
    У тебя не правильный патч.
    Нужно replace 010000eb 25

    Но теперь уже, вместо этого, лучше использовать Lilu+IntelGraphicsFixup
    (тем более там еще Azul патчится.)
     
    Последнее редактирование: 23 фев 2017
  19. slice

    slice Apple Life Dev Разработчик

    Симпатии:
    10`208
    Но, по какой-то причине флаг из Кловера до системы не доходит. Этого я не отследил.
     
  20. chrome

    chrome iГуру

    Симпатии:
    936
    если сюда безусловно прыгнуть Снимок экрана 2017-02-23 в 11.40.46. , то будет черный фон и серый квадратик с темным яблоком :).
     
Similar Threads: Lilu патчер
Форум Заголовок Дата
Хакинтош AirportBrcmFixup - Lilu плагин с набором патчей для Wi-Fi карт Broadcom 4 авг 2017
Хакинтош HibernationFixup - Lilu плагин для решения проблем с гибернацией 4 авг 2017
Хакинтош Универсальный патчер UEFI-биосов 4 окт 2012

Поделиться этой страницей