Linux ядро

Управление на модули на ядрото на Linux

Управление на модули на ядрото на Linux

Разбиране на ядрото на Linux

Ядрото на Linux е ядрото на операционната система Linux. Той съдържа основните компоненти за адресиране на хардуера и позволява както комуникация, така и взаимодействие между потребителя и хардуера. Ядрото на Linux не е монолитна система, а доста гъвкаво и ядрото се разширява от така наречените модули на ядрото.

Какво е модул на ядрото?

По принцип модулът на ядрото е „парче код, което може да се зарежда и разтоварва в ядрото при поискване. Те разширяват функционалността на ядрото, без да е необходимо рестартиране на системата ”[1]. Това води до много голяма гъвкавост по време на работа.

Освен това, „модулът на ядрото може да бъде конфигуриран като вграден или зареждаем. За динамично зареждане или премахване на модул той трябва да бъде конфигуриран като модул за зареждане в конфигурацията на ядрото ”[1]. Това се прави в изходния файл на ядрото / usr / src / linux /.конфиг [2]. Вградените модули са маркирани с „y“, а зареждащите модули с „m“. Като пример, списък 1 демонстрира това за модула SCSI:

Листинг 1: Декларация за използване на модула SCSI

CONFIG_SCSI = y # вграден модул
CONFIG_SCSI = m # модул за зареждане
# CONFIG_SCSI # променлива не е зададена

Не препоръчваме да редактирате директно конфигурационния файл, но да използвате командата „make config“, „make menuconfig“ или „make xconfig“, за да дефинирате използването на съответния модул в ядрото на Linux.

Модулни команди

Системата Linux се предлага с множество различни команди за обработка на модулите на ядрото. Това включва изброяване на модулите, заредени в момента в ядрото на Linux, показване на информация за модула, както и зареждане и разтоварване на модулите на ядрото. По-долу ще обясним тези команди по-подробно.

За текущите ядра на Linux следните пакети се предоставят от пакета kmod [3]. Всички команди са символни връзки към kmod.

В момента списъкът зарежда модули с lsmod

Започваме с командата lsmod. lsmod съкращава „списък с модули“ и показва всички модули, които в момента са заредени в ядрото на Linux, като форматира добре съдържанието на файла / proc / modules. Листинг 2 показва изхода, който се състои от три колони: име на модул, размера, използван в паметта, и други модули на ядрото, които използват този специфичен.

Листинг 2: Използване на lsmod

$ lsmod
Размер на модула, използван от
ctr 12927 2
ccm 17534 2
snd_hrtimer 12604 1
snd_seq 57112 1
snd_seq_device 13132 1 snd_seq
..
$

Намерете наличните модули за текущото ви ядро

Може да има налични модули на ядрото, за които все още не сте запознати. Те се съхраняват в директория / lib / модули. С помощта на find, комбиниран с командата uname, можете да отпечатате списък с тези модули. “Uname -r” просто отпечатва версията на текущо работещото ядро ​​на Linux. Листинг 3 демонстрира това за по-стар 3.16.0-7 Linux
ядро и показва модули за IPv6 и IRDA.

Листинг 3: Показване на наличните модули (избор)

$ find / lib / modules / $ (uname -r) -name '*.ко '
/ lib / модули / 3.16.0-7-amd64 / kernel / net / ipv6 / ip6_vti.ко
/ lib / модули / 3.16.0-7-amd64 / kernel / net / ipv6 / xfrm6_tunnel.ко
/ lib / модули / 3.16.0-7-amd64 / kernel / net / ipv6 / ip6_tunnel.ко
/ lib / модули / 3.16.0-7-amd64 / kernel / net / ipv6 / ip6_gre.ко
/ lib / модули / 3.16.0-7-amd64 / kernel / net / irda / irnet / irnet.ко
/ lib / модули / 3.16.0-7-amd64 / kernel / net / irda / irlan / irlan.ко
/ lib / модули / 3.16.0-7-amd64 / kernel / net / irda / irda.ко
/ lib / модули / 3.16.0-7-amd64 / kernel / net / irda / ircomm / ircomm.ко
/ lib / модули / 3.16.0-7-amd64 / kernel / net / irda / ircomm / ircomm-tty.ко
..
$

Показвайте информация за модула, използвайки modinfo

Командата modinfo ви разказва повече за искания модул на ядрото („информация за модула“). Като параметър modinfo изисква или пълния път на модула, или просто името на модула. Листинг 4 демонстрира това за модула на ядрото IrDA, работещ със стека протокол с инфрачервен директен достъп.

Листинг 4: Показване на информация за модула

$ / sbin / modinfo irda
име на файл: / lib / modules / 3.16.0-7-amd64 / kernel / net / irda / irda.ко
псевдоним: net-pf-23
лиценз: GPL
описание: Linux IrDA Protocol Stack
автор: Даг Братли & Jean Tourrilhes
зависи: crc-ccitt
вермагичен: 3.16.0-7-amd64 SMP mod_unload модификации
$

Резултатът съдържа различни информационни полета, като пълния път на модула на ядрото, неговото псевдоним, лиценз за софтуер, описание на модула, автори, както и вътрешни елементи на ядрото. Полето „зависи“ показва от кои други модули на ядрото зависи.

Информационните полета се различават при различните модули. За да ограничи изхода до конкретно информационно поле, modinfo приема параметъра “-F” (съкратено от “-field”), последван от името на полето. В листинг 5 изходът е ограничен до информацията за лиценза, предоставена чрез полето за лиценз.

Листинг 5: Показвайте само конкретно поле.

$ / sbin / modinfo -F лиценз irda
GPL
$

В по-новите ядра на Linux е налична полезна функция за защита. Това обхваща криптографски подписани модули на ядрото. Както е обяснено на уебсайта на проекта за ядрото на Linux [4], „това позволява повишена сигурност на ядрото, като забранява зареждането на неподписани модули или модули
подписан с невалиден ключ. Подписването на модули повишава сигурността, като затруднява зареждането на зловреден модул в ядрото. Проверката на подписите на модула се извършва от ядрото, така че не е необходимо да има „битове с доверено потребителско пространство.Фигурата по-долу показва това за
модул parport_pc.

Показване на конфигурацията на модула с помощта на modprobe

Всеки модул на ядрото се доставя със специфична конфигурация. Командата modprobe, последвана от опцията “-c” (съкратено от “-showconfig”), изброява конфигурацията на модула. В комбинация с grep този изход е ограничен до определен символ. Листинг 6 демонстрира това за опциите за IPv6.

Листинг 6: Показване на конфигурацията на модула

$ / sbin / modprobe -c | grep ipv6
псевдоним net_pf_10_proto_0_type_6 dccp_ipv6
псевдоним net_pf_10_proto_33_type_6 dccp_ipv6
псевдоним nf_conntrack_10 nf_conntrack_ipv6
псевдоним nf_nat_10 nf_nat_ipv6
псевдоним nft_afinfo_10 nf_tables_ipv6
псевдоним nft_chain_10_nat nft_chain_nat_ipv6
псевдоним nft_chain_10_route nft_chain_route_ipv6
псевдоним nft_expr_10_reject nft_reject_ipv6
псевдоним символ: nf_defrag_ipv6_enable nf_defrag_ipv6
псевдоним символ: nf_nat_icmpv6_reply_translation nf_nat_ipv6
псевдоним символ: nft_af_ipv6 nf_tables_ipv6
псевдоним символ: nft_reject_ipv6_eval nft_reject_ipv6
$

Показване на зависимости от модула

Ядрото на Linux е проектирано да бъде модулно и функционалността е разпределена в редица модули. Това води до няколко модулни зависимости, които могат да бъдат показани отново с помощта на modprobe. Листинг 7 използва опцията “-show-zavisi”, за да изброи зависимостите за модула i915.

Листинг 7: Показване на зависимости от модула

$ / sbin / modprobe --show-зависи i915
insmod / lib / модули / 3.16.0-7-amd64 / kernel / drivers / i2c / i2c-core.ко
insmod / lib / модули / 3.16.0-7-amd64 / kernel / drivers / i2c / algos / i2c-algo-bit.ко
insmod / lib / модули / 3.16.0-7-amd64 / kernel / drivers / thermal / thermal_sys.ко
insmod / lib / модули / 3.16.0-7-amd64 / kernel / drivers / gpu / drm / drm.ко
insmod / lib / модули / 3.16.0-7-amd64 / kernel / drivers / gpu / drm / drm_kms_helper.ко
insmod / lib / модули / 3.16.0-7-amd64 / kernel / drivers / acpi / video.ко
insmod / lib / модули / 3.16.0-7-amd64 / kernel / drivers / acpi / бутон.ко
insmod / lib / модули / 3.16.0-7-amd64 / kernel / drivers / gpu / drm / i915 / i915.ко
$

За да се покажат зависимостите като дърво, подобно на командата „дърво“ или „lsblk“, проектът modtree [5] може да помогне (вижте фигурата по-долу за дървото на модула i915). Въпреки че е свободно достъпен на GitHub, той изисква някои адаптации, за да се съобразят с правилата за безплатен софтуер и да стане част от дистрибуция на Linux като пакет.

Зареждане на модули

Зареждането на модул в работещо ядро ​​може да стане чрез две команди - insmod (“insert module”) и modprobe. Имайте предвид, че има малка, но важна разлика между тези две: insmod не разрешава зависимостите на модулите, но modprobe е по-умен и прави това.

Листинг 8 показва как да вмъкнете модула на ядрото IrDA. Моля, обърнете внимание, че insmode работи с пълния път на модула, докато modprobe е доволен от името на модула и го търси сам в дървото на модула за текущото ядро ​​на Linux.

Листинг 8: Вмъкване на модул на ядрото

# insmod / lib / modules / 3.16.0-7-amd64 / kernel / net / irda / irda.ко
..
# modprobe irda

Разтоварване на модули

Последната стъпка се занимава с разтоварване на модули от работещо ядро. Отново има две команди, налични за тази задача - modprobe и rmmod („премахване на модула“). И двете команди очакват името на модула като параметър. Листинг 9 показва това за премахване на модула IrDA от работещото ядро ​​на Linux.

Листинг 9: Премахване на модул на ядрото

# rmmod irda
..
# modprobe -r irda
..

Заключение

Работата с модулите на ядрото на Linux не е голяма магия. Само няколко команди, които трябва да научите, а вие сте господар на кухнята.

Благодаря ти

Авторът би искал да благодари на Аксел Бекерт (ETH Zürich) и Сайф дю Плесис (Hothead Studio Cape Town) за помощта при подготовката на статията.

Връзки и справки

  • [1] Модул на ядрото, wiki Arch Linux, https: // wiki.archlinux.org / индекс.php / Kernel_module
  • [2] Конфигурация на ядрото, https: // tldp.org / HOWTO / SCSI-2.4-HOWTO / kconfig.html
  • [3] kmod, https: // git.ядро.org / pub / scm / utils / kernel / kmod / kmod.git
  • [4] Съоръжение за подписване на модул на ядрото, https: // www.ядро.org / doc / html / v4.15 / админ-ръководство / подписване на модул.html
  • [5] modtree, https: // github.com / falconindy / modtree
Как да промените левия и десния бутон на мишката на компютър с Windows 10
Напълно нормално е всички устройства на компютърни мишки да са ергономично проектирани за десничари. Но има налични устройства за мишка, които са спец...
Емулирайте кликванията на мишката, като задържите курсора на мишката с кликаща мишка в Windows 10
Използването на мишка или клавиатура в неправилна поза при прекомерна употреба може да доведе до много здравословни проблеми, включително напрежение, ...
Добавете жестове на мишката към Windows 10, като използвате тези безплатни инструменти
През последните години компютрите и операционните системи значително се развиха. Имаше време, когато потребителите трябваше да използват команди за на...