Обновление встроенного ПО мобильных широкополосных устройств
В этом разделе приводятся рекомендации для производителей модулей мобильной широкополосной связи (MB), которые намерены поддерживать устройства обновления встроенного ПО с помощью клиентский компонент Центра обновления Windows (WU). Устройства должны соответствовать спецификации МОДЕЛИ МОБИЛЬНОГО широкополосного интерфейса USB NCM (MBIM) версии 1.0 , выпущенной рабочей группой устройств USB-IF.
Сведения в этом разделе относятся к:
- Windows 8/Windows 10/Windows 11
Требования к устройству
Для поддержки обновлений встроенного ПО в мобильной широкополосной связи с использованием клиентский компонент Центра обновления Windows производители модулей или устройств должны соответствовать следующим требованиям:
- Драйвер на основе UMDF (User Mode Driver Framework), разработанный производителем модуля или устройства, упаковав вместе с INF-файлом и полезными данными встроенного ПО. Пример INF-файла и подробные сведения приведены в следующей части этого документа.
- Встроенное ПО устройства для реализации следующих функций:
- Служба устройств с идентификатором встроенного ПО (FID). Дополнительные сведения см. в разделе Служба устройств FID.
- Встроенное ПО для поддержки службы устройств обновления встроенного ПО. Это служба устройства конкретного производителя устройства, которая предоставляет драйверу UMDF возможность вызывать и выполнять или скачивать полезные данные встроенного ПО, а также запускать процесс обновления встроенного ПО.
Обзор операций
На следующей схеме показан высокоуровневый дизайн и взаимодействие между тремя компонентами: устройство MBIM, Windows 8 операционная система и драйвер обновления встроенного ПО IHV.

- Когда служба WWAN обнаруживает поступление нового устройства в МБ, она будет проверка, если устройство поддерживает службу устройств с идентификатором встроенного ПО (FID). Если он присутствует, он извлекает FID, который определен как GUID. Ниже описана спецификация службы устройств встроенного ПО, необходимая для поддержки IHV на устройстве.
- Служба WWAN (ОС Windows) создаст «мягкий узел устройства», используя fiD, полученный выше в качестве идентификатора оборудования устройства. На приведенной выше схеме это называется Soft Dev Node. Создание узла разработки приведет к запуску подсистемы PnP (ОС Windows), чтобы найти наиболее подходящий драйвер. В Windows 8 система PnP сначала попытается установить драйвер из локального хранилища, если он доступен, а в параллельной ОС попытается получить более подходящий драйвер из WU. Драйвер NULL для папки «Входящие» будет использоваться по умолчанию, если драйвер лучшего соответствия недоступен, чтобы устранить проблему «Драйвер не найден».
- Пакет IHV WU на основе соответствия FID извлекается на компьютер и устанавливается. Ожидается, что FID представляет уникальный номер SKU встроенного ПО (уникальность здесь определяется сочетанием устройств VID/PID/REV и MNO). Пакет WU будет содержать драйвер UMDF, созданный IHV, а также полезные данные встроенного ПО.
- После загрузки UMDF IHV на мягкий узел разработки он отвечает за управление потоком обновления встроенного ПО. Следует отметить, что время жизни мягкого узла разработки привязано к физическому присутствию устройства MBIM. Драйвер UMDF должен выполнить следующие действия для выполнения обновлений встроенного ПО
- Устройство может перезагружать несколько раз во время обновления встроенного ПО, но приведет к тому, что драйвер UMDF будет выгружен или перезагружен.
- Весь процесс обновления встроенного ПО, включая перезагрузки, должен выполняться не более 60 секунд.
- После завершения обновления встроенного ПО и восстановления устройства в режим MBIM windows должны быть уведомлены. Это делается путем очистки ранее заданного свойства DEVPKEY_Device_PostInstallInProgress. Интерфейс IWDFUnifiedPropertyStore описывает, как задать свойство на узле разработки. Ранее заданное свойство можно очистить с помощью DEVPROP_TYPE_EMPTY.
- Во время обратного вызова UMDF OnPrepareHardware драйвер UMDF должен проверка, если необходимо обновить встроенное ПО на устройстве. Для этого сравнивается версия встроенного ПО на устройстве с версией, которая поступила через клиентский компонент Центра обновления Windows. Дополнительные рекомендации приведены далее в документе о расположении двоичного файла встроенного ПО. Если требуется обновление встроенного ПО, драйвер UMDF должен:
- Планирование рабочего элемента. Фактическое обновление встроенного ПО происходит в контексте рабочего элемента.
- После успешного планирования рабочего элемента уведомите Windows о начале обновления встроенного ПО. Для этого необходимо задать свойство DEVPKEY_Device_PostInstallInProgress на мягком узле dev-node в контексте обратного вызова OnPrepareHardware UMDF.
- Важно не блокировать обратный вызов OnPrepareHardware во время обновления встроенного ПО. Ожидается, что обратный вызов OnPrepareHardware будет выполнен не более чем за секунду или две.
Пример INF-файла для пакета WU
В этом разделе приведен пример INF, который является частью пакета WU. Основные моменты, которые следует отметить в INF-файле:
- Двоичные файлы встроенного ПО не зависят от драйвера UMDF.
- Двоичные файлы встроенного ПО находятся в каталоге driverstore, путь, определенный операционной системой и указанный в INF-файле с помощью DIRID 13. Двоичные файлы не могут быть исполняемыми файлами, содержащими заголовки PE/COFF.
- %13%\.bin
- INF-файл сохраняет это расположение в реестре, а драйвер UMDF считывает значение реестра, чтобы обнаружить расположение двоичного файла.
- Пример шаблона INF ниже содержит выделенные элементы, которые должны быть заполнены IHV.
[Version] Signature = "$WINDOWS NT$" Class = Firmware ClassGuid = Provider = %Provider% DriverVer = 06/21/2006,6.2.8303.0 CatalogFile = MBFWDriver.cat PnpLockdown = 1 [Manufacturer] %Mfg% = Firmware,NTx86 [Firmware.NTx86] %DeviceDesc% = Firmware_Install,MBFW\ ; From Device Service ;%DeviceDesc% = Firmware_Install,MBFW\ [Firmware_Install.NT] CopyFiles = FirmwareDriver_CopyFiles,FirmwareImage_CopyFiles [Firmware_Install.NT.HW] AddReg = Device_AddReg [Device_AddReg] HKR,,FirmwareBinary,,"%13%\MBIHVFirmware-XYZ-1.0.bin" [Firmware_Install.NT.Services] AddService = WUDFRd,0x000001fa,WUDFRD_ServiceInstall [WUDFRD_ServiceInstall] DisplayName = %WudfRdDisplayName% ServiceType = 1 StartType = 3 ErrorControl = 1 ServiceBinary = %12%\WUDFRd.sys LoadOrderGroup = Base [Firmware_Install.NT.CoInstallers] CopyFiles = WudfCoInstaller_CopyFiles [WudfCoInstaller_AddReg] HKR,,CoInstallers32,0x00010000,"WUDFCoinstaller.dll" [Firmware_Install.NT.Wdf] UmdfService = MBIHVFirmwareDriver,MBIHVFirmwareDriver_Install UmdfServiceOrder = MBIHVFirmwareDriver [MBIHVFirmwareDriver_Install] UmdfLibraryVersion = 1.11 ServiceBinary = %12%\UMDF\MBFWDriver.dll DriverCLSID = > ; From UMDF driver [FirmwareImage_CopyFiles] MBIHVFirmware-XYZ-1.0.bin ; Firmware Image [FirmwareDriver_CopyFiles] MBFWDriver.dll ; UMDF driver for SoftDevNode [DestinationDirs] FirmwareImage_CopyFiles = 13 ; Driver Store FirmwareDriver_CopyFiles = 12,UMDF ;%SystemRoot%\System32\drivers\UMDF [SourceDisksFiles] MBIHVFirmware-XYZ-1.0.bin = 1 [SourceDisksNames] 1 = %DiskName% ; ================== Generic ================================== [Strings] Provider = "MBIHV" Mfg = "MBIHV" DeviceDesc = "MBIHV Mobile Broadband Firmware Device" DiskName = "Firmware Driver Installation Media"Служба устройств для идентификации встроенного ПО (служба устройств FID)
Устройство, совместимое с MBIM, реализует и сообщает о следующей службе устройства при запросе CID_MBIM_DEVICE_SERVICES. Существующие хорошо известные службы определены в спецификации NCM MBIM в разделе 10.1. Корпорация Майкрософт расширяет эту возможность для определения следующей службы.
Имя службы = идентификатор встроенного ПО Майкрософт
UUID = UUID_MSFWID UUID
Значение = e9f7dea2-feaf-4009-93ce-90a3694103b6
В частности, для службы устройств UUID_MSFWID определяется следующий идентификатор CID:
CID = CID_MBIM_MSFWID_FIRMWAREID
Код команды = 1
Запрос = Да
Set = No
Event = No
Задать полезные данные InformationBuffer = Н/Д
Сведения о запросе Полезные данные пользователя = Н/Д
Сведения о завершении Полезные данныеBuffer = UUID
CID_MBIM_MSFWID_FIRMWAREID
Команда возвращает назначенный MNO или IHV идентификатор встроенного ПО для устройства. UUID кодируется на основе рекомендаций в спецификации MBIM.
Query = InformationBuffer на MBIM_COMMAND_MSG не используется. UUID, возвращенный в MBIM_COMMAND_DONE InformationBuffer.
Set = Unsupported
Незапрашиваемое событие = не поддерживается
Фрагменты кода для поведения драйвера UMDF
Как указывалось ранее, драйвер UMDF должен указать Windows при запуске и завершении обновления встроенного ПО. В этом разделе содержатся фрагменты кода, показывающие, как драйвер должен уведомлять Windows об этих событиях.
/** * This is the IPnpCallbackHardware*:OnPrepareHardware handler * in the UMDF driver. This is called every time the firmware * update is device is started. Since this handler should be * blocked from returning actual the firmware update process * should be done in a workitem */ HRESULT CMyDevice::OnPrepareHardware(IWDFDevice* pDevice) < HRESULT hr = S_OK; BOOL bFirmwareUpdateInProgress = FALSE; BOOL bFirmwareUpdateNeeded = FALSE; BOOL bFirmwareUpdateIsDone = FALSE; // // The snippets below demonstrates the steps for firmware // update against a MB device that loads the updated firmware // on device boot. So the firmware update driver needs to // send the new firmware down to the device and then tell // the device to initiate a stop/start. Once the device has // reappeared, it would have automatically loaded the // new firmware // // // First, determine if firmware update is in progress. This // can be based on some registry key that is saved when // firmware update is started // // Assuming this status is returned in bFirmwareUpdateInProgress if (bFirmwareUpdateInProgress) < // // If firmware update is in progress, check if its done. For // this it may be necessary to access the MB device. Note that // if the MB device (& hence the Firmware update device) needs // multiple stop/starts to do the firmware update. In that case // it will be marked as done at the end of the process // // Assuming this status is returned in bFirmwareUpdateIsDone if (bFirmwareUpdateIsDone) < // // Signal the completion of the firmware update // process. // SignalFirmwareUpdateComplete(pDevice); >else < // // Take appropriate steps to get notified when // firmware update is done. Call SignalFirmwareUpdateComplete // when that notification is received // >> else < // // Determine if firmware update is needed. This can be // based on checking state in the registry of the last // firmware version set on the device to the firmware // version associated with this driver // // Assuming this status is returned in bFirmwareUpdateNeeded if (bFirmwareUpdateNeeded) < // // Create and queue a workitem to perform the firmware // update process. IWDFWorkItem can be used for this // // Assuming the creation/enquing status // is returned in hr if (SUCCEEDED(hr)) < // // Work item queued. It will do the firmware update // Tell the OS that firmware update is in progress // SignalFirmwareUpdateInProgress(pDevice); >> > // // If we have a failure, we clear the firmware update // in progress state // if (FAILED(hr)) < SignalFirmwareUpdateComplete(pDevice); >return S_OK; > /** * This function tells the OS that firmware update is in progress. * It should be called from the firmware update UMDF driver's * IPnpCallbackHardware*:OnPrepareHardware handler after it has * successfully queued a workitem to perform the firmware update */ HRESULT CMyDevice::SignalFirmwareUpdateInProgress( __in IWDFDevice* pDevice ) < HRESULT hr = S_OK; IWDFUnifiedPropertyStoreFactory* spPropertyStoreFactory = NULL; IWDFUnifiedPropertyStore* spPropStore = NULL; WDF_PROPERTY_STORE_ROOT wdfPropRoot = < sizeof(WDF_PROPERTY_STORE_ROOT), WdfPropertyStoreRootClassHardwareKey >; DEVPROP_BOOLEAN boolValue = DEVPROP_TRUE; do < hr = pDevice->QueryInterface(IID_PPV_ARGS(&spPropertyStoreFactory)); if (FAILED(hr)) < Trace(TRACE_LEVEL_ERROR, "Failed to query for property store factory. Error = 0x%x", hr); break; >hr = spPropertyStoreFactory->RetrieveUnifiedDevicePropertyStore( &wdfPropRoot, &spPropStore ); if (FAILED(hr)) < Trace(TRACE_LEVEL_ERROR, "Failed to query for device property store. Error = 0x%x", hr); break; >// Set the OS flag hr = spPropStore->SetPropertyData( reinterpret_cast(&DEVPKEY_Device_PostInstallInProgress), 0, // this property is language neutral 0, DEVPROP_TYPE_BOOLEAN, sizeof(DEVPROP_BOOLEAN), &boolValue ); if (FAILED(hr)) < Trace(TRACE_LEVEL_ERROR, "Failed to set device property for PostInstallInProgress. Error = 0x%x", hr); break; >// // Save some state so that we know we are in the process // of firmware update // > while (FALSE); if (spPropStore) < spPropStore->Release(); > if (spPropertyStoreFactory) < spPropertyStoreFactory->Release(); > return hr; > /** * This function tells the OS that firmware update is done * It should be called only after the full firmware update process * (including any MB device stop/start) has finished */ HRESULT CMyDevice::SignalFirmwareUpdateComplete( __in IWDFDevice* pDevice ) < HRESULT hr = S_OK; IWDFUnifiedPropertyStoreFactory* spPropertyStoreFactory = NULL; IWDFUnifiedPropertyStore* spPropStore = NULL; WDF_PROPERTY_STORE_ROOT wdfPropRoot = < sizeof(WDF_PROPERTY_STORE_ROOT), WdfPropertyStoreRootClassHardwareKey >; do < hr = pDevice->QueryInterface(IID_PPV_ARGS(&spPropertyStoreFactory)); if (FAILED(hr)) < Trace(TRACE_LEVEL_ERROR, "Failed to query for property store factory. Error = 0x%x", hr); break; >hr = spPropertyStoreFactory->RetrieveUnifiedDevicePropertyStore( &wdfPropRoot, &spPropStore ); if (FAILED(hr)) < Trace(TRACE_LEVEL_ERROR, "Failed to query for device property store. Error = 0x%x", hr); break; >hr = spPropStore->SetPropertyData( reinterpret_cast(&DEVPKEY_Device_PostInstallInProgress), 0, // this property is language neutral 0, DEVPROP_TYPE_BOOLEAN, 0, NULL ); if (FAILED(hr)) < Trace(TRACE_LEVEL_ERROR, "Failed to clear device property for PostInstallInProgress. Error = 0x%x", hr); break; >// // Save some state so that we can do quick check on // whether firmware update is needed or not // > while (FALSE); if (spPropStore) < spPropStore->Release(); > if (spPropertyStoreFactory) < spPropertyStoreFactory->Release(); > return hr; >Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Шаблон:Modbus Device Firmware Update
Для устройств с новыми прошивками нужно указать параметр new-fw=true и версию прошивки, начиная с которой настройки не удаляются, в параметре fw-version.
Для устройств со старыми версиями прошивок, в которых настройки при обновлении прошивки удаляются указать параметр lose=true
Для устройств, выпущенных до 2019 года, дополнительно добавить параметр old=true
Для датчиков WB-MS задать параметр MS=true .
Для устройств, которые не теряются настройки при обновлении прошивки изначально, использовать шаблон без параметров.
Пример использования шаблона для устройств теряющих настройки при обновлении:
Пример использования шаблона для устройств, выпущенных до 2019 года:
Пример использования шаблона для устройств с новыми версиями прошивок, не теряющими настройки при обновлении:
Для датчиков WB-MS:
Для устройств не теряющих настройки:
Текст шаблона
В устройствах Wiren Board можно обновлять прошивку по протоколу Modbus. Это даёт возможность устранять найденные в прошивке ошибки на месте монтажа, а иногда и добавлять новые функции, если это возможно технически.
- Обновление прошивки
- Настройка параметров подключения
- Modbus-адрес: узнать, сбросить или изменить
- Обновление загрузчика
Обновление встроенного ПО устройства с помощью клиентский компонент Центра обновления Windows
В этой статье описывается, как обновить встроенное ПО съемного или встроенного устройства с помощью службы клиентский компонент Центра обновления Windows (WU). Сведения об обновлении встроенного ПО системы см. в статье Платформа обновления встроенного ПО Windows UEFI.
Для этого вы предоставите механизм обновления, реализованный в виде драйвера устройства, который включает полезные данные встроенного ПО. Если устройство использует драйвер, предоставленный поставщиком, вы можете добавить логику обновления встроенного ПО и полезные данные в существующий драйвер-функцию или предоставить отдельный пакет драйверов обновления встроенного ПО. Если на устройстве используется драйвер, предоставляемый корпорацией Майкрософт, необходимо предоставить отдельный пакет драйверов обновления встроенного ПО. В обоих случаях пакет драйверов обновления встроенного ПО должен быть универсальным.
Дополнительные сведения об универсальных драйверах см. в статье Начало работы с драйверами Windows. Двоичный файл драйвера может использовать KMDF, UMDF 2 или модель драйвера Windows.
Так как WU не может выполнять программное обеспечение, драйвер обновления встроенного ПО должен передать встроенное ПО Plug and Play (PnP) для установки.
Действия по обновлению драйвера встроенного ПО
Как правило, драйвер обновления встроенного ПО — это упрощенный драйвер устройства, который реализует следующие процедуры:
- При запуске устройства или в функции обратного вызова EVT_WDF_DRIVER_DEVICE_ADD драйвера:
- Определите устройство, к которому оно подключено.
- Определите, имеет ли драйвер версию встроенного ПО, которая является более поздней, чем версия встроенного ПО, которая в настоящее время мигает на оборудовании устройства.
- Если требуется обновление встроенного ПО, установите таймер событий для планирования обновления.
- В противном случае ничего не делать, пока драйвер не будет запущен снова.
- Во время выполнения системы:
- Если обновление поставлено в очередь, дождитесь выполнения набора условий.
- При выполнении условий выполните обновление встроенного ПО на устройстве.
Содержимое драйвера обновления встроенного ПО
Как правило, пакет драйвера обновления встроенного ПО содержит следующие элементы:
- Универсальный драйвер INF
- Каталог драйверов
- Драйвер функции (.sys или .dll)
- Двоичный файл полезных данных обновления встроенного ПО
Отправьте пакет обновления встроенного ПО в виде отдельной отправки драйвера.
Добавление логики обновления встроенного ПО в драйвер, предоставленный поставщиком
Существующий драйвер функции может реализовать механизм обновления встроенного ПО, как показано на следующей схеме:

Кроме того, если вы хотите обновить драйвер функции и драйвер обновления встроенного ПО отдельно, создайте второй узел устройства, на котором будет установлен драйвер обновления встроенного ПО. На следующей схеме показано, как одно устройство может иметь два отдельных узла устройства:

В этом случае узлы устройств функции и встроенного ПО должны иметь разные идентификаторы оборудования, чтобы их можно было использовать независимо друг от друга.
Создать второй узел устройства можно несколькими способами. Некоторые типы устройств могут предоставлять второй узел устройства на одном физическом устройстве, например USB. С помощью этой функции можно создать узел устройства, предназначенный для wu, и установить на нем драйвер обновления встроенного ПО. Однако многие типы устройств не позволяют одному физическому устройству перечислять несколько узлов устройств.
В этом случае используйте расширение INF, указывающее директиву AddComponent, чтобы создать узел устройства, на который можно настроить клиентский компонент Центра обновления Windows, и установить на него драйвер обновления встроенного ПО. В следующем фрагменте из INF-файла показано, как это сделать:
[Manufacturer] %Contoso%=Standard,NTamd64 [Standard.NTamd64] %DeviceName%=Device_Install, PCI\DEVICE_ID [Device_Install.Components] AddComponent=ComponentName,,AddComponentSection [AddComponentSection] ComponentIDs = ComponentDeviceIdВ приведенном выше примере INF указывает, ComponentIDs = ComponentDeviceId что дочернее устройство будет иметь идентификатор SWC\ComponentDeviceId оборудования . При установке этот INF-файл создает следующую иерархию устройств:

Для будущих обновлений встроенного ПО обновите INF-файл и двоичный файл, содержащие полезные данные встроенного ПО.
Добавление логики обновления встроенного ПО в драйвер, предоставляемый Корпорацией Майкрософт
Чтобы обновить встроенное ПО для устройств, использующих драйвер, предоставляемый Корпорацией Майкрософт, необходимо создать второй узел устройства, как показано выше.
Рекомендации
- В inf-файле драйвера обновления встроенного ПО укажите DIRID 13 , чтобы заставить PnP оставить файлы в пакете драйвера в DriverStore:
[Firmware_AddReg] ; Store location of firmware payload HKR,,FirmwareFilename,,"%13%\firmware_payload.bin"Class=Firmware ClassGuid=
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Windows driver documentation
Перевод «device firmware» на русский
Some others are more specialized and less widely implemented, such as personal healthcare and device firmware upgrade.
Некоторые другие являются более специализированными и менее широко используемыми, такими как персональное здравоохранение и обновление прошивки устройства.
Many wireless security companies are advancing their technologies to combat such threats by regularly updating device firmware and implementing new features like push notifications.
Многие компаний, занимающиеся безопасностью, продвигают свои технологии для борьбы с такими угрозами, регулярно обновляя прошивку устройства и внедряя новые функции, такие как push-уведомления.
You can scan, connect, update device firmware, and more.
Вы можете сканировать, подключать, обновлять прошивку устройства и многое другое.Pepper’s turnkey service includes device firmware, secure cloud hosting and intuitive user interface designs.
Услуга Рёррёг включает в себя прошивку устройства, облачный хостинг и интуитивно понятный пользовательский интерфейс.
Some other systems software would include BIOS and other device firmware.
Некоторые другие системные программы включают Bios и прошивку устройства.Remote update of the device firmware is possible owing to the module compatibility with the UpServ update server.
Удаленное обновление прошивки устройства возможно благодаря поддержке сервера обновлений UpServ.
Function «self-destruct», which was mentioned earlier, deletes important part of the device firmware that may at some point to sow chaos.
Функция «самоуничтожения», о которой ранее упоминалось, удаляет важные части прошивки устройства, что может в определенный момент посеять настоящий хаос.
What’s more, the vast majority of devices that aren’t phones, laptops or tablets don’t receive updates automatically, and in many cases it isn’t even possible for end users to update device firmware themselves.
Более того, подавляющее большинство устройств, которые не являются телефонами, ноутбуками или планшетами, не получают обновления автоматически, и во многих случаях даже для конечных пользователей не представляется возможным обновить прошивку устройства самостоятельно.
In fact they do not even need it, because they can access the code used in the security camera or DVR by visiting the manufacturer’s website and downloading the device firmware or by getting it from other hacker.
На самом деле им это даже не нужно, поскольку они могут получить доступ к коду, используемому в камере безопасности или цифровом видеорегистраторе, посетив веб-сайт производителя и загрузив прошивку устройства или получив его от другого хакера.
This tool not only enables Kryptowire researchers to scan Android device firmware without a need to have the physical device itself but also automatically creates a proof of concept exploit.
Этот инструмент не только позволяет исследователям Kryptowire сканировать прошивку устройства Android без необходимости иметь само физическое устройство в наличии, но также автоматически создает доказательство использования концепции.
Let’s skip the description of how we found the image of the file system for the required device (we describe different ways of getting device firmware with examples as part of our IoT/embedded device vulnerability search training).
Опустим описание того, как мы нашли образ файловой системы для нужного нам устройства (о том, как различными способами получить прошивку устройства, мы на примерах рассказываем на тренинге по поиску уязвимостей в IoT и встраиваемых устройствах).
In order to proceed, you need to put your phone in the DFU (Device Firmware Update) mode.
Кроме того, вам необходимо убедиться, что ваш телефон находится в режиме DFU (обновление прошивки устройства).
From this step, the operation differs depending on the iPhone model you want to put in Device Firmware Update (DFU) Mode.
На этом этапе операция отличается в зависимости от модели iPhone, которую вы хотите ввести Режим обновления прошивки устройства (DFU).