Ошибка cannot load image

After compiling OpenCV’s source and configuring Windows 7 and VS2010 to link the libraries correctly, I was able to compile the following code:

#include <opencv2/highgui/highgui.hpp>
#include <iostream>

using namespace cv;
using namespace std;
int main()
{
    Mat im = imread("C:projectscvtest3lena.jpg"); // this *is* the proper path, I'm sure

    if (im.empty()) 
    {

        cout << "Cannot load image!" << endl;
                while (true){}
        return -1;
    }
    imshow("Image", im);
    waitKey(0);
}

Even though the path is correctly specified I can’t get this code to show the lena image. Is there anything wrong with the code here?

Although the code compiles, this is the full output while building:

'cvtest3.exe': Loaded 'C:projectscvtest3Debugcvtest3.exe', Symbols loaded.
'cvtest3.exe': Loaded 'C:WindowsSysWOW64ntdll.dll', Cannot find or open the PDB file
'cvtest3.exe': Loaded 'C:WindowsSysWOW64kernel32.dll', Cannot find or open the PDB file
'cvtest3.exe': Loaded 'C:WindowsSysWOW64KernelBase.dll', Cannot find or open the PDB file
'cvtest3.exe': Loaded 'C:UsersantonioDocumentsopencv_build_32bitsinstallbinopencv_core249d.dll', Symbols loaded.
'cvtest3.exe': Loaded 'C:Program FilesNVIDIA GPU Computing ToolkitCUDAv5.0bincudart32_50_35.dll', Binary was not built with debug information.
'cvtest3.exe': Loaded 'C:Program FilesNVIDIA GPU Computing ToolkitCUDAv5.0binnpp32_50_35.dll', Binary was not built with debug information.
'cvtest3.exe': Loaded 'C:WindowsSysWOW64msvcp100d.dll', Cannot find or open the PDB file
'cvtest3.exe': Loaded 'C:WindowsSysWOW64msvcr100d.dll', Cannot find or open the PDB file
'cvtest3.exe': Loaded 'C:UsersantonioDocumentsopencv_build_32bitsinstallbinopencv_highgui249d.dll', Symbols loaded.
'cvtest3.exe': Loaded 'C:WindowsSysWOW64user32.dll', Cannot find or open the PDB file
'cvtest3.exe': Loaded 'C:WindowsSysWOW64gdi32.dll', Cannot find or open the PDB file
'cvtest3.exe': Loaded 'C:WindowsSysWOW64lpk.dll', Cannot find or open the PDB file
'cvtest3.exe': Loaded 'C:WindowsSysWOW64usp10.dll', Cannot find or open the PDB file
'cvtest3.exe': Loaded 'C:WindowsSysWOW64msvcrt.dll', Cannot find or open the PDB file
'cvtest3.exe': Loaded 'C:WindowsSysWOW64advapi32.dll', Cannot find or open the PDB file
'cvtest3.exe': Loaded 'C:WindowsSysWOW64sechost.dll', Cannot find or open the PDB file
'cvtest3.exe': Loaded 'C:WindowsSysWOW64rpcrt4.dll', Cannot find or open the PDB file
'cvtest3.exe': Loaded 'C:WindowsSysWOW64sspicli.dll', Cannot find or open the PDB file
'cvtest3.exe': Loaded 'C:WindowsSysWOW64cryptbase.dll', Cannot find or open the PDB file
'cvtest3.exe': Loaded 'C:WindowsSysWOW64ole32.dll', Cannot find or open the PDB file
'cvtest3.exe': Loaded 'C:WindowsSysWOW64oleaut32.dll', Cannot find or open the PDB file
'cvtest3.exe': Loaded 'C:Windowswinsxsx86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.7601.17514_none_ec83dffa859149afcomctl32.dll', Cannot find or open the PDB file
'cvtest3.exe': Loaded 'C:WindowsSysWOW64avifil32.dll', Cannot find or open the PDB file
'cvtest3.exe': Loaded 'C:WindowsSysWOW64winmm.dll', Cannot find or open the PDB file
'cvtest3.exe': Loaded 'C:WindowsSysWOW64msacm32.dll', Cannot find or open the PDB file
'cvtest3.exe': Loaded 'C:WindowsSysWOW64msvfw32.dll', Cannot find or open the PDB file
'cvtest3.exe': Loaded 'C:WindowsSysWOW64shell32.dll', Cannot find or open the PDB file
'cvtest3.exe': Loaded 'C:WindowsSysWOW64shlwapi.dll', Cannot find or open the PDB file
'cvtest3.exe': Loaded 'C:WindowsSysWOW64avicap32.dll', Cannot find or open the PDB file
'cvtest3.exe': Loaded 'C:WindowsSysWOW64version.dll', Cannot find or open the PDB file
'cvtest3.exe': Loaded 'C:WindowsSysWOW64imm32.dll', Cannot find or open the PDB file
'cvtest3.exe': Loaded 'C:WindowsSysWOW64msctf.dll', Cannot find or open the PDB file
The thread 'Win32 Thread' (0x2028) has exited with code -1073741510 (0xc000013a).

@zboinek
@kylynf

Here is an extract of my training output. It took about 5 minutes to perform 154 iterations.

I compiled YOLO with GPU=1 set in the makefile. To do this I first had to install the CUDA Toolkit. My GPU is the NVIDIA GeForce GTX 1060 (which is CUDA compatible).

A .backup file and .weights file were saved to the backup folder after 100 iterations. These are both the same weights. After another 100 iterations the .backup file will be updated and another .weights file is created.

jason@Jason-Ubuntu:~/darknet$ ./darknet detector train NFPA/nfpa.data NFPA/yolov2-tiny-voc.cfg darknet19_448.conv.23 
yolov2-tiny-voc
layer     filters    size              input                output
    0 conv     16  3 x 3 / 1   416 x 416 x   3   ->   416 x 416 x  16  0.150 BFLOPs
    1 max          2 x 2 / 2   416 x 416 x  16   ->   208 x 208 x  16
    2 conv     32  3 x 3 / 1   208 x 208 x  16   ->   208 x 208 x  32  0.399 BFLOPs
    3 max          2 x 2 / 2   208 x 208 x  32   ->   104 x 104 x  32
    4 conv     64  3 x 3 / 1   104 x 104 x  32   ->   104 x 104 x  64  0.399 BFLOPs
    5 max          2 x 2 / 2   104 x 104 x  64   ->    52 x  52 x  64
    6 conv    128  3 x 3 / 1    52 x  52 x  64   ->    52 x  52 x 128  0.399 BFLOPs
    7 max          2 x 2 / 2    52 x  52 x 128   ->    26 x  26 x 128
    8 conv    256  3 x 3 / 1    26 x  26 x 128   ->    26 x  26 x 256  0.399 BFLOPs
    9 max          2 x 2 / 2    26 x  26 x 256   ->    13 x  13 x 256
   10 conv    512  3 x 3 / 1    13 x  13 x 256   ->    13 x  13 x 512  0.399 BFLOPs
   11 max          2 x 2 / 1    13 x  13 x 512   ->    13 x  13 x 512
   12 conv   1024  3 x 3 / 1    13 x  13 x 512   ->    13 x  13 x1024  1.595 BFLOPs
   13 conv   1024  3 x 3 / 1    13 x  13 x1024   ->    13 x  13 x1024  3.190 BFLOPs
   14 conv     30  1 x 1 / 1    13 x  13 x1024   ->    13 x  13 x  30  0.010 BFLOPs
   15 detection
mask_scale: Using default '1.000000'
Loading weights from darknet19_448.conv.23...Done!
Learning Rate: 0.001, Momentum: 0.9, Decay: 0.0005
Resizing
384
Loaded: 0.000034 seconds
Region Avg IOU: 0.591076, Class: 1.000000, Obj: 0.499727, No Obj: 0.500027, Avg Recall: 0.800000,  count: 10
Region Avg IOU: 0.342480, Class: 1.000000, Obj: 0.499824, No Obj: 0.500030, Avg Recall: 0.500000,  count: 8
Region Avg IOU: 0.398422, Class: 1.000000, Obj: 0.499315, No Obj: 0.500029, Avg Recall: 0.428571,  count: 14
Region Avg IOU: 0.301751, Class: 1.000000, Obj: 0.499156, No Obj: 0.500028, Avg Recall: 0.400000,  count: 10
Region Avg IOU: 0.422285, Class: 1.000000, Obj: 0.499392, No Obj: 0.500029, Avg Recall: 0.500000,  count: 8
Region Avg IOU: 0.234298, Class: 1.000000, Obj: 0.499153, No Obj: 0.500028, Avg Recall: 0.178571,  count: 28
Region Avg IOU: 0.379142, Class: 1.000000, Obj: 0.499205, No Obj: 0.500026, Avg Recall: 0.400000,  count: 10
Region Avg IOU: 0.221257, Class: 1.000000, Obj: 0.499537, No Obj: 0.500027, Avg Recall: 0.250000,  count: 8
1: 196.524750, 196.524750 avg, 0.001000 rate, 1.498131 seconds, 64 images
Loaded: 0.000041 seconds
Region Avg IOU: 0.443352, Class: 1.000000, Obj: 0.495614, No Obj: 0.495432, Avg Recall: 0.625000,  count: 8
Region Avg IOU: 0.540963, Class: 1.000000, Obj: 0.495293, No Obj: 0.495435, Avg Recall: 0.875000,  count: 8
Region Avg IOU: 0.356452, Class: 1.000000, Obj: 0.495300, No Obj: 0.495434, Avg Recall: 0.555556,  count: 9
Region Avg IOU: 0.544373, Class: 1.000000, Obj: 0.495129, No Obj: 0.495431, Avg Recall: 0.818182,  count: 11
Region Avg IOU: 0.315706, Class: 1.000000, Obj: 0.494998, No Obj: 0.495432, Avg Recall: 0.444444,  count: 9
Region Avg IOU: 0.358486, Class: 1.000000, Obj: 0.494840, No Obj: 0.495434, Avg Recall: 0.500000,  count: 8
Region Avg IOU: 0.453712, Class: 1.000000, Obj: 0.495120, No Obj: 0.495432, Avg Recall: 0.500000,  count: 8
Region Avg IOU: 0.468369, Class: 1.000000, Obj: 0.494803, No Obj: 0.495434, Avg Recall: 0.500000,  count: 14
2: 185.430191, 195.415298 avg, 0.001000 rate, 1.092638 seconds, 128 images
Loaded: 0.000033 seconds
Region Avg IOU: 0.369313, Class: 1.000000, Obj: 0.485858, No Obj: 0.486759, Avg Recall: 0.500000,  count: 8
Region Avg IOU: 0.366365, Class: 1.000000, Obj: 0.486704, No Obj: 0.486759, Avg Recall: 0.500000,  count: 8
Region Avg IOU: 0.400188, Class: 1.000000, Obj: 0.486290, No Obj: 0.486759, Avg Recall: 0.444444,  count: 9
Region Avg IOU: 0.241825, Class: 1.000000, Obj: 0.485891, No Obj: 0.486763, Avg Recall: 0.222222,  count: 9
Region Avg IOU: 0.431668, Class: 1.000000, Obj: 0.486198, No Obj: 0.486757, Avg Recall: 0.500000,  count: 12
Region Avg IOU: 0.544339, Class: 1.000000, Obj: 0.486478, No Obj: 0.486759, Avg Recall: 0.857143,  count: 7
Region Avg IOU: 0.487178, Class: 1.000000, Obj: 0.486183, No Obj: 0.486758, Avg Recall: 0.600000,  count: 10
Region Avg IOU: 0.427375, Class: 1.000000, Obj: 0.486401, No Obj: 0.486760, Avg Recall: 0.625000,  count: 8
3: 181.007828, 193.974548 avg, 0.001000 rate, 1.135743 seconds, 192 images


...


Loaded: 0.000040 seconds
Region Avg IOU: 0.521117, Class: 1.000000, Obj: 0.016137, No Obj: 0.016265, Avg Recall: 0.750000,  count: 8
Region Avg IOU: 0.445559, Class: 1.000000, Obj: 0.016181, No Obj: 0.016267, Avg Recall: 0.555556,  count: 9
Region Avg IOU: 0.405584, Class: 1.000000, Obj: 0.016051, No Obj: 0.016259, Avg Recall: 0.555556,  count: 9
Region Avg IOU: 0.638974, Class: 1.000000, Obj: 0.016379, No Obj: 0.016254, Avg Recall: 0.875000,  count: 8
Region Avg IOU: 0.280449, Class: 1.000000, Obj: 0.016420, No Obj: 0.016266, Avg Recall: 0.111111,  count: 18
Region Avg IOU: 0.400591, Class: 1.000000, Obj: 0.016070, No Obj: 0.016266, Avg Recall: 0.555556,  count: 9
Region Avg IOU: 0.547657, Class: 1.000000, Obj: 0.016353, No Obj: 0.016258, Avg Recall: 0.750000,  count: 8
Region Avg IOU: 0.371884, Class: 1.000000, Obj: 0.016042, No Obj: 0.016262, Avg Recall: 0.500000,  count: 8
100: 10.851920, 13.160944 avg, 0.001000 rate, 1.618434 seconds, 6400 images
Saving weights to NFPA/backup/yolov2-tiny-voc.backup
Saving weights to NFPA/backup/yolov2-tiny-voc_100.weights


...


Loaded: 0.000043 seconds
Region Avg IOU: 0.403313, Class: 1.000000, Obj: 0.014164, No Obj: 0.014287, Avg Recall: 0.400000,  count: 10
Region Avg IOU: 0.360459, Class: 1.000000, Obj: 0.014621, No Obj: 0.014292, Avg Recall: 0.333333,  count: 12
Region Avg IOU: 0.367700, Class: 1.000000, Obj: 0.013823, No Obj: 0.014286, Avg Recall: 0.500000,  count: 8
Region Avg IOU: 0.405575, Class: 1.000000, Obj: 0.013849, No Obj: 0.014278, Avg Recall: 0.375000,  count: 8
Region Avg IOU: 0.436118, Class: 1.000000, Obj: 0.013024, No Obj: 0.014293, Avg Recall: 0.555556,  count: 9
Region Avg IOU: 0.485750, Class: 1.000000, Obj: 0.014712, No Obj: 0.014294, Avg Recall: 0.642857,  count: 14
Region Avg IOU: 0.316758, Class: 1.000000, Obj: 0.013006, No Obj: 0.014288, Avg Recall: 0.375000,  count: 8
Region Avg IOU: 0.420868, Class: 1.000000, Obj: 0.012581, No Obj: 0.014285, Avg Recall: 0.500000,  count: 10
153: 10.040620, 11.442871 avg, 0.001000 rate, 1.591577 seconds, 9792 images
Loaded: 0.000037 seconds
Region Avg IOU: 0.386361, Class: 1.000000, Obj: 0.013367, No Obj: 0.014264, Avg Recall: 0.444444,  count: 9
Region Avg IOU: 0.461056, Class: 1.000000, Obj: 0.012953, No Obj: 0.014272, Avg Recall: 0.500000,  count: 10
Region Avg IOU: 0.294480, Class: 1.000000, Obj: 0.014540, No Obj: 0.014262, Avg Recall: 0.181818,  count: 33
Region Avg IOU: 0.366687, Class: 1.000000, Obj: 0.013329, No Obj: 0.014265, Avg Recall: 0.555556,  count: 9
Region Avg IOU: 0.216087, Class: 1.000000, Obj: 0.013347, No Obj: 0.014260, Avg Recall: 0.153846,  count: 13
Region Avg IOU: 0.279263, Class: 1.000000, Obj: 0.013682, No Obj: 0.014256, Avg Recall: 0.250000,  count: 8
Region Avg IOU: 0.477770, Class: 1.000000, Obj: 0.014243, No Obj: 0.014266, Avg Recall: 0.625000,  count: 8
Region Avg IOU: 0.378830, Class: 1.000000, Obj: 0.013621, No Obj: 0.014266, Avg Recall: 0.444444,  count: 9
154: 11.001608, 11.398745 avg, 0.001000 rate, 1.569078 seconds, 9856 images

В этом уроке мы покажем вам, как исправить ошибку «не удается загрузить recovery.img». Существует бесчисленное количество настроек, которые можно выполнить на устройстве Android. Ну, мы говорим не только об установке пользовательских программ запуска или тем из Play Store. Это только вершина айсберга. Если вы разблокируете загрузчик своего устройства, то вы буквально откроете шлюзы в мир кастомизации. От установки пользовательских ПЗУ до перепрошивки модулей Magisk и Xposed Framework и тем Substratum — нет ограничений, до которых вы могли бы выполнять эти настройки.

Но для большинства этих модификаций (кроме разблокировки загрузчика) в первую очередь нужен работающий кастомный рекавери типа TWRP. На самом деле не имеет значения, официальная это сборка, неофициальная или модифицированная, использующая исходный код TWRP. Если у вас есть TRWP, у вас есть ключи к настройкам. Хотя каждое Android-устройство имеет собственное стандартное восстановление, его функциональность сильно ограничена. Вы можете выполнять только те действия, которые возможны при заблокированном загрузчике.

Это связано с тем, что OEM-производители выступают против практики разблокировки загрузчика и хотят, чтобы стандартная ОС, поставляемая с устройством, использовалась всеми без исключения. Но поскольку мы живем в экосистеме с открытым исходным кодом, такие ограничения легко обходят все до одного. Таким образом, пользовательское восстановление является основным условием для вышеупомянутых настроек. К сожалению, его прошивка может оказаться немного сложной для некоторых пользователей. Мы видим, как бесчисленное количество пользователей застревают на самом начальном экране мигания/загрузки.

Их приветствует сообщение, которое гласит: «Ошибка: не удается загрузить recovery.img». В этом уроке мы рассмотрим все возможные причины, по которым вы можете столкнуться с этой проблемой. Кроме того, мы также перечислим все возможные исправления этой проблемы. В целом, мы упомянем три разных типа исправлений ошибки: Не удается загрузить recovery.img. Мы гарантируем вам, что любой из трех способов обязательно исправит эту ошибку. Итак, без лишних слов, вот все необходимые инструкции по этому поводу. Следуйте вместе.

Важные обновления, связанные с перепрошивкой TWRP

Еще несколько лет назад была только одна команда для установки TWRP на ваше устройство. Но с Android Oreo 8.1 Google представила концепцию Project Treble, которая затем привела к созданию устройств с разделами A/B. Впоследствии это породило еще одну команду прошить TWRP Recovery. На начальных этапах мы использовали только следующую команду для установки TWRP:

восстановление через fastboot flash recovery.img

Это позволит без проблем напрямую запустить восстановление в раздел восстановления вашего устройства. Однако с Проект высоких частот, разделы устройств претерпели серьезные изменения. Раздела восстановления больше нет. Роль этого раздела теперь назначена загрузочному разделу. Итак, теперь мы не можем напрямую использовать приведенную выше команду для прошивки восстановления в раздел восстановления, а скорее используем приведенную ниже команду для загрузки устройства в загрузочный раздел:

fastboot boot recovery.img

После того, как устройство загрузится в TWRP, вы затем прошиваете файл twrp.zip, чтобы навсегда установить TWRP или использовать функциональные возможности Ramdisk TWRP. Так что это было одно из основных изменений, касающихся того, как мы работаем с TWRP Recovery. Хотя это не является исправлением как таковым, мы подумали, чтобы вы были в курсе важной информации. Теперь, когда объяснение ясно, вот все три способа исправить ошибку не удается загрузить recovery.img. Не пропустите: как прошить кастомную прошивку без TWRP Recovery

Не удается загрузить recovery.img Исправление 1: Инструменты платформы Android SDK

Нам нужен Android SDK Platform Tools, установленный на ПК для успешного выполнения команд ADB и Fastboot. Хотя существует множество других сторонних инструментов, мы рекомендуем вам использовать только этот инструмент, созданный Google. Это связано с тем, что в других инструментах могут отсутствовать двоичные файлы. При этом самая большая ошибка, которую совершают многие пользователи, заключается в том, что они забывают перенести загруженное восстановление TWRP в папку Android SDK Platform Tools.

  1. Другими словами, вы должны перенести TWRP Recovery в папку с инструментами платформы.
  2. Как только это будет сделано, перейдите в адресную строку папки platform-tools, введите CMD в адресной строке и нажмите Enter. Это запустит командную строку.
  3. Теперь загрузите устройство в режим быстрой загрузки, а затем подключите его к ПК. Для этого включите отладку по USB на вашем устройстве и введите следующую команду: adb reboot bootloader

    устройство xiaomi в режиме быстрой загрузкиРежим быстрой загрузки в Xiaomi

  4. Теперь ваше устройство загрузится в режиме Fastboot/Bootloader. Используйте команду ниже, чтобы загрузить ваше устройство в TWRP: fastboot boot recovery.img
  5. Точно так же вы также можете напрямую прошить TWRP в загрузочный раздел. Это можно сделать с помощью следующей команды: fastboot flash boot recovery.img
  6. При выполнении любой из двух вышеуказанных команд ваше устройство загрузится в TWRP. Но это может быть просто временная установка. Чтобы установить его на постоянной основе, есть два разных подхода. На некоторых устройствах есть файлы TWRP ZIP и TWRP IMG. Однако на других устройствах есть только файл TWRP IMG.
  7. Если на вашем устройстве есть ZIP-файл TWRP, перенесите его на свое устройство. С другой стороны, если у него есть только файл IMG, перенесите этот файл TWRP IMG на свое устройство. Для передачи файлов вы можете использовать метод боковой загрузки ADB, смонтировать устройство через TWRP или использовать USB-OTG. Все это было подробно объяснено здесь: [3 METHODS] Как перенести или установить файлы через TWRP Recovery.
  8. После того, как файл был прошит, давайте продолжим. Если вы перенесли ZIP-файл TWRP, перейдите в «Установить», выберите TWRP.ZIP и проведите пальцем вправо, чтобы прошить его.
    install-twrp-zip-fix-cannot-load-recovery.img
  9. С другой стороны, если вы перенесли файл TWRP IMG, вам придется установить его на раздел Ramdisk. Для этого перейдите в «Дополнительно»> «Установить Recovery Ramdisk»> «Выберите файл TWRP IMG»> «Проведите пальцем вправо», чтобы прошить его.
    установить twrp recovery ramdisk исправить не удается загрузить файл recovery.img

Вот и все. Это был первый способ исправить ошибку не удается загрузить recovery.img. Для большинства читателей этот метод мог решить эту проблему. Однако, если вы не принадлежите к этой группе, не проблема. Вас ждут еще два исправления, попробуйте их!

Не удается загрузить recovery.img Исправление 2: проверьте имя восстановления

При загрузке TWRP Recovery мы обычно используем быстрая загрузка twrp.img команда. Точно так же для перепрошивки пользователи используют команда fastboot flash recovery twrp.img. Но вот в чем дело. В большинстве случаев рекавери называется не просто TWRP. Полное имя восстановления — это что-то вроде строк, которые включают ключевое слово twrp, за которым следует имя версии, а затем кодовое имя устройства.

Например, полное имя рекавери для OnePlus 7 Pro — twrp-3.4.0-0-guacamole.img. В этом случае, если вы попробуете быстрая загрузка twrp.img команда, окно CMD не сможет распознать этот тип файла. Поэтому, чтобы решить эту проблему, обязательно переименуйте кастомное рекавери в twrp. После этого выполните команду fastboot flash recovery twrp.img или fastboot boot twrp.img, и проблема с невозможностью загрузки recovery.img исчезнет.

Однако, если вы не хотите переименовывать маршрут, есть другой способ решить эту проблему. Вы можете просто написать команду «fastboot flash recovery» или «fastboot boot», а затем перетащить файл TWRP Recovery рядом с этой командой. Командное окно автоматически подберет остальную часть имени восстановления. Но даже для этого вам придется переместить этот TWRP в папку с инструментами платформы. Как только это будет сделано, вот что нужно сделать:

  1. Запустите окно командной строки в папке инструментов платформы, введя CMD в адресной строке и нажав Enter.
    командная строка тврп
  2. Теперь введите рекавери с быстрой загрузкой или быстрая загрузка команду в соответствии с необходимостью и перетащите восстановление twrp рядом с ней (см. изображение ниже). Предположим, мы используем файл TWRP OnePlus 7 Pro и поместили файл twrp.img в папку D:platform-tools, тогда команда автоматически преобразуется в загрузку fastboot D:platform-toolstwrp-3.4.0- 0-гуакамоле.img.
    Fastboot boot twrp fix не может загрузить twrp.img
  3. Как только команда будет автоматически заполнена, нажмите клавишу Enter, чтобы выполнить команду. Вот и все. Вы успешно прошили TWRP Recovery, а также исправили ошибку «невозможно загрузить recovery.img».

Не удается загрузить recovery.img Исправление 3: проблема с расширением именования

Новички обычно ищут в Интернете руководства по перепрошивке. И хотя шаги упоминаются хорошо и хорошо, есть только одна проблема, которую я видел в бесчисленном множестве блогов. В большинстве этих руководств пользователям предлагается переименовать рекавери в twrp.img или recovery.img. И они заканчивают это предложение. Но вот в чем проблема.

Часть .img — это не название рекавери, а расширение. Однако, судя по приведенному выше правилу, многие пользователи в конечном итоге называют загруженное восстановление как twrp.img или recovery.img, что, в свою очередь, дает полное имя как twrp.img.img или recovery.img.img. Да, возможно, вы неосознанно добавили два .img, один для соглашения об именах, а другой как часть расширения.

И при написании команд мы всегда пишем и расширение файла. Это одна из причин, по которой вы можете столкнуться с ошибкой не удается загрузить recovery.img. Итак, чтобы исправить эту проблему, просто переименуйте рекавери в twrp или recovery. Тогда полное имя будет twrp.img или recovery.img, и с этим проблема также будет устранена.

Заключение

На этом мы завершаем руководство о том, как исправить ошибку не удается загрузить recovery.img. Мы упомянули три разных исправления для одного и того же, любое из которых обязательно решит эту проблему. Но если вы все еще сталкиваетесь с этой проблемой (вероятность чего довольно редка), сообщите нам об этом в комментариях. Кроме того, если есть какие-либо другие проблемы с рутированием, разблокировкой или TWRP для Android, вы также можете спросить нас об этом. Вы являетесь владельцем раздела комментариев 🙂 Не пропустите: загрузите порт Google Camera GCam для всех устройств Android.

hello!

brief description of my problem:
-> when booting a custom, signed .efi (bundle, containing linux kernel + initramfs files) from grub I get this error:

/EndEntire
file path: {path}/EndEntire
error: cannot load image

what I ask the community for:
advice and ideas for further troubleshooting

my setup:
I have attached an installation log describing all steps I took for installing archlinux to the end of the post.
here I am only going to summarize the steps, that are important for my problem (as far as I can tell):

I am dual-booting windows 10 and arch, with the following drive config:

  • m2.drive with windows install and bootmgfw.efi (windows boot loader)

  • ssd with archlinux. partitioned as:

    1. EFI partition: Fat32, 512MiB

    2. lvm partition: rest of the drive; 3 logical partitions: root, /home, /usr

I already managed to configure grub to be able to chainload the windows boot loader while secure boot is enabled (and checked inside windows if it actually loaded with secure boot)
I followed the steps in the archwiki: link to Wiki
(of course I installed arch in UEFI mode)

In short:
I have installed the signed shim loader and enrolled my MOK in the interface of MokManager.efi.
I then was able to load the previously signed grubx64.efi and chainload windows as described above.
Check my grub.cfg for references on the exact menu-entries for grub.

However my problem is chainloading the custom, signed .efi bundle (containing my archlinux).

How I created that bundle .efi:
first I did all steps manually, but later found this package in the AUR which does exactly the same steps (+ creating a hook for kernel updates): https://aur.archlinux.org/packages/sbupdate-git/
I can boot this .efi with secure boot disabled, so I know that it works.
And I did verify the signature with:

sbverify --cert /CERT /file

NOW:

Somehow that .efi is loading some unsigned things (I dont want to say modules, to let all possibilities open).
I know that because:
I renamed my custom .efi bundle to grubx64.efi and had the shim chainload it. this resulted in an error saying, that the bootloader could not verify the image. Basically: Something went wrong in the trust chain and that is what that grub error means.
I want to add, that I have the nvidia drivers installed, but have them blacklisted via the corresponding blacklist entries in

usr/lib/modprobe.d/custom.conf

I am not aware of any other «proprietary» kernel modules that I have installed, that could be causing the problem.

So now I am stuck here and do not know, how to proceed.

It might be noteworthy, that I tried the following kernel boot parameter to prevent the kernel from loading any unsigned modules:

I also tried blacklisting the nvidia modules form the kernel boot parameters, but setting those parameters did not prevent the nvidia kernel modules from loading. I am aware, that I have to include the boot parameters in the .efi file, so I did that and when booting the image

shows the correct line I want.
But as I could not blacklist the nvidia modules from the boot parameters, I am suspicious, that there might be something going on with the boot parameters and the .efi. this is another topic though, just wanted to hint to that.

I am very greatfull for any help I can get.
One of the reasons I switched from Ubuntu to Arch was the mighty fame of the archlinux community. But I did not think that I would be experiencing this community myself that early!

THANKS to everybody!!!

My grub.cfg

#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
insmod part_gpt
insmod part_msdos
if [ -s $prefix/grubenv ]; then
  load_env
fi
if [ "${next_entry}" ] ; then
   set default="${next_entry}"
   set next_entry=
   save_env next_entry
   set boot_once=true
else
   set default="0"
fi

if [ x"${feature_menuentry_id}" = xy ]; then
  menuentry_id_option="--id"
else
  menuentry_id_option=""
fi

export menuentry_id_option

if [ "${prev_saved_entry}" ]; then
  set saved_entry="${prev_saved_entry}"
  save_env saved_entry
  set prev_saved_entry=
  save_env prev_saved_entry
  set boot_once=true
fi

function savedefault {
  if [ -z "${boot_once}" ]; then
    saved_entry="${chosen}"
    save_env saved_entry
  fi
}

function load_video {
  if [ x$feature_all_video_module = xy ]; then
    insmod all_video
  else
    insmod efi_gop
    insmod efi_uga
    insmod ieee1275_fb
    insmod vbe
    insmod vga
    insmod video_bochs
    insmod video_cirrus
  fi
}

if [ x$feature_default_font_path = xy ] ; then
   font=unicode
else
insmod part_gpt
insmod lvm
insmod ext2
set root='lvmid/efa59n-Za7F-Y3KY-MJP1-xJqc-a8m3-IXI8Rx/VyKiZx-v0lo-cqyJ-aN9s-liyO-OnDZ-lPajrG'
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint='lvmid/efa59n-Za7F-Y3KY-MJP1-xJqc-a8m3-IXI8Rx/VyKiZx-v0lo-cqyJ-aN9s-liyO-OnDZ-lPajrG'  73b60da1-82c2-420a-bbaa-89b32d8a5b1f
else
  search --no-floppy --fs-uuid --set=root 73b60da1-82c2-420a-bbaa-89b32d8a5b1f
fi
    font="/share/grub/unicode.pf2"
fi

if loadfont $font ; then
  set gfxmode=auto
  load_video
  insmod gfxterm
  set locale_dir=$prefix/locale
  set lang=en_US
  insmod gettext
fi
terminal_input console
terminal_output gfxterm
if [ x$feature_timeout_style = xy ] ; then
  set timeout_style=menu
  set timeout=5
# Fallback normal timeout code in case the timeout_style feature is
# unavailable.
else
  set timeout=5
fi
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/10_linux ###
menuentry 'Arch Linux' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-71cff29d-d4a0-4584-adc2-b0beecb92609' {
	load_video
	set gfxpayload=keep
	insmod gzio
	insmod part_gpt
	insmod lvm
	insmod ext2
	set root='lvmid/efa59n-Za7F-Y3KY-MJP1-xJqc-a8m3-IXI8Rx/HDVtYt-X4fN-oe8k-rxfc-xgG3-ct23-uGTH3s'
	if [ x$feature_platform_search_hint = xy ]; then
	  search --no-floppy --fs-uuid --set=root --hint='lvmid/efa59n-Za7F-Y3KY-MJP1-xJqc-a8m3-IXI8Rx/HDVtYt-X4fN-oe8k-rxfc-xgG3-ct23-uGTH3s'  71cff29d-d4a0-4584-adc2-b0beecb92609
	else
	  search --no-floppy --fs-uuid --set=root 71cff29d-d4a0-4584-adc2-b0beecb92609
	fi
	echo	'Loading Linux linux ...'
	linux	/boot/vmlinuz-linux root=/dev/mapper/vg0-lv_root rw  quiet
	echo	'Loading initial ramdisk ...'
	initrd	/boot/intel-ucode.img /boot/initramfs-linux.img
}
submenu 'Advanced options for Arch Linux' $menuentry_id_option 'gnulinux-advanced-71cff29d-d4a0-4584-adc2-b0beecb92609' {
	menuentry 'Arch Linux, with Linux linux' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-linux-advanced-71cff29d-d4a0-4584-adc2-b0beecb92609' {
		load_video
		set gfxpayload=keep
		insmod gzio
		insmod part_gpt
		insmod lvm
		insmod ext2
		set root='lvmid/efa59n-Za7F-Y3KY-MJP1-xJqc-a8m3-IXI8Rx/HDVtYt-X4fN-oe8k-rxfc-xgG3-ct23-uGTH3s'
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root --hint='lvmid/efa59n-Za7F-Y3KY-MJP1-xJqc-a8m3-IXI8Rx/HDVtYt-X4fN-oe8k-rxfc-xgG3-ct23-uGTH3s'  71cff29d-d4a0-4584-adc2-b0beecb92609
		else
		  search --no-floppy --fs-uuid --set=root 71cff29d-d4a0-4584-adc2-b0beecb92609
		fi
		echo	'Loading Linux linux ...'
		linux	/boot/vmlinuz-linux root=/dev/mapper/vg0-lv_root rw  quiet
		echo	'Loading initial ramdisk ...'
		initrd	/boot/intel-ucode.img /boot/initramfs-linux.img
	}
	menuentry 'Arch Linux, with Linux linux (fallback initramfs)' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-linux-fallback-71cff29d-d4a0-4584-adc2-b0beecb92609' {
		load_video
		set gfxpayload=keep
		insmod gzio
		insmod part_gpt
		insmod lvm
		insmod ext2
		set root='lvmid/efa59n-Za7F-Y3KY-MJP1-xJqc-a8m3-IXI8Rx/HDVtYt-X4fN-oe8k-rxfc-xgG3-ct23-uGTH3s'
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root --hint='lvmid/efa59n-Za7F-Y3KY-MJP1-xJqc-a8m3-IXI8Rx/HDVtYt-X4fN-oe8k-rxfc-xgG3-ct23-uGTH3s'  71cff29d-d4a0-4584-adc2-b0beecb92609
		else
		  search --no-floppy --fs-uuid --set=root 71cff29d-d4a0-4584-adc2-b0beecb92609
		fi
		echo	'Loading Linux linux ...'
		linux	/boot/vmlinuz-linux root=/dev/mapper/vg0-lv_root rw  quiet
		echo	'Loading initial ramdisk ...'
		initrd	/boot/initramfs-linux-fallback.img
	}
}

### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/20_linux_xen ###
### END /etc/grub.d/20_linux_xen ###

### BEGIN /etc/grub.d/30_os-prober ###
menuentry 'Windows Boot Manager (on /dev/nvme0n1p2)' --class windows --class os $menuentry_id_option 'osprober-efi-0649-6156' {
	insmod part_gpt
	insmod fat
	if [ x$feature_platform_search_hint = xy ]; then
	  search --no-floppy --fs-uuid --set=root  0649-6156
	else
	  search --no-floppy --fs-uuid --set=root 0649-6156
	fi
	chainloader /efi/Microsoft/Boot/bootmgfw.efi
}
### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.

menuentry "linux-signed" {
        insmod chain
	
	search --no-floppy --set=root --file  /efi/grub_uefi/linux-signed.efi

        echo 'Chainloading Linux linux-signed.efi ...'
        chainloader /efi/grub_uefi/linux-signed.efi
}

menuentry "Firmware setup (UEFI)" {
	fwsetup
}
### END /etc/grub.d/40_custom ###

### BEGIN /etc/grub.d/41_custom ###
if [ -f  ${config_directory}/custom.cfg ]; then
  source ${config_directory}/custom.cfg
elif [ -z "${config_directory}" -a -f  $prefix/custom.cfg ]; then
  source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###

My Archlinux installation steps:

archlinux installation steps, consolidated and specialized:
sources:
wiki.archlinux.org
LernLinux.tv youtube channel

notes on notation:
"-" genearl steps to do
"#" commands to put in (root permission not marked explicitly)
"//" tried, but failed; or omitted because not possible/important
" " general description

prerequisities:
- unplug m.2 ssd and the 3 raid drives
- plug in linux ssd
- boot to bios
- edit secure boot setting:
- other OS

//booting the insallation media with secure boot enabled
//after the error pops up:
//-> ok
//-> select Enroll Hash, choose loader.efi, confirm
//-> select Enroll Hash and archiso, enter the archiso directory
//-> select vmlinuz.efi, confirm
//-> exit to boot devices menu
//-> reboot Arch Linux archiso x86_64 UEFI

- check if booted with secure boot
# od -An -t u1 /sys/firmware/efi/efivars/SecureBoot-XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

if OK following output:
    returns 1 as the final integer in a list of five integers
//not booted securely... did not work from bios

- get more verbose oputput
# bootctl status


\ the standard set up //

    - set the keyboard layout to german keyboard
    # loadkeys de-latin1-nodeadkeys

    - check if booted in EFI mode
    # ls /sys/firmware/efi/efivars
    if booted in efi mode, this folder exists

    - check for ip-adress/network connectivity
    # ip a
    expected result: 192.168.1.42

    # ping archlinux.org -c 5

    - if no ip-adress was assigned
    # dhcpcd

    - set and check the clock
    # timedatectl set-ntp true
    # timedatectl status

    - list all drives
    # fdisk -l
    expected: /dev/sda

    - enter the gdisk utility on the drive where to install arch
    # gdisk /dev/sda

        - create gpd or dos partition table
        the following steps are for a gpd partition table with LVM and efi

        - create a gpd disk label
        # o

        - print current table
        # p
        expected result: empty

        - new partition
        # n
        first one as efi partition

        - partition number
        # 1

        - first sector
        # 2048

        - size of the partition
        # +512M

        - set type to EFI-System for grub
        # EF00

        - partition for LVM
        # n
        # default
        # default
        # default
        rest of disk

        # 8E
        set type to linux lvm

        # w
        write the changes and exit

    # fdisk -l
    expected result: table as created above

    - format EFI partition
    # mkfs.vfat -F32 /dev/sda1

    - create physical volume
    # pvcreate --dataalignment 1m /dev/sda2
      --dataalignment for ssd recommended

    - create volumegroup
    # vgcreate vg0 /dev/sda2

    - create logical partitions
    # lvcreate -L 50G vg0 -n lv_root
    size, volumegroup, name of part
    for the rest use instead -L:
    -l 100%FREE

    - create the other partitions
    # lvcreate -L 130G vg0 -n lv_usr
    # lvcreate -l 100%FREE vg0 -n lv_home

    - activate the lvm
    # modprobe dm_mod
    # vgscan
    # vgchange -ay

    - format the partitions
    # mkfs.ext4 /dev/vg0/lv_root
    # mkfs.ext4 /dev/vg0/lv_usr
    # mkfs.ext4 /dev/vg0/lv_home

    - mount the root partition
    # mount /dev/vg0/lv_root /mnt

    - create dirs and mount the other partitions
    # mkdir /mnt/usr
    # mkdir /mnt/home
    # mount /dev/vg0/lv_usr /mnt/usr
    # mount /dev/vg0/lv_home /mnt/home

    - list all mounts
    # mount
    expected result: as created above


    \ starting the installation process //

    - check if uppermost mirror is up to the task
    # nano /etc/pacman.d/mirrorlist

    - install base package group
    # pacstrap -i /mnt base
    select default (all)
    proceed with download and install
    take note of all warnings / errors

    - create fstab file with partition list
    # genfstab -U -p /mnt >> /mnt/etc/fstab

    - edit fstab
    # nano /mnt/etc/fstab
    1. Add the discard option to the options tab of the home, usr, root filesystem. This essentially enables TRIM support for SSDs.
    2. Make /tmp a ramdisk, add this line:
    tmpfs	/tmp	tmpfs	defaults,noatime,mode=1777  0	0
    3. Change relatime on all non-boot partitions to noatime (reduces wear if using an SSD)
    4. change the passno of /usr to 0 for it being able to be mounted at boot
    (this is the last entry)

    - chroot into future install
    # arch-chroot /mnt/
    gives command promt into work in progress installation

    - set up the clock
    # ln -sf /usr/share/zoneinfo/Europe/Vienna /etc/localtime
    # hwclock --systohc

    - edit locale.gen
    # nano /etc/locale.gen
    find your locale and erase hash in front of it
    de_AT-UTF-8 UTF-8
    and
    en_US-UTF-8 UTF-8

    - some more steps
    # echo LANG=en_US.UTF-8 >> /etc/locale.conf
    # echo LC_ALL= >> /etc/locale.conf

    - update locales
    # locale-gen

    - make the keyboard layout persistent
    # nano /etc/vconsole.conf
    add or edit first line to look like the following:
    KEYMAP=de-latin1-nodeadkeys

    - install some crucial packages
    # pacman -S grub efibootmgr dosfstools os-prober mtools linux linux-headers intel-ucode

    - edit mkinitcpio.conf
    # nano /etc/mkinitcpio.conf
    in the hooks-section:
    between block and filesystem:
    -> insert lvm2
    to the end add:
    -> usr fsck

    - configure linux kernel
    # mkinitcpio -p linux
    watch out for warnings

    - set the hostname and update hosts
    # nano /etc/hostname
    # nano /etc/hosts
    127.0.0.1 localhost
    192.168.1.42 kayranPC
    ::1             localhost ip6-localhost ip6-loopback
    ff02::1         ip6-allnodes
    ff02::2         ip6-allrouters

    # passwd XXXX
    set root password

    check first whats in there
    - mount the EFI partition
    # mkdir /boot/EFI
    # mount /dev/sda1 /boot/EFI

    - install the bootloader
    # grub-install --target=x86_64-efi --efi-directory=/boot/EFI --bootloader-id=grub_uefi --recheck

    - generate grub config file
    # grub-mkconfig -o /boot/grub/grub.cfg

    - generate the swap file
    # fallocate -l 10G /swapfile
    # chmod 600 /swapfile
    # mkswap /swapfile
    # echo '/swapfile none swap defaults 0 0' | tee -a /etc/fstab

    - verify all fstab entries are ok
    # nano /etc/fstab
    b. Add the discard option to the options tab of the home and root filesystem (the one with rw,noatime,...). This essentially enables TRIM support for SSDs.
    c. Make /tmp a ramdisk:
    tmpfs	/tmp	tmpfs	defaults,noatime,mode=1777	0	0
    d. Change relatime on all non-boot partitions to noatime (reduces wear if using an SSD)
    e. change the passno of /usr to 0
    (this is the last entry)


    - back to archiso shell
    # exit

    -unmount all
    # umount -a
    # swapoff -a

    # reboot


    boot into new archlnux install
    
    configure the network settings:

    - get the module name of the network card
    # lspci -v
    e1000e

    - check if it was loaded
    # dmesg | grep e1000e

    - search for interface name of network card
    #ip link
    enp0s31f6

    - set it up
    # ip link set enp0s31f6 up
    # ip link show dev enp0s31f6

    # ip a
    should return 192.168.1.42

    - install a network manager
    # pacman -S networkmanager

    - start networkmanager and autostart at boot
    # systemctl start NetworkManager
    # systemctl enable NetworkManager

    - install sudo and set it up
    # pacman -S sudo
    # visudo
    Uncomment the line saying %wheel ALL=(ALL) ALL to give members of the wheel group sudo access
    save with:
    :wq

    - add a user and add password
    # useradd -m -G wheel,storage -s /bin/bash name
    # passwd name
    //# usermod -aG GROUP Name

    #logout
    - login as simple

    # pacman -S base-devel git
    # cd /usr/local/
    # git clone https://aur.archlinux.org/aurman.git
    # curl -L -O https://aur.archlinux.org/cgit/aur.git/snapshot/aurman.tar.gz
    # tar -xvf aurman.tar.gz
    # cd aurman
    # makepkg -sic
    # cd /
    # mv /usr/local/aurman.tar.gz /usr/local/aurman
    get and install aurman AUR helper for shim-signed to be installed

    - list all mount-points
    # df -h

    - configure ntp
    # pacman -Sy ntp
    # systemctl daemon-reload
    # systemctl enable ntpd
    # systemctl start ntpd
    # systemctl status ntpd

    - install x
    # pacman -S xorg-server xorg-xinit

    - list hardware components, check what video card is detected
    #lspci

    - install nvidia drivers
    # pacman -S nvidia nvidia-utils
    
    - install a desktop
    #pacman -Syu gnome gnome-power-manager gnome-tweaks dconf dconf-editor adwaita-icon-theme firefox network-manager-applet

    accept all defaults at those installs

    - configure nvida (this has no effect, as wayland runs gnome by default, not xorg )
    # nvidia-xconfig

    - start the gdm at boot
    # systemctl enable gdm

    # shutdown

plug in all drives
let secure boot be disabled
boot into linux

check if raid can be mouned
YES it can!

    -  regenerate grub config
    # grub-mkconfig -o /boot/grub/grub.cfg
    see if windows efi is found
    found!

    - configure firefox
    log into account
    settings, UI etc

    - set nano as default editor for command like sudoedit etc
    - add those lines to /etc/environment
    # VISUAL=nano
    # EDITOR=nano

    edit pacman repositoriy list in /etc/pacman.conf to add multilib
    uncomment 2 lines for multilib
    recheck mirrorlist at /etc/pacman.d/mirrorlist
    - sync all archives
    # pacman -Syyy

    - install nvidia-setting GUI tool
    # pacman -S nvidia-settings

    - get visual studio code
    # aurman -S vidual-studio-code-bin

    - add gnome extension support
    # pacman -S chrome-gnome-shell
    and enable the extension in firefox

    install gnome extension to add suspend button in top right menu


    secure boot config
        
    # pacman -S sbsigntools
    # aurman -S shim-signed
    install needed packages
    
    # mount /dev/sda1 /boot/EFI/
    # cp /usr/share/shim-signed/shim.efi /boot/EFI/EFI/grub_uefi/BOOTX64.efi
    # cp /usr/share/shim-signed/MokManager.efi /boot/EFI/EFI/grub_uefi/
    add shimefi

    # efibootmgr
    this returns the list of bootable .efi

    # mount /dev/sda1 /boot/EFI
    - add the previously created BOOTx64.efi for shim to the efi boot options
    # efibootmgr -c -d /dev/sda -l /EFI/grub_uefi/BOOTx64.efi -L SHIM_loader
    
    # openssl req -newkey rsa:2048 -nodes -keyout MOK.key -new -x509 -sha256 -days 3650 -subj "/CN=myMachineOwnerKey/" -out MOK.crt
    # openssl x509 -outform DER -in MOK.crt -out MOK.cer
    # cp MOK.cer /boot/EFI/EFI/grub_uefi/
    # sbsign --key MOK.key --cert MOK.crt --output /boot/EFI/EFI/grub_uefi/grubx64.efi /boot/EFI/EFI/grub_uefi/grubx64.efi
    create keys and sign the boot loader
    copy key to EFI partition
    
    # reboot
    
change bios secure boot setting to secure boot Windows UEFI Mode
boot the BOOTX64.efi labelled SHIM_loader
at the prompt:
enroll key from disk
select MOK.cer
boot to grubx64.efi
worked!

try booting windows
windows can be booted in secure mode (verified in system info)

blacklist nvidia kernel modules, remove blacklisting from nouveau, that was installed by nvidia

    # nano /usr/lib/modprobe.d/nvida.conf
    comment line
    blacklist nouveau

    # nano /usr/lib/modprobe.d/custom.conf
    add 
    blacklist nvidia
    blacklist nvidia_modeset
    blacklist nvidia_drm
    blacklist nvidia_uvm



further steps to sign the linux kernel for secure boot:

a combined efi with the kernel and initramfs is needed
the following AUR package autamatically generates the signed .efi package and has a hook for kernel updates:

    # aurman -S sbupdate-git
    
    configure it:
    # nano /etc/default/sbupdate
    KEY_DIR="/root/secure-boot"
    KEYFILE="DB.key"
    CRTFILE="DB.crt"
    ESP_DIR="/boot"
    OUT_DIR=""
    SPLASH="/usr/share/systemd/bootctl/splash-arch.bmp"
    BACKUP=0
    EXTRA_SIGN=()
    CMDLINE_DEFAULT="BOOT_IMAGE=/boot/vmlinuz-linux root=/dev/mapper/vg0-lv_root rw quiet"
    
    # sbupdate
    run the initalisation

    # mount /dev/sda1 /boot/EFI
    # cp /boot/linux-signed.efi /boot/EFI/EFI/grub_uefi/
    # umount /boot/EFI
    copy the .efi to the efi partition, as grub could not load the .efi from an lvm partition (which is the /boot/XXX, wheras /boot/EFI is the mount point of the efi partition)
    
    # sbverify --cert /MOK.crt /boot/EFI/EFI/grub_uefi/linux-signed.efi
    verify if the combined .efi is appropriately signed


    add the .efi to the grub menu
    add the following to /etc/grub.d/40_custom


    menuentry "linux-signed" {
        insmod chain

        search --no-floppy --set=root --file /efi/grub_uefi/linux-signed.efi

        echo 'Chainloading Linux linux-signed.efi ...'
        chainloader /efi/grub_uefi/linux-signed.efi
    }

    menuentry "Firmware setup (UEFI)" {
        fwsetup
    }

    # grub-mkconfig -o /boot/grub/grub.cfg
    generate new grub.cfg

this image on the efi partition is bootable without secure boot from grub,
booting it with secure boot gives error




TODO:

    next steps:
    redo mkinitcpio -p linux
    redo sbupdate and copy to efi part
    try the .efi

    delete /secure-boot

    set reminder in /etc/default/grub where the default comand line is:
    this has to be set in the conf for sbupdate as well, to be affective in the signed kernel
    set a hook for the grubx64.efi on the efi partition as well?

    what is with nvidia drivers, which are loaded by the kernel?
    could they be responsible for the secure boot error?
    
    workaround the bug with nvidia-drivers changing the native resolution of the boot cmd line 

    clean up boot log until no errors
    # journalctl -b

    make a copy of the bash input log

Last edited by winnetou (2018-05-14 14:40:58)

The Bug

This is a workaround for a Ubuntu bug where GRUB 2 can’t boot Windows 8.1 on an Acer Aspire E1-470 laptop (manufactured 2013) with UEFI.

The update-grub command gives the following output. The emphasized part indicates GRUB has found Windows and created a menu entry for it.

Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.2.0-41-generic
Found initrd image: /boot/initrd.img-4.2.0-41-generic
Found linux image: /boot/vmlinuz-4.2.0-38-generic
Found initrd image: /boot/initrd.img-4.2.0-38-generic
Found Windows Boot Manager on /dev/sda2@/EFI/Microsoft/Boot/bootmgfw.efi
Adding boot menu entry for EFI firmware configuration
done

The next time I boot the computer, GRUB starts up and has a menu entry for Windows Boot Manager (on /dev/sda2). Upon selecting the option, I will face this error…

/EndEntire
file path: /ACPI(a0341d0,0)/PCI(2,1f)/Sata(0,0,0)/HD(2,c8800,96000,42c046e1ccddca4f,2,2)/File(EFIMicrosoftBoot)/File(bootmgfw.efi)/EndEntire
error: cannot load image.

Press any key to continue...

There is a timeout so that whether I press some key or wait thirty seconds I get to the previous screen, the GRUB start menu.

The Solution

I found out that if I exit my Linux bootloader GRUB, I will find myself in the computer’s UEFI start-up media selection screen that lists ubuntu, Windows Boot Manager, the UEFI setup menu and whatever bootable devices I may have connected. Selecting the Windows Boot Manager here will work flawlessly.

To add a menu option to exit GRUB, find the file called /etc/grub.d/40_custom. Its contents should be like this:

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.

Now follow those instructions; the menu entry you’d like to add is as follows

menuentry 'Exit Grub' {
	exit
}

For this change to take effect, you will have to run sudo update-grub. On next reboot, the new menu entry should be there in the GRUB menu.

Like this post? Please share to your friends:
  • Ошибка cannot load asacpi dll
  • Ошибка cannot load android system
  • Ошибка cannot launch game unless steam is running
  • Ошибка cannot initialize 3d engine
  • Ошибка cannot import dll