|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Eugene Grosbein 2:5006/1 06 Sep 2007 23:36:32 To : Eugene Grosbein Subject : Re: boot forth --------------------------------------------------------------------------------
06 сен 2007, четверг, в 18:38 KRAST, Eugene Grosbein написал(а):
EG> Кто-нибудь знает, что за фигня творится с boot forth в шестерке?
EG> loader с винта ядро грузит нормально, при загрузке с USB Flash,
EG> который эмулируется BIOS-ом как дополнительный HDD, BTX ведет себя
EG> очень странно, в зависимости от добавления отладочных printf в разные
EG> его места бывает то бесконечный цикл трапов, то единичный трап
EG> с мгновенной перезагрузкой, то самопроизвольный рестарт loader-а
EG> с потерей bootinfo от boot2 и, как следствие невозможность загрузить
EG> ядро, то паника внутри загрузчика по поводу плохого free на guard1...
Основной сценарий (непатченный загрузчит от 6.2-RELEASE) такой:
1. boot2 загружает loader, передавая ему инфомацию, с какого BIOS disk
идет загрузка, какую консоль использовать (vidconsole/comconsole/обе/никакую)
etc., вся эта информация называется bootinfo.
2. loader одним из первых вещей в main() вызывает функцию cons_probe(),
которая выдаёт первый printf от loader-а. Если в boot2 нажать -D
(выдавать и на экран, и в com-порт), это сообщение будет такое:
Consoles: internal video/keyboard serial port
Если -h, то будет только serial port, если ничего не вводить, только
internal.
3. Потом loader делает много разных вещей, включая чтение и выполнение
фортовых скриптов, вплоть до /boot/loader.rc всё идет гладко.
loader.rc читает include /boot/loader.4th, затем запускает команду start
из этого loader.4th. start первым делом читает /boot/defaults/loader.conf
(прочитывает до конца успешно, это я проверил добавкой отладочного
вывода в конец этого loader.conf), потом, видимо, начинает грузить ядро -
появляется вращаюшийся слеш, и тут происходит странное - loader начинает
выполняться с нуля, с main(), вызвает cons_probe() (см. пункт 2 выше)
и так далее.
Hо теперь уже bootinfo пуст, информации о консоли тоже нет - если вначал
в bootinfo было указание использовать serial console и loader писал
вывод именно туда, то теперь cons_probe пишет "internal video/keyboard".
Потом loader, не именя bootinfo, жалуется:
Can't work out which disk we are booting from
Пытается загрузиться с disk0, но тут форт обнаруживает порушенную память,
free: guard1 fail, паникует и на этом загрузка останавливается.
Каким образом loader может стартовать повторно? Где-то рушится стек
и подменяется адрес возврата? Как такое отлаживать? Есть serial console
для машины, на которой это 100% воспроизводимо (и я бы хотел знать,
как это HЕ воспроизвести :-(
При восстановлении этой картины пихал в C-код загрузчика printf-ы,
иногда получал трап BTX, добавлял ешё один printf, трап исчезал.
Eugene
--
Открываются расписные ворота души, и несет оттуда вдруг такой тухлятиной,
что хоть святых выноси...
--- slrn/0.9.8.1 (FreeBSD)
* Origin: Svyaz Service JSC (2:5006/1@fidonet)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/26093b35fd85f.html, оценка из 5, голосов 10
|