Привет! Известен метод загрузки Windows напрямую из Linux без необходимости перезагрузки компьютера. Для этого используется kexec, который предназначен для загрузки ядер Linux "на лету", и загрузчик grub4dos, модифицированный таким образом, что воспринимается kexec'ом как ядро и загружается, переводя машину в стадию загрузки оси. Проблема возникает в том случае, когда эта схема применяется на машинах с контроллерами SATA II (контроллеры второго поколения), не поддерживающими совместимость с IDE-шным интерфейсом. В этом случае grub4dos не может инициализировать устройство и обратиться к диску... Есть подозрение, что необходимо явно ресетить контроллеры SATA либо сразу всю шину. Может быть, кто-нибудь в курсе, как это можно сделать программно? Либо вообще в курсе, как эту проблему можно решить?
Dzutte Бред. Скорее всего дело в том что grub4dos работает либы с прерыванием либы с legacety IDE. А посему просто не видит диск. Так как он либы в Native IDE либы в ACHI(AHCI) Нужно както объяснить ему, как это сделать не знаю. Вот в ntldr можно подключить драйвер. Помойму это можно сделать только при ресете шины. Это аналогично полному ресету.
Исключено - при нормальной загрузке grub4dos спокойно видит диск, висящий на SATA-контроллере, и грузится с него. А вот после "отката" из Linux - уже не хочет..
Ну так при нормальном режиме он должен использовать прерывания, а при аткате скорее всего порты в\в. Что бы не гадать надо посмотреть, как там происходит.
В нормальном режиме работой с SATA контроллером занимается BIOS, знающий как с ним работать и grub (как и все прочие бутлоадеры) как правило все делают через оный.Благо, BIOS то знает как со своей железкой работать.Вот и работает все и вся при обычной загрузке.При условии что BIOS есть и знает как работать с девайсом.По этой же причине на контроллерах которые карты ставят чип c расширением BIOS-а.Но ... Linux то не пользуется BIOS.У него свои драйвера для работы с дисками.При этом вероятно вы уже не можете рассчитывать на услуги BIOS в момент kexec() и врядли ядро линукса заботится о возможности юзать bios после kexec(), ядру линукса то оно не особо надо - ну вот вам и фига вместо диска.Програмьте контроллер через порты сами, только это запросто может быть специфично для каждого конкретного чипсета.