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

Железный NVRAM

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

  1. slice

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

    Симпатии:
    8`841
    Давайте исследуем эту тему.
    На старом H61M-S3 у меня он был, на новом Z170X-UD5 нету...
    Нет, неправильная терминология, это сленг означает, что нету доступа по чтению/записи. Реально, разумеется, NVRAM есть на любых UEFI компьютерах, и отсутствует на PC BIOS легаси компьютерах.

    Что это
    Non-Volatile Random Access Memory. То есть память, которая сохраняется даже при выключенном питании. Например, я вытащил батарейку, отсоединил все провода, и оставил плату отдыхать на три дня. После включения я обнаружил, что в бутовом меню запись о Clover сохранилась, тогда как все настройки БИОСа и дата-время слетели. Да NVRAM это не CMOS, его так просто не очистишь.
    В этом есть своя опасность, если в НВРАМ записали что-то противное макОСу, то почистить будет непросто. Было дело, при экспериментах с FileVault2, туда прописалась переменная типа recovery-mode, и загрузиться в Мак я никак не мог, сброс CMOS тоже не помогал. Помогло вхождение в Шелл, и удаление этой переменной вручную. Сейчас Кловер удаляет ее безусловно.
    В этой памяти сохраняются разные переменные, которые имеют имя, GUID, длину и значение произвольного формата. Доступ осуществляется EFI функциями из группы RuntimeService:
    GetVariable(), SetVariable() и GetNextVariableName().

    Зачем он нужен
    В Хамелеоне доступа много лет не было (unsupported), и ничего, как-то жили. Кое-что не работало, ну и бог с ними, в целом система работоспособна.
    В легаси-Кловере появилась поддержка эмулируемого NVRAM, то есть, все переменные сохраняются просто в оперативной памяти, а при выключении системы записываются в файл на диске. При запуске Кловер считывает этот файл (nvram.plist) и таким образом знает, что туда было записано до выключения питания. Для тех, у кого Кловер УЕФИ, а НВРАМ не работает, сделан аналогичный драйвер EmuVariableUefi.efi. С эмулируемым НВРАМ заработали сервисы "Стартовый диск", iMessage (Хамелеон тоже вынужден был обзавестить нврам), что-то там про яркость экрана.
    Однако, при панике, и при уходе в сон система не успевает сохранить данные на диске, таким образом panic.log и hibernatemode 25 возможны только при прямом доступе по записи в NVRAM, то, что на нашем сленге называется "Железный НВРАМ".

    Где он есть
    Он, очевидно, есть в настоящих Маках, иначе зачем система требует его наличия? Доступ осуществляется через кекст AppleEFINVRAM, а адрес функций доступа он получает из иорега, куда его положил boot.efi, который имел доступ к функциям UEFI.
    Он был на моем компьютере H61M-S3, с одним из очень старых вариантов AMI UEFI.
    Доступ по записи и чтению есть на моем Z170X с биосом F5, но только на уровне Кловера, в системе доступ теряется. С БИОСом F20 уже и на уровне Кловера ничего не работает, уже обязательно использование EmuVariable.
    Когда-то давно Дмазар обратил внимание на эту проблему, и ввел некий патч в OsxAptioFix, при котором НВРАМ заработал у некоторых пользователей. Не знаю, однако, повторить успех больше ни с кем не удается.
    Итак, это зависит от поколения УЕФИ БИОСа. (Моя нумерация)
    1: Работает
    2: Работает с патчем Дмазара
    3: Работает на уровне Кловера, в системе нет.
    4: Не работает почти никак. Например с БИОСом F20.
    То есть компания AMI старательно ограничивает нас от использования этой технологии, с каждой новой версией создавая нам новые проблемы.

    Далее расскажу, что мне уже известно, как программисту.
     
    Finder, egosys, m-dudarev и 2 другим нравится это.
     
    : NVRAM, UEFI, Variables
  2. ACIDSky

    ACIDSky iГуру

    Симпатии:
    1`011
    У меня:

    MSI z77a-GD65 - железный работает
    MSI Z87I-AC - только софтовый
    ASRock х99 Extreme6\ac - только софтовый
     
  3. Vandroiy

    Vandroiy iГуру

    Симпатии:
    3`834
    Asus H81M-K железный работает с любой версией БИОСа.
    Asus H110M-A/M2 железный работает со всеми БИОСами до 2003 включительно. На версии БИОСа 3016 работает только софтовый.

    Отправлено с моего X5 через Tapatalk
     
  4. slice

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

    Симпатии:
    8`841
    Зайдите в Шелл, и сделайте дамп командой
    >dmpstore -all > dmpstore.txt
    В этом текстовом файле будет переменная NvramSmiBuffer? Это когда нет драйвера EmuVariable. При нем такой переменной точно не будет.
     
  5. X-Tropic

    X-Tropic iЮзер

    Симпатии:
    81
    Не пашет так, а если вот так: dmpstore -all -s dmpstore.txt
    то не дает сохранить. Что я делаю не так? какой командой узнать носитель для сохранения? Например fs0:\
     
  6. m-dudarev

    m-dudarev iГуру

    Симпатии:
    2`628
    HM76 и Z77 железный работает всегда.
    Выхлоп с HM76
    fs0:\ >dmpstore -all > 123.txt прилепил.
    Переменной NvramSmiBuffer в нём нет, но и EmuVariable у меня то-же нет.
     

    Вложения:

    • 123.txt.zip
      Размер файла:
      15.9 КБ
      Просмотров:
      0
  7. slice

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

    Симпатии:
    8`841
    Да, тебе нужно сначала перейти на fs0:
    Либо сразу сохранять на него
    dmpstore -all > fso:\dmpstore.txt
     
    X-Tropic нравится это.
  8. slice

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

    Симпатии:
    8`841
    SmiBuffer нету, потому и железный работает. Это первое поколение UEFI.

    ЗЫ. А вот NvRamMailbox у тебя тоже есть. Да, наверно он к этому делу непричастен.
     
  9. alsinev

    alsinev iГуру

    Симпатии:
    584
    GA-Z77MX-D3H TH/GA-Z87MX-D3H - железный с любыми версиями биос.
     

    Вложения:

  10. Vandroiy

    Vandroiy iГуру

    Симпатии:
    3`834
    Asus H110M-A/M.2 - железный NVRAM работает на версиях БИОСа 2003 и ниже...
     

    Вложения:

  11. m-dudarev

    m-dudarev iГуру

    Симпатии:
    2`628
    Существует ли команда в Shell, аналог терминальной nvram -c
    Чтобы разом чистить nvram?
    Меня тут мысль посетила, тут же многие знают что если через icloud заблокировать свою железку, то в мак её больше не когда не загрузить, мой ноутбук так блокируется, но сам не пробовал, пробовал стационар и да, действительно блокируется, на ноуте это лечится повторной прошивкой биоса, на стационаре помог сброс CMOS, вот и посетила меня идея нужно заблокировать и через shell снять dmpstore -all чтобы сравнить какая переменная после блокировки добавляется?
    Если это так и есть, и её можно через shell удалять, то попробовать всё это повторить на оригинальном Маке, а если это сработает и на нём.., дальше.
     
    X-Tropic нравится это.
  12. slice

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

    Симпатии:
    8`841
    Вот это уже интересно! NvramSmiBuffer у тебя есть!
    И железный НВРАМ работает!!!
    Сейчас буду соображать, какие с тебя ответы попросить.
    1. Иорег
    2. Из шелла команду memmap > memmap.efi
     
  13. slice

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

    Симпатии:
    8`841
    Разом чистить НВРАМ наверно нельзя, сам шелл им пользуется, а вот переменные кучкой - пожалуйста
    Звездочка - любой набор символов. -all - с любым GUID
    Screen Shot 2017-02-17 at 17.04.13.
     
  14. Vandroiy

    Vandroiy iГуру

    Симпатии:
    3`834
    Держи.
     

    Вложения:

  15. X-Tropic

    X-Tropic iЮзер

    Симпатии:
    81
    На первой машине из подписи нету переменной NvramSmiBuffer. Дамп прикрепил. Так я не пойму, у меня железный работает или нет? EmuVariable не пользую.
     

    Вложения:

    • VarDump.txt
      Размер файла:
      51.4 КБ
      Просмотров:
      2
  16. droplets

    droplets iГуру

    Симпатии:
    338
    Asus Z170M-Plus.
    Только поставил 10.12.2
    Memmap,dmpstore,panic.log(после сна) в аттаче.
     

    Вложения:

    • z170.zip
      Размер файла:
      640.9 КБ
      Просмотров:
      1
  17. slice

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

    Симпатии:
    8`841
    Извини, я по-китайски не понимаю.
    Снимок экрана 2017-02-17 в 19.32.47.

    Но похоже, что работает!
     
  18. X-Tropic

    X-Tropic iЮзер

    Симпатии:
    81
    Странно, почему кодировка такая... делал как и положено: dmpstore -all -s fs0:\VarDump.txt
     
  19. slice

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

    Симпатии:
    8`841
    Вот уже странно
    В иореге адрес сервисов <18 4e 29 b7 00 00 00 00>
    А в memmap этот адрес лежит в области RT_DATA, должно быть RT_CODE.
    Впрочем, это может быть из-за разницы во-времени.
    А сделай лучше дамп памяти из ДарвинДампера, там галочка Memory даст такой же отчет, зато посмотрим синхронизацию.
     
  20. slice

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

    Симпатии:
    8`841
    И когда прикрепляешь, сначала зазиппуй.
     
Similar Threads: Железный NVRAM
Форум Заголовок Дата
Хакинтош AppleEFINVRAM 5 окт 2010

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