Почему мне нужно перекомпилировать модуль ядра VMware после обновления ядра Linux? - PullRequest
5 голосов
/ 06 мая 2009

После обновления ядра Linux мой VMWare-сервер не может запуститься, пока не будет использован файл vmware-config.pl для переконфигурирования (включая сборку некоторых модулей ядра).

Если я обновляю свой хост с Windows VMWare до последней версии Windows Service Pack, мне обычно не нужно ничего делать для запуска VMWare.

Почему VMWare работает по-разному в Linux и Windows? Приносит ли это действие перекомпиляции какие-либо преимущества на платформе Linux через Windows?

Ответы [ 4 ]

13 голосов
/ 06 мая 2009

Перейти читать Интерфейс драйвера ядра Linux .

Это написано, чтобы попытаться объяснить, почему Linux не имеет двоичного интерфейса ядра и не имеет стабильного интерфейса ядра. Помните, что в этой статье описываются интерфейсы _in kernel_, а не интерфейсы ядро-пользовательское пространство. Интерфейс ядра к пользовательскому пространству - это тот, который используют прикладные программы, интерфейс системного вызова. Этот интерфейс очень стабильный и не сломается. У меня есть старые программы, которые были построены на ядре до 0.9, которое все еще прекрасно работает в последней версии ядра 2.6. Этот интерфейс является тем, на который пользователи и прикладные программисты могут рассчитывать на стабильность.

Это отражает мнение большой части разработчиков ядра Linux: свобода изменять детали реализации и API в ядре в любое время позволяет им развиваться намного быстрее и лучше.

Без обещания сохранять одинаковые интерфейсы в ядре от выпуска к выпуску, для бинарного модуля ядра, такого как VMWare, невозможно надежно работать с несколькими ядрами.

Например, если некоторые структуры меняются в новом выпуске ядра (для лучшей производительности или большего количества функций или по любой другой причине), двоичный модуль VMWare может привести к катастрофическому повреждению при использовании старой структуры структуры. Повторная компиляция модуля из исходного кода захватит новый макет структуры и, таким образом, даст больше шансов на работу - хотя все еще не на 100%, если поля были удалены или переименованы или им присвоены другие цели.

Если функция изменяет свой список аргументов, или переименовывается или иным образом становится недоступной, даже перекомпиляция из того же исходного кода не будет работать. Модуль должен будет адаптироваться к новому ядру. Так как каждый (должен) иметь источник и (может найти кого-то, кто) может изменить его, чтобы соответствовать. «Продвигать работу к конечным узлам» является общей идеей как в сети, так и в свободном программном обеспечении: поскольку ресурсы [на периферии] / [разработчиков вне ядра Linux] больше, чем ограниченные ресурсы [магистрали] / [из разработчиков Linux], компромисс, чтобы заставить прежнего делать больше работы, принят.

С другой стороны, Microsoft приняла решение, что они должны максимально сохранить совместимость двоичных драйверов - у них нет выбора, поскольку они играют в частном мире. В некотором смысле, это значительно облегчает работу внешних разработчиков, которые больше не сталкиваются с движущейся целью, и конечным пользователям, которым никогда не нужно ничего менять. С другой стороны, это вынуждает Microsoft поддерживать обратную совместимость, которая (в лучшем случае) отнимает много времени для разработчиков Microsoft и (в худшем случае) неэффективна, вызывает ошибки и препятствует продвижению вперед.

2 голосов
/ 06 мая 2009

Linux не имеет стабильного ядра ABI - такие вещи, как внутренняя структура структур данных и т. Д., Изменяются от версии к версии. VMWare необходимо перестроить, чтобы использовать ABI в новом ядре.

С другой стороны, Windows имеет очень стабильный ABI ядра, который не меняется от пакета обновления к пакету обновления.

1 голос
/ 30 сентября 2011

Это является следствием того, что Linux и Windows разрабатываются в различных культурных средах и ожиданиях: http://www.joelonsoftware.com/articles/Biculturalism.html. Короче говоря: Windows разработана для удобства пользователей, тогда как Linux развивается, чтобы подходить для разработчиков с открытым исходным кодом.

1 голос
/ 06 мая 2009

Чтобы добавить ответ bdonlan, совместимость ABI - это смешанный пакет. С одной стороны, он позволяет распространять двоичные модули и драйверы, которые будут работать с более новыми версиями ядра. С другой стороны, это заставляет программистов ядра добавлять много связующего кода для сохранения обратной совместимости. Поскольку Linux имеет открытый исходный код и разработчики ядра, даже если им даже разрешено , возможность распространения двоичных модулей не считается такой важной. С другой стороны, разработчикам ядра Linux не нужно беспокоиться о совместимости ABI при изменении структур данных для улучшения ядра. В конечном итоге это приводит к более чистому коду ядра.

...