Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #84, ДЕКАБРЬ 2005 г.

Боевое искусство портирования

Крис Касперски ака мыщъх

Хакер, номер #084, стр. 084-108-1


Турбо-перенос драйверов из Windows в Linux/BSD

Несколько лет назад ситуация с драйверами под Linux и BSD была просто катастрофической. Поддерживалось лишь небольшое количество устройств, и железо для UNIX-машин приходилось закупать отдельно. Тогда Linux еще не вышел из стадии «конструктора» для хакеров, а BSD в основном использовалась на серверах, все оборудование которых сводилось к сетевой карте и SCSI-контроллеру. До сих пор одним из главных недостатков UNIX- систем является отсутствие нормальных драйверов под всевозможные «вкусные» железки, с которыми Windows справляется без проблем. На самом деле проблему можно решить, и эта статья расскажет как.

[виртуальные машины]

Прежде чем ставить Linux/BSD, задумайся зачем, собственно, все это нужно? Если есть желание пощупать альтернативную систему, освоить средства разработки или компилировать исходные тексты, то наилучшим выбором будет виртуальная машина, такая как, например, VMWare. Fedora Core на ней, конечно, жутко тормозит (на P-III 733 работать вообще невозможно), но Debian с KDE идет вполне нормально. Хочешь - разрабатывай программы, хочешь - читай man'ы. Еще и в игры типа Star Wars можно поиграть. Никаких драйверов в этом случае не потребуется, в смысле «никаких драйверов сверх того, что есть в любом нормальном дистрибутиве». Большинство разработчиков именно так и поступают. Как ни крути, а любой уважающий себя UNIX-программист вынужден держать на компьютере десяток осей различных пород, чтобы тестировать свои программы на совместимость. На «живом» компьютере переключения между ними происходят только через перезагрузку, что не есть хорошо, а виртуальные машины переключаются, как карусель.

Можно поступить и наоборот. Установить Linux/BSD как базовую систему, а Windows водрузить на виртуальную машину. Поскольку VMWare дает прямой доступ к COM/LPT/USB портам, то подключение сканера/принтера/цифровой камеры к твоей машине уже не станет проблемой. С ней будет работать Windows! Базовая UNIX-машина в этом случае получает в свое распоряжение все системные ресурсы, и падения производительности уже не происходит, но появляются другие проблемы. Windows-приложения (например, игрушки) будут либо сильно тормозить, либо откажутся запускаться совсем, к тому же со всеми остальными типами устройств, например, интегрированной WLAN платой или видеокартой, Windows работать не сможет. А все потому, что VMWare представляет собой закрытый ящик, отгороженный от базовой операционной системы толстой стеной эмулятора. Вот если бы существовала возможность предоставить виртуальной машине полный доступ ко всему физическому оборудованию, вот тогда бы... Готовься! Именно такой способ мы и собираемся описать!

[два в одном]

Начнем с простого, но до сих пор никем не решенного вопроса, то есть уже давно решенного, конечно, но совсем не так, как следует. Известно, что поддержка NTFS-разделов представляет огромную проблему. Драйвера, научившиеся писать на NTFS-раздел, появились совсем недавно, да и то лишь затем, чтобы покрасоваться на выставках. Для реальной работы они не годятся, потому что работают нестабильно и несут на своем горбу кучу ограничений. Сжатые файлы, транзакции и куча других вещей все еще не поддерживается. К тому же, NTFS не стоит на месте и хоть и медленно, но совершенствуется. Можно ли, хотя бы теоретически, написать 100% совместимый драйвер, «переваривающий» новые версии NTFS без участия программиста? Вопрос совсем не так наивен, каким кажется. Для чего нам корпеть над своим собственным драйвером, когда под рукой есть уже готовый - ntfs.sys. Если мы сумеем заставить его заработать под Linux, все проблемы решатся сами собой.

Содержание  Вперед на стр. 084-108-2