Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 boot forth   Eugene Grosbein   06 Sep 2007 17:38:16 
 Re: boot forth   Yuri Kurenkov   06 Sep 2007 16:57:51 
 Re: boot forth   Eugene Grosbein   06 Sep 2007 23:36:32 
 Re: boot forth   Valentin Davydov   06 Sep 2007 21:21:02 
Архивное /ru.unix.bsd/26093b35fd85f.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional