Загружаемый модуль ядра

Поделись знанием:
(перенаправлено с «Модульное ядро»)
Перейти к: навигация, поиск

Загружаемый модуль ядра (loadable kernel module, LKM) — в информатике — объектный файл, содержащий код, расширяющий возможности ядра операционной системы. Модули используются, чтобы добавить поддержку нового оборудования или файловых систем или для добавления новых системных вызовов. Когда функциональность, предоставляемая модулем больше не требуется, он может быть выгружен, чтобы освободить память и другие ресурсы.

Большинство современных Unix систем и Windows, поддерживают загружаемые модули ядра, хотя они могут использовать для них разные названия, например, kernel loadable module (kld) во FreeBSD, kernel extension (kext) в ОС OS X. Иногда их называют Kernel Loadable Modules (KLM), или Kernel Modules (KMOD).





Преимущества

Без загружаемых модулей ядра, операционные системы должны были бы включать всю возможную функциональность в базовом ядре. Значительная часть кода не используется и лишь занимает память. Каждый раз, когда пользователю необходима новая функциональность, ещё не включенная в базовом ядре, требуется полная перекомпиляция базового ядра и перезагрузка. Использование подгружаемых модулей значительно упрощает изменение функциональности ядра и не требует ни полной перекомпиляции (модуль часто может быть собран отдельно от ядра или поставлен в предкомпилированном виде) ни перезагрузок.

Linux

В мире Linux модули загружаются и выгружаются утилитой modprobe. Модули хранятся в /lib/modules в файлах с расширением .ko («kernel object»), начиная с версии Linux 2.6.[1] В предыдущих версиях использовалось расширение .o. Команда lsmod показывает список загруженных модулей ядра и зависимости между ними.

Вопросы лицензирования

По мнению хранителей Linux, LKM — представляет собой производную работу от ядра. Функции ядра могут помечаться как доступные только для GPL модулей.

Загрузка собственнических или GPL-несовместимых модулей устанавливает флаг 'taint' (порча)[2] в ядре. Данный флаг означает, что какие-либо проблемы или баги имеют меньшие шансы на исследование хранителями ядра.[3][4] Модули фактически становятся частью работающего ядра и могут повредить внутренние структуры данных, создавая ошибки, которые не могут быть воспроизведены теми, кто не может загрузить проприетарный модуль.

Дело Linuxant

В 2004 году, консалтинговая компания Linuxant, выпускавшая проприетарный модуль (драйвер устройства) попыталась обойти ограничения «GPLONLY» на некоторые функции ядра. Для этого в исходном коде своего модуля в графе MODULE_LICENSE был использован символ NULL:

MODULE_LICENSE ("GPL\0for files in the \"GPL\" directory; for others, only LICENSE file applies");

Определение лицензии ядром Linux производится путём лексикографического сравнения NULL-терминированных строк, поэтому сравнение указаной строки будет эквивалентно сравнению со строкой "GPL", в то время как модуль не распространяется по лицензии GPL.[5]

FreeBSD

Модули ядра ОС FreeBSD хранятся в /boot/kernel/ (модули, распространяемые с дистрибутивом) или в /boot/modules/ для модулей, установленных из FreeBSD портов и других источников. Ядерные модули FreeBSD обычно имеют расширение .ko. Модули могут подгружаться командой kldload, выгружаться kldunload. Список модулей виден по команде kldstat. Некоторые модули загружаются на этапе первичной загрузки (указываются в файле /boot/loader.conf).

OS X

Некоторые загружаемые модули ядра в OS X могут быть загружены автоматически. Загружаемые модули ядра могут быть также загружены командой kextload. Список может быть выведен командой kextstat. Загружаемые модули ядра расположены в программных пакетах с расширением .kext. Модули поставляемые с операционной системой, хранятся в каталоге /System/Library/Extensions, модули от третьих лиц в других каталогах.

Бинарная совместимость

Linux не обеспечивает стабильный API или ABI для модулей ядра. Это означает, что существуют различия во внутренней структуре и функции между разными версиями ядра, которые могут вызвать проблемы совместимости. В попытке борьбы с этими проблемами, символ управления версиями данных помещается в .modinfo в разделе загружаемых ELF модулей. Это версий, информация может быть по сравнению с тем, что ядро перед загрузкой модуля; если версии несовместимы, то модуль не будет загружен.

Другие операционные системы, такие как Solaris, FreeBSD, Mac OS X, Windows, поддерживают API и ABI для модулей относительно стабильными, что позволяет избежать этой проблемы. Например, модули FreeBSD, скомпилированные под версию ядра 6.0 будет работать без перекомпиляции на любой другой версии FreeBSD 6.x, например, 6.4. Однако они не совместимы с другими основными версиями и должны быть перекомпилированы для использования с FreeBSD 7.x, так как совместимость API и ABI поддерживается только внутри одной ветви.

Безопасность

Загружаемые модули ядра являются удобным способом модифицировать ядро, это может быть использовано злоумышленником при взломе системы для предотвращения обнаружения его процессов или файлов, позволяя ему сохранить контроль над системой. Поэтому многие руткиты используют модули ядра.[6]

Источники

  1. [tldp.org/LDP/lkmpg/2.6/html/x181.html The Linux Kernel Module Programming Guide, section 2.2 "Compiling Kernel Modules"]. Проверено 14 октября 2011. [www.webcitation.org/6Aol4719w Архивировано из первоисточника 20 сентября 2012].
  2. Linus Torvalds, et all. [repo.or.cz/w/linux-2.6.git/blob/HEAD:/Documentation/oops-tracing.txt#l222 Documentation/oops-tracing.txt]. kernel.org (21 июня 2011). Проверено 3 октября 2011. [www.webcitation.org/6Aol4YVdd Архивировано из первоисточника 20 сентября 2012].
  3. Jonathan Corbet. [lwn.net/Articles/184879/ Tainting from user space]. LWN.net (24 марта 2006). Проверено 3 октября 2011.
  4. [www.novell.com/support/viewContent.do?externalId=3582750&sliceId=1 Novell support documentation: Tainted kernel] (26 июля 2007). Проверено 3 октября 2011. [www.webcitation.org/6Aol5HrlK Архивировано из первоисточника 20 сентября 2012].
  5. Jonathan Corbet. [lwn.net/Articles/82305/ Being honest with MODULE_LICENSE]. LWN.net (27 августа 2004). Проверено 4 июня 2012. [www.webcitation.org/6Aol6KKST Архивировано из первоисточника 20 сентября 2012].
  6. [www.ouah.org/reiterlkm.htm Эксплуатация Загружаемых Модулей ядра]

Напишите отзыв о статье "Загружаемый модуль ядра"

Ссылки

  • [www.ibm.com/developerworks/linux/library/l-lkm/index.html?ca=dgr-lnxw07LinuxLKM&S_TACT=105AGX59&S_CMP=GR IBM DeveloperWorks in-depth article on LKM]
  • [www.kexts.com/ Online kext database for OS / Hackintosh]
  • [en.tldp.org/LDP/lkmpg/index.html Ori Pomerantz, Модули Ядра Linux Руководство По Программированию]
  • [developer.apple.com/mac/library/documentation/Darwin/Conceptual/KEXTConcept/KEXTConceptIntro/introduction.html «Kernel Extension Programming Topics» document for OS X]

Отрывок, характеризующий Загружаемый модуль ядра

– Вот это голландский посланик, видите, седой, – говорила Перонская, указывая на старичка с серебряной сединой курчавых, обильных волос, окруженного дамами, которых он чему то заставлял смеяться.
– А вот она, царица Петербурга, графиня Безухая, – говорила она, указывая на входившую Элен.
– Как хороша! Не уступит Марье Антоновне; смотрите, как за ней увиваются и молодые и старые. И хороша, и умна… Говорят принц… без ума от нее. А вот эти две, хоть и нехороши, да еще больше окружены.
Она указала на проходивших через залу даму с очень некрасивой дочерью.
– Это миллионерка невеста, – сказала Перонская. – А вот и женихи.
– Это брат Безуховой – Анатоль Курагин, – сказала она, указывая на красавца кавалергарда, который прошел мимо их, с высоты поднятой головы через дам глядя куда то. – Как хорош! неправда ли? Говорят, женят его на этой богатой. .И ваш то соusin, Друбецкой, тоже очень увивается. Говорят, миллионы. – Как же, это сам французский посланник, – отвечала она о Коленкуре на вопрос графини, кто это. – Посмотрите, как царь какой нибудь. А всё таки милы, очень милы французы. Нет милей для общества. А вот и она! Нет, всё лучше всех наша Марья то Антоновна! И как просто одета. Прелесть! – А этот то, толстый, в очках, фармазон всемирный, – сказала Перонская, указывая на Безухова. – С женою то его рядом поставьте: то то шут гороховый!
Пьер шел, переваливаясь своим толстым телом, раздвигая толпу, кивая направо и налево так же небрежно и добродушно, как бы он шел по толпе базара. Он продвигался через толпу, очевидно отыскивая кого то.
Наташа с радостью смотрела на знакомое лицо Пьера, этого шута горохового, как называла его Перонская, и знала, что Пьер их, и в особенности ее, отыскивал в толпе. Пьер обещал ей быть на бале и представить ей кавалеров.
Но, не дойдя до них, Безухой остановился подле невысокого, очень красивого брюнета в белом мундире, который, стоя у окна, разговаривал с каким то высоким мужчиной в звездах и ленте. Наташа тотчас же узнала невысокого молодого человека в белом мундире: это был Болконский, который показался ей очень помолодевшим, повеселевшим и похорошевшим.
– Вот еще знакомый, Болконский, видите, мама? – сказала Наташа, указывая на князя Андрея. – Помните, он у нас ночевал в Отрадном.
– А, вы его знаете? – сказала Перонская. – Терпеть не могу. Il fait a present la pluie et le beau temps. [От него теперь зависит дождливая или хорошая погода. (Франц. пословица, имеющая значение, что он имеет успех.)] И гордость такая, что границ нет! По папеньке пошел. И связался с Сперанским, какие то проекты пишут. Смотрите, как с дамами обращается! Она с ним говорит, а он отвернулся, – сказала она, указывая на него. – Я бы его отделала, если бы он со мной так поступил, как с этими дамами.


Вдруг всё зашевелилось, толпа заговорила, подвинулась, опять раздвинулась, и между двух расступившихся рядов, при звуках заигравшей музыки, вошел государь. За ним шли хозяин и хозяйка. Государь шел быстро, кланяясь направо и налево, как бы стараясь скорее избавиться от этой первой минуты встречи. Музыканты играли Польской, известный тогда по словам, сочиненным на него. Слова эти начинались: «Александр, Елизавета, восхищаете вы нас…» Государь прошел в гостиную, толпа хлынула к дверям; несколько лиц с изменившимися выражениями поспешно прошли туда и назад. Толпа опять отхлынула от дверей гостиной, в которой показался государь, разговаривая с хозяйкой. Какой то молодой человек с растерянным видом наступал на дам, прося их посторониться. Некоторые дамы с лицами, выражавшими совершенную забывчивость всех условий света, портя свои туалеты, теснились вперед. Мужчины стали подходить к дамам и строиться в пары Польского.
Всё расступилось, и государь, улыбаясь и не в такт ведя за руку хозяйку дома, вышел из дверей гостиной. За ним шли хозяин с М. А. Нарышкиной, потом посланники, министры, разные генералы, которых не умолкая называла Перонская. Больше половины дам имели кавалеров и шли или приготовлялись итти в Польской. Наташа чувствовала, что она оставалась с матерью и Соней в числе меньшей части дам, оттесненных к стене и не взятых в Польской. Она стояла, опустив свои тоненькие руки, и с мерно поднимающейся, чуть определенной грудью, сдерживая дыхание, блестящими, испуганными глазами глядела перед собой, с выражением готовности на величайшую радость и на величайшее горе. Ее не занимали ни государь, ни все важные лица, на которых указывала Перонская – у ней была одна мысль: «неужели так никто не подойдет ко мне, неужели я не буду танцовать между первыми, неужели меня не заметят все эти мужчины, которые теперь, кажется, и не видят меня, а ежели смотрят на меня, то смотрят с таким выражением, как будто говорят: А! это не она, так и нечего смотреть. Нет, это не может быть!» – думала она. – «Они должны же знать, как мне хочется танцовать, как я отлично танцую, и как им весело будет танцовать со мною».
Звуки Польского, продолжавшегося довольно долго, уже начинали звучать грустно, – воспоминанием в ушах Наташи. Ей хотелось плакать. Перонская отошла от них. Граф был на другом конце залы, графиня, Соня и она стояли одни как в лесу в этой чуждой толпе, никому неинтересные и ненужные. Князь Андрей прошел с какой то дамой мимо них, очевидно их не узнавая. Красавец Анатоль, улыбаясь, что то говорил даме, которую он вел, и взглянул на лицо Наташе тем взглядом, каким глядят на стены. Борис два раза прошел мимо них и всякий раз отворачивался. Берг с женою, не танцовавшие, подошли к ним.
Наташе показалось оскорбительно это семейное сближение здесь, на бале, как будто не было другого места для семейных разговоров, кроме как на бале. Она не слушала и не смотрела на Веру, что то говорившую ей про свое зеленое платье.
Наконец государь остановился подле своей последней дамы (он танцовал с тремя), музыка замолкла; озабоченный адъютант набежал на Ростовых, прося их еще куда то посторониться, хотя они стояли у стены, и с хор раздались отчетливые, осторожные и увлекательно мерные звуки вальса. Государь с улыбкой взглянул на залу. Прошла минута – никто еще не начинал. Адъютант распорядитель подошел к графине Безуховой и пригласил ее. Она улыбаясь подняла руку и положила ее, не глядя на него, на плечо адъютанта. Адъютант распорядитель, мастер своего дела, уверенно, неторопливо и мерно, крепко обняв свою даму, пустился с ней сначала глиссадом, по краю круга, на углу залы подхватил ее левую руку, повернул ее, и из за всё убыстряющихся звуков музыки слышны были только мерные щелчки шпор быстрых и ловких ног адъютанта, и через каждые три такта на повороте как бы вспыхивало развеваясь бархатное платье его дамы. Наташа смотрела на них и готова была плакать, что это не она танцует этот первый тур вальса.