Часть первая, самоуверенно-унылая.
Я сразу намеренно отступил от условий эксперимента и усложнил себе задачу. Т.е. Windows XP с интегрированным (самопально и криво) SP2, корпоративный, но при этом почему-то русский (куплен у каких-то совершенно левых чуваков на Митино 2 месяца назад, т.е. еще до выхода официального релиза SP) была проинсталлирована на платформу, заведомо ACPI не поддерживающую ни при каких условиях. Мат. плата ASKA SST-5830 фирмы SilverStar с чипсетом VIA VT82C691(эта тварь не поддерживает UDMA-66 и ядро Coppermine на железном уровне), процессор Intel Celeron 433/128/66 память 2х128 PC133 SDRAM Hyndai, видеоадаптер S3Trio 3D/2X AGP 4Mb, корпус AT неведомого за давностью лет автора.
После инсталла зашел в Диспетчер устройств, убеждаюсь, что Компьютер - стандартный и выбора другого ядра, разумеется, нет. Заглянув в пресловутый hal.inf, читаю, какие библиотеки и исполнительные части ядра используются в случаях других платформ. Уточним сразу, динамичесих библиотек аппаратных абстракций (hal) ядра всего насчитывается 7:
hal.dll
halaacpi.dll
halacpi.dll
halapic.dll
halmacpi.dll
halmps.dll
halsp.dll
hal486c.dll, причем последняя в дистрибутивах с SP2 отсутствует. Испонительных систем ядра на данный момент существует 4 штуки:
ntoskrnl.exe
ntkrnlpa.exe
ntkrpamp.exe
ntkrnlmp.exe, при этом первые две используются для унипроцессорных системных плат, а две последних - в многопроцессорных системах.
Теперь, вооруженный знанием, заглядываю в %SystemRoot%\System32 и нахожу там только hal.dll и ntoskrnl.exe, по размеру совпадающими с исходными из дистрибутива, что позволяет предположить, что файлы переименованы не были. Еще раз сверяюсь с hal.inf... Ну, все совпадает, чисто Стандартный компьютер и никаких бананов. Манипулировать с заменой здесь бессмысленно, ибо нет поддержки иных вариантов на уровне "железа".
Теперь отключаю машинку, демонтирую жесткий диск и ставлю его в специально подготовленный на этот случай системный корпус ATX с мат. платой Abit VH6T, процессором Intel Pentium 1266/256/133 Tualatin, 1x512Мб памяти SDRAM PC133 Kingston и видеокартой типа nVidia Riva TNT Model 64/Model 64 Pro с 16 Мб видеопамяти. Поноценная ACPI-система, в Setup BIOS поддержка ACPI включена.
ХР завелась без каких-либо проблем, т.к. чипсет не слишком отличается от предыдущего: VIA VY82C694T.
Бегом-бегом в hal'овый каталог!!! Нет, чуда не произошло, новых библиотек не появилось, соответственно и выбора другого ядра я по-прежнему лишен, в чем убеждаюсь в Диспетчере устройств. Драйверы VIAHyperion4in1451v были происталлированы еще раз поверху. Включаю поиск нового оборудования... Ну, отрицательный результат - тоже результат, нет?
Хорошо, начинаю манипуляции с заменой/добавкой компонент ядра и меню загрузки. Не мудрствуя лукаво копирую еще 5 недостающих hal'ов и три кернела в системную папку, перезагружаюсь, Поиск нового обрудования - нет в жизни счастья. Добро, гнида, я еще не закончил............. Закончил.
В общем ни один из всевозможныз вариантов к успеху не привел, заменял, переименовывал в hal.dll, извращался всяко-разно, ссылался в boot.ini на другие кернелы и дллы. Безуспешно, но выявилась любопытная вещь, когда я пытался загрузиться в заведомо аппаратно-поддерживаемую конфигурацию, то ВСЕГДА заканчивалось лицезрением любимого BSOD. Если же ставил загрузку в какую-нибудь мультипроцессорную систему, то приходилось смотреть на черный экран с мигающим в левом верхнем углу курсором.
Теперь пытаюсь установить ОС "поверху", т.е. в режиме обновления, но уже на второй машине (надеюсь, что все, что нужно система поправит сама). Обновлене проходит успешно, компьютер стартует. Но результат разочаровывает. Выбора нет по-прежнему и вновь повторенные упражнения с заменой/перименованием ни к чеу е приводят. Т.е. все осталось абсолютно тем же.
Печальный вывод: безымянным автором хелпа нам заявлялось, что для переноса ОС на другую платформу достаточно простой замены hal. Простим ему эту невольную ложь (вполне может быть, что в первых релизах операционки, в бета-версиях данный метод удавался) и будем считать, что это было сказано теоретически. Практика же показала, что миграции и взаимопроникновение системных динамичесих библиотек и других файлов закладываются еще при инсталляции и выправить это вручную в последствии не представляется возможным.
Часть вторая, надежда умирает...
Остался вариант инсталляции "начисто". Произведено, систеvа загружается заметно шустрее предыдущего варианта. Диспетчер устройсьтв радостно доложил, что у меня Компьютер с ACPI, но есть возможность деградировать к просто Стандартному варианту. Уже утешает, все же чистый инсталл все поправил.
В папке %SystemRoot%\System32 вижу один-единственный hal.dll, а где же заявленный в hal.inf halacpi.dll? Проверяю, все верно - в инфе значится:
; ACPI PIC-based PC (UP) HAL
[ACPIPIC_UP_HAL]
CopyFiles = ACPIPIC_UP_HAL.CopyFiles
CopyFiles = UP.CopyFiles
AddReg = rp_tags_addreg
Reboot
[ACPIPIC_UP_HAL.CopyFiles]
hal.dll, halacpi.dll,,0x3000
Ну, или я дурак, или лыжи не едут. Сверяю размер файла и вижу, что это и есть переименованный halacpi.dll, тогда непонятно куда же делся исходный hal.dll, судя по вышеприведенному коду, обе библиотеки должны быть там. Досадно, но проверим теперь кернел.. Все в порядке, ntoskrnl.exe не изменился.
Сейчас вкусим деградации
...Та-та, обновить драйвер, послать Windows Update, хлопнуть по рукам автоматическому поиску... меняю ядро на Стандартный компьютер. В процессе вижу, что из кеша или дистриба заливается ntkrnlpa.exe, блинннн, его-то я и е роверил, но уже поздно...устем-с. Черт с ним, перезагружаюсь. Тэ-эк-с, снес мне все драйверы, заново понаходил устройства - радость-то какай-а-а-а. Просит переобуться, давай, родной.
Нормальный старт. Диспетчер рапортует, что у меня ДВА Стандартных компьютера.. странненьо, смотрю свойства - уф-ф-ф, все понятно, один Стандартный комп имет код экземпляра устройства ROOT\ACPI_HAL\0000 (предполагаю, что это для возожности вернутся опять к ACPI-конфигу... посмотрим сейчас), второй пишет, что он якобы ROOT\PCI_HAL\0000 (ну, тоже ясно). У первого есть меню выбора ядра, а вот у второго, естественно нет.
Проверим что у нас в системном каталоге: стандартные hal.dll, ntoskrnl.exe и ntkrnlpa.exe. Поищем где ссылка на halacpi (где-то же долже он его потом брать)? Есть такое дело, вот оно - %SystemRoot%\System32\ReinstallBackups\0001\DriverFiles\i386\halacpi.dll
Суду все ясно (не до конца, но на приговор хватит). Вертаю все взад. С огромным удовольствием повторяю все операции с посыланием подальше назойливых сервисов Майкрософт и выбираю Компьютер с ACPI. После перезагрузки все проверяю еще раз... Остались два компьютера (продать один что ли?), один Компьютер с ACPI, второй Стандартный, хм, hal.dll опять заменен АСПИшным и переименован, других hal'ов и близко нет, ntoskrnl.exe и ntkrnlpa.exe не изменились.. Исходный hal обнаружен все в той же %SystemRoot%\System32\ReinstallBackups\0001\DriverFiles\i386\...
Т.е. возможности беспрепятственного перехода от одного ядра к другому, причем неограниченное число раз, никто ни у кого не отнимал. Дальнейшие эксперименты по принудительной прописке других, неподдерживаемых платформ я проводить не стал за их очевидной ненадобностью. Но машина не демонтирована, изменений в программный код ПО не вносилось, и она готова к дальнейшим опытам, буде таовые последуют, если проблема вас заинтересует и мы продолжим ее обсуждение. Вопросы у меня еще есть и мысли по поводу тоже кое-какие остались, и не все варианты лечения первого конфига были испробованы, и некоторые неточности я намеренно допустил, а вы их заметили?
"Умный" вывод: безымянным автором хелпа нам заявлялось, что для переноса ОС на другую платформу достаточно простой замены hal. Простим ему эту невольную ложь (вполне может быть, что в первых релизах операционки, в бета-версиях данный метод удавался) и будем считать, что это было сказано теоретически. Практика же показала, что миграции и взаимопроникновение системных динамических библиотек и других файлов закладываются еще при инсталляции и выправить это вручную в последствии не представляется возможным. Читателям же подобных мануалов (весьма широко распространенным и выдерживающим практически без изменений уже третью редакцию (парадокс, мля)) можно только посочувствовать и дать совет, который актуален со времен Ветхого завета - "Не сотвори себе кумира". Парни, у вас достаточно мозгов, опыта и рук, чтобы не вверяться разным лоховсим хелпам, неизвестно кем и с какой целью написанным, а все изучить и проверить лично, выработав при этом самостоятельные методы работы с железом и софтом. Вы очень толковые ребята, и не хочется, чтобы навешанные с малолетства шоры и навязанные стереотипы мешали вам развиваться с максимальной эффективностью.
Примечание: во избежание пинков и попреков типа "Сам дурак!" автор в полной мере относит вышеизложенный вывод к самому себе. Jump!
j0cker aka lemon65 Гуркин.