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.
- Другими словами, вы должны перенести TWRP Recovery в папку с инструментами платформы.
- Как только это будет сделано, перейдите в адресную строку папки platform-tools, введите CMD в адресной строке и нажмите Enter. Это запустит командную строку.
- Теперь загрузите устройство в режим быстрой загрузки, а затем подключите его к ПК. Для этого включите отладку по USB на вашем устройстве и введите следующую команду: adb reboot bootloader
Режим быстрой загрузки в Xiaomi
- Теперь ваше устройство загрузится в режиме Fastboot/Bootloader. Используйте команду ниже, чтобы загрузить ваше устройство в TWRP: fastboot boot recovery.img
- Точно так же вы также можете напрямую прошить TWRP в загрузочный раздел. Это можно сделать с помощью следующей команды: fastboot flash boot recovery.img
- При выполнении любой из двух вышеуказанных команд ваше устройство загрузится в TWRP. Но это может быть просто временная установка. Чтобы установить его на постоянной основе, есть два разных подхода. На некоторых устройствах есть файлы TWRP ZIP и TWRP IMG. Однако на других устройствах есть только файл TWRP IMG.
- Если на вашем устройстве есть ZIP-файл TWRP, перенесите его на свое устройство. С другой стороны, если у него есть только файл IMG, перенесите этот файл TWRP IMG на свое устройство. Для передачи файлов вы можете использовать метод боковой загрузки ADB, смонтировать устройство через TWRP или использовать USB-OTG. Все это было подробно объяснено здесь: [3 METHODS] Как перенести или установить файлы через TWRP Recovery.
- После того, как файл был прошит, давайте продолжим. Если вы перенесли ZIP-файл TWRP, перейдите в «Установить», выберите TWRP.ZIP и проведите пальцем вправо, чтобы прошить его.
- С другой стороны, если вы перенесли файл TWRP IMG, вам придется установить его на раздел Ramdisk. Для этого перейдите в «Дополнительно»> «Установить Recovery Ramdisk»> «Выберите файл TWRP 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 в папку с инструментами платформы. Как только это будет сделано, вот что нужно сделать:
- Запустите окно командной строки в папке инструментов платформы, введя CMD в адресной строке и нажав Enter.
- Теперь введите рекавери с быстрой загрузкой или быстрая загрузка команду в соответствии с необходимостью и перетащите восстановление twrp рядом с ней (см. изображение ниже). Предположим, мы используем файл TWRP OnePlus 7 Pro и поместили файл twrp.img в папку D:platform-tools, тогда команда автоматически преобразуется в загрузку fastboot D:platform-toolstwrp-3.4.0- 0-гуакамоле.img.
- Как только команда будет автоматически заполнена, нажмите клавишу 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:
-
EFI partition: Fat32, 512MiB
-
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.