Благодаря принятому ответу мне удалось достичь цели другим методом. После успешного изменения исходного кода Grub 2.02 и перекомпиляции /etc/default/grub
был изменен на 3,5-секундный обратный отсчет с GRUB_TIMEOUT=35
.
Обратите внимание, как круговой прогресс теперь плавный, без фрагментов:
![Новая загрузка Grub](https://i.stack.imgur.com/poUX0.gif)
Код для изменения:
/grub-2.02/grub-core/normal/menu.c
Строка 546:
/* Check whether a second has elapsed since the last tick. If so, adjust
the timer and return 1; otherwise, return 0. */
static int
has_second_elapsed (grub_uint64_t *saved_time)
{
grub_uint64_t current_time;
current_time = grub_get_time_ms ();
/* July 14, 2018 Use deciseconds - change 1000 to 100 */
if (current_time - *saved_time >= 100)
{
*saved_time = current_time;
return 1;
}
else
return 0;
}
Измените строку:
if (current_time - *saved_time >= 1000)
to:
if (current_time - *saved_time >= 100)
Вуаля! нужно изменить одну строку кода. Плюс две строки комментариев добавлены для удобства.
Как скомпилировать grub 2.02
Прежде чем следовать инструкциям на веб-сайте Grub а>:
sudo apt install bison
sudo apt install flex
Затем следуйте инструкциям на сайте grub:
cd grub-2.02
./configure
Выполните следующую команду на сайте Grub:
make install
Файлы создаются в /usr/local/bin
(сюрприз !!!) вместе с .../grub-2.02
директорией, чего и следовало ожидать.
Разные проблемы при компиляции grub
В итоге я скопировал исходный код в виртуальную машину (Lubuntu 16.04) и перекомпилировал там. Использование недавно скомпилированного grub-install
все испортило, и мне пришлось использовать sudo apt install grub2
, чтобы получить новую установку. Затем вручную скопируйте вновь скомпилированные файлы в /boot/grub/i386-pc
Моя клеммная коробка перекошена, поэтому мне придется создать новое фоновое изображение grub. На изображении ниже я изменил GRUB_TIMEOUT=35
на обратный отсчет 3,5 секунды.
Обновление от 16 июля 2018 г.
Разобрался с одним параметром, который нужно использовать для получения поддержки X86, EFI:
./configure –with-platform=efi
*******************************************************
GRUB2 will be compiled with following components:
Platform: x86_64-efi
With devmapper support: No (need libdevmapper header)
With memory debugging: No
With disk cache statistics: No
With boot time statistics: No
efiemu runtime: No (not available on efi)
grub-mkfont: No (need freetype2 library)
grub-mount: No (need FUSE library)
starfield theme: No (No build-time grub-mkfont)
With libzfs support: No (need zfs library)
Build-time grub-mkfont: No (need freetype2 library)
Without unifont (no build-time grub-mkfont)
Without liblzma (no support for XZ-compressed mips images) (need lzma library)
*******************************************************
Однако после make install
возникает ошибка:
Making install in grub-core
make[2]: Entering directory '/home/rick/src/grub-2.02/grub-core'
gcc -E -DHAVE_CONFIG_H -Wall -W -DGRUB_MACHINE_EFI=1 -DGRUB_MACHINE=X86_64_EFI -m64 -nostdinc -isystem /usr/lib/gcc/x86_64-linux-gnu/5/include -I../include -I../include -DGRUB_FILE=\"symlist.h\" -I. -I. -I.. -I.. -I../include -I../include -I../grub-core/lib/libgcrypt-grub/src/ -DGRUB_KERNEL=1 -D_FILE_OFFSET_BITS=64 -DGRUB_SYMBOL_GENERATOR=1 symlist.h > symlist.p || (rm -f symlist.p; exit 1)
symlist.h:25:44: fatal error: ../include/grub/machine/kernel.h: No such file or directory
compilation terminated.
Makefile:42544: recipe for target 'symlist.c' failed
make[2]: *** [symlist.c] Error 1
make[2]: Leaving directory '/home/rick/src/grub-2.02/grub-core'
Makefile:10904: recipe for target 'install-recursive' failed
make[1]: *** [install-recursive] Error 1
make[1]: Leaving directory '/home/rick/src/grub-2.02'
Makefile:11927: recipe for target 'install' failed
make: *** [install] Error 2
Я отправил отчет об ошибке людям из Grub (июль 2018 г.), но ничего не получил в ответ. Следующим шагом для системы EFI является загрузка исходного кода при новой установке с использованием репозиториев Ubuntu вместо инструкций веб-сайта Grub.
person
WinEunuuchs2Unix
schedule
02.09.2018
GRUB_TIMEOUT
в исходном коде с помощью grep. Это позволяет вам найти, где обрабатывается переменная. Затем прочтите код, который его обрабатывает, и продолжайте оттуда. - person fuz   schedule 14.07.2018GRUB_TIMEOUT=2.5
илиGRUB_TIMEOUT_MS=2500
. - person Ross Ridge   schedule 14.07.2018