0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

什么是 Linux 內(nèi)核模塊?

Linux愛好者 ? 來源:YXQ ? 2019-08-09 17:01 ? 次閱讀

lsmod 命令能夠告訴你當(dāng)前系統(tǒng)上加載了哪些內(nèi)核模塊,以及關(guān)于使用它們的一些有趣的細(xì)節(jié)。

什么是 Linux 內(nèi)核模塊?

內(nèi)核模塊是可以根據(jù)需要加載到內(nèi)核中或從內(nèi)核中卸載的代碼塊,因此無需重啟就可以擴(kuò)展內(nèi)核的功能。事實上,除非用戶使用類似 lsmod 這樣的命令來查詢模塊信息,否則用戶不太可能知道內(nèi)核發(fā)生的任何變化。

需要知道的重要一點(diǎn)是,在你的 Linux 系統(tǒng)上總會有很多可用的模塊,并且如果你可以深入其中了解到很多細(xì)節(jié)。

lsmod 的主要用途之一是在系統(tǒng)不能正常工作時檢查模塊。然而,大多數(shù)情況下,模塊會根據(jù)需要加載的,而且用戶不需要知道它們?nèi)绾芜\(yùn)作。

顯示內(nèi)核模塊

顯示內(nèi)核模塊最簡單的方法是使用 lsmod 命令。雖然這個命令包含了很多細(xì)節(jié),但輸出卻是非常用戶友好。

$ lsmodModule                  Size  Used bysnd_hda_codec_realtek 114688  1snd_hda_codec_generic  77824  1 snd_hda_codec_realtekledtrig_audio          16384  2 snd_hda_codec_generic,snd_hda_codec_realteksnd_hda_codec_hdmi     53248  1snd_hda_intel          40960  2snd_hda_codec         131072  4 snd_hda_codec_generic,snd_hda_codec_hdmi,snd_hda_intel                                ,snd_hda_codec_realteksnd_hda_core           86016  5 snd_hda_codec_generic,snd_hda_codec_hdmi,snd_hda_intel                                ,snd_hda_codec,snd_hda_codec_realteksnd_hwdep              20480  1 snd_hda_codecsnd_pcm               102400  4 snd_hda_codec_hdmi,snd_hda_intel,snd_hda_codec,snd_hda                                _coresnd_seq_midi           20480  0snd_seq_midi_event     16384  1 snd_seq_mididcdbas                 20480  0snd_rawmidi            36864  1 snd_seq_midisnd_seq                69632  2 snd_seq_midi,snd_seq_midi_eventcoretemp               20480  0snd_seq_device         16384  3 snd_seq,snd_seq_midi,snd_rawmidisnd_timer              36864  2 snd_seq,snd_pcmkvm_intel             241664  0kvm                   626688  1 kvm_intelradeon               1454080  10irqbypass              16384  1 kvmjoydev                 24576  0input_leds             16384  0ttm                   102400  1 radeondrm_kms_helper        180224  1 radeondrm                   475136  13 drm_kms_helper,radeon,ttmsnd                    81920  15 snd_hda_codec_generic,snd_seq,snd_seq_device,snd_hda                                 _codec_hdmi,snd_hwdep,snd_hda_intel,snd_hda_codec,snd                                 _hda_codec_realtek,snd_timer,snd_pcm,snd_rawmidii2c_algo_bit           16384  1 radeonfb_sys_fops            16384  1 drm_kms_helpersyscopyarea            16384  1 drm_kms_helperserio_raw              20480  0sysfillrect            16384  1 drm_kms_helpersysimgblt              16384  1 drm_kms_helpersoundcore              16384  1 sndmac_hid                16384  0sch_fq_codel           20480  2parport_pc             40960  0ppdev                  24576  0lp                     20480  0parport                53248  3 parport_pc,lp,ppdevip_tables              28672  0x_tables               40960  1 ip_tablesautofs4                45056  2raid10                 57344  0raid456               155648  0async_raid6_recov      24576  1 raid456async_memcpy           20480  2 raid456,async_raid6_recovasync_pq               24576  2 raid456,async_raid6_recovasync_xor              20480  3 async_pq,raid456,async_raid6_recovasync_tx               20480  5 async_pq,async_memcpy,async_xor,raid456,async_raid6_re                                covxor                    24576  1 async_xorraid6_pq              114688  3 async_pq,raid456,async_raid6_recovlibcrc32c              16384  1 raid456raid1                  45056  0raid0                  24576  0multipath              20480  0linear                 20480  0hid_generic            16384  0psmouse               151552  0i2c_i801               32768  0pata_acpi              16384  0lpc_ich                24576  0usbhid                 53248  0hid                   126976  2 usbhid,hid_generice1000e                245760  0floppy                 81920  0

在上面的輸出中:

Module顯示每個模塊的名稱

Size顯示每個模塊的大小(并不是它們占的內(nèi)存大小)

Used by顯示每個模塊被使用的次數(shù)和使用它們的模塊

顯然,這里有很多模塊。加載的模塊數(shù)量取決于你的系統(tǒng)和版本以及正在運(yùn)行的內(nèi)容。我們可以這樣計數(shù)

$ lsmod | wc -l67

要查看系統(tǒng)中可用的模塊數(shù)(不止運(yùn)行當(dāng)中的),試試這個命令:

$ modprobe -c | wc -l41272

與內(nèi)核模塊相關(guān)的其他命令

Linux 提供了幾條用于羅列、加載及卸載、測試,以及檢查模塊狀態(tài)的命令。

depmod—— 生成modules.dep和映射文件

insmod—— 一個往 Linux 內(nèi)核插入模塊的程序

lsmod—— 顯示 Linux 內(nèi)核中模塊狀態(tài)

modinfo—— 顯示 Linux 內(nèi)核模塊信息

modprobe—— 添加或移除 Linux 內(nèi)核模塊

rmmod—— 一個從 Linux 內(nèi)核移除模塊的程序

顯示內(nèi)置的內(nèi)核模塊

正如前文所說,lsmod 命令是顯示內(nèi)核模塊最方便的命令。然而,也有其他方式可以顯示它們。modules.builtin 文件中列出了所有構(gòu)建在內(nèi)核中的模塊,在 modprobe 命令嘗試添加文件中的模塊時會使用它。注意,以下命令中的$(uname -r)提供了內(nèi)核版本的名稱。

$ more /lib/modules/$(uname -r)/modules.builtin | head -10kernel/arch/x86/crypto/crc32c-intel.kokernel/arch/x86/events/intel/intel-uncore.kokernel/arch/x86/platform/intel/iosf_mbi.kokernel/mm/zpool.kokernel/mm/zbud.kokernel/mm/zsmalloc.kokernel/fs/binfmt_script.kokernel/fs/mbcache.kokernel/fs/configfs/configfs.kokernel/fs/crypto/fscrypto.ko

你可以使用 modinfo 獲得一個模塊的更多細(xì)節(jié),雖然沒有對模塊提供的服務(wù)的簡單說明。下面輸出內(nèi)容中省略了冗長的簽名。

$ modinfo floppy | head -16filename:       /lib/modules/5.0.0-13-generic/kernel/drivers/block/floppy.koalias:          block-major-2-*license:        GPLauthor:         Alain L. Knaffsrcversion:     EBEAA26742DF61790588FD9alias:          acpi*:PNP0700:*alias:          pnp:dPNP0700*depends:retpoline:      Yintree:         Yname:           floppyvermagic:       5.0.0-13-generic SMP mod_unloadsig_id:         PKCS#7signer:sig_key:sig_hashalgo:   md4

你可以使用 modprobe 命令加載或卸載模塊。使用下面這條命令,你可以找到特定模塊關(guān)聯(lián)的內(nèi)核對象:

$ find /lib/modules/$(uname -r) -name floppy*/lib/modules/5.0.0-13-generic/kernel/drivers/block/floppy.ko

如果你想要加載模塊,你可以使用這個命令:

$ sudo modprobe floppy

總結(jié)

很明顯,內(nèi)核模塊的加載和卸載非常重要。它使得 Linux 系統(tǒng)比使用通用內(nèi)核運(yùn)行時更加靈活和高效。這同樣意味著你可以進(jìn)行重大更改而無需重啟,例如添加硬件。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11123

    瀏覽量

    207888
  • 內(nèi)核模塊
    +關(guān)注

    關(guān)注

    0

    文章

    10

    瀏覽量

    3076

原文標(biāo)題:深入學(xué)習(xí) Linux 內(nèi)核模塊

文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    Linux 內(nèi)核模塊工作原理及內(nèi)核模塊編譯案例

    一個內(nèi)核模塊至少包含兩個函數(shù),模塊被加載時執(zhí)行的初始化函數(shù)init_module()和模塊被卸載時執(zhí)行的結(jié)束函數(shù)cleanup_module()。
    發(fā)表于 09-23 09:39 ?2418次閱讀
    <b class='flag-5'>Linux</b> <b class='flag-5'>內(nèi)核模塊</b>工作原理及<b class='flag-5'>內(nèi)核模塊</b>編譯案例

    詳解Linux內(nèi)核模塊的編寫方法

    Linux 系統(tǒng)為應(yīng)用程序提供了功能強(qiáng)大且容易擴(kuò)展的 API,但在某些情況下,這還遠(yuǎn)遠(yuǎn)不夠。與硬件交互或進(jìn)行需要訪問系統(tǒng)中特權(quán)信息的操作時,就需要一個內(nèi)核模塊。
    的頭像 發(fā)表于 05-11 08:55 ?3656次閱讀

    Linux內(nèi)核模塊間通訊方法

    Linux內(nèi)核模塊間通訊方法非常的多,最便捷的方法莫過于函數(shù)或變量符號導(dǎo)出,然后直接調(diào)用。默認(rèn)情況下,模塊模塊之間、模塊
    發(fā)表于 06-07 16:23 ?2234次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核模塊</b>間通訊方法

    Linux內(nèi)核模塊有什么用?

    內(nèi)核LINUX內(nèi)核Linux開發(fā)
    jf_97106930
    發(fā)布于 :2022年08月26日 19:45:17

    Linux內(nèi)核模塊有什么用?

    Linux
    學(xué)習(xí)電子知識
    發(fā)布于 :2023年02月25日 22:19:56

    Linux內(nèi)核模塊程序結(jié)構(gòu)

    Linux設(shè)備驅(qū)動會以內(nèi)核模塊的形式出現(xiàn),因此,學(xué)會編寫Linux內(nèi)核模塊編程是學(xué)習(xí)Linux設(shè)備驅(qū)動的先決條件。一個
    發(fā)表于 05-27 09:36

    Linux內(nèi)核模塊簡介

    Linux內(nèi)核模塊簡介http://bbs.edu118.com/forum.php?mod=viewthread&tid=388&fromuid=204(出處: 信盈達(dá)IT技術(shù)社
    發(fā)表于 08-22 09:22

    Linux內(nèi)核模塊與應(yīng)用程序的對比

    用戶態(tài)程序Linux內(nèi)核模塊運(yùn)行用戶空間 內(nèi)核空間 入口main() module_init()指定; 出口無 module_exit()指定; 編譯gcc –cMakefile 連接
    發(fā)表于 07-03 03:15

    Xilinx是否有可以在PCI Express根端口主機(jī)PC上運(yùn)行的Linux內(nèi)核模塊驅(qū)動程序?

    我們有一個基于ZYNQ XC7Z030全定制SOC的定制板。該板具有用于PCI Express的7系列FPGA集成模塊。Xilinx是否有可以在PCI Express根端口主機(jī)PC上運(yùn)行的Linux內(nèi)核模塊驅(qū)動程序,以與上述PC
    發(fā)表于 08-05 14:13

    Linux內(nèi)核模塊的相關(guān)資料分享

    這里給出一個Linux內(nèi)核模塊的最簡單的示例程序,當(dāng)然,真實的驅(qū)動程序要比這個復(fù)雜。#include #include static int xxx_init(void){ printk(KERN_INFO "Hello Linux
    發(fā)表于 12-20 07:29

    如何去實現(xiàn)一種Linux內(nèi)核模塊編程呢

    Linux內(nèi)核模塊編程 就職于國內(nèi)一家半導(dǎo)體公司,擔(dān)任高級系統(tǒng)軟件工程師職位...
    發(fā)表于 12-23 07:52

    Linux設(shè)備驅(qū)動開發(fā)詳解》第4章、Linux內(nèi)核模塊

    Linux設(shè)備驅(qū)動開發(fā)詳解》第4章、Linux內(nèi)核模塊
    發(fā)表于 10-27 14:15 ?0次下載
    《<b class='flag-5'>Linux</b>設(shè)備驅(qū)動開發(fā)詳解》第4章、<b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核模塊</b>

    如何在Petalinux創(chuàng)建Linux內(nèi)核模塊

    --enable”,能創(chuàng)建Linux內(nèi)核模塊,包括c源代碼文件,Makefile,Yocto的bb文件。相關(guān)文件放在目錄“ project-spec / meta-user / recipes-modules”中
    的頭像 發(fā)表于 03-02 11:10 ?4176次閱讀

    Linux內(nèi)核模塊簡介

    Linux系統(tǒng)內(nèi)核按體積和功能的不同,可以分為兩種:微內(nèi)核與單內(nèi)核。 微內(nèi)核,體積小,包含的功能也少,只負(fù)責(zé)進(jìn)行進(jìn)程調(diào)度、進(jìn)程通信、底
    發(fā)表于 01-17 09:57 ?1次下載
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核模塊</b>簡介

    Linux內(nèi)核模塊參數(shù)傳遞與sysfs文件系統(tǒng)

    函數(shù)傳參的內(nèi)核傳參機(jī)制,編寫內(nèi)核程序時只要實現(xiàn)傳參接口,用戶在加載內(nèi)核模塊時即可傳入指定參數(shù),使得內(nèi)核模塊更加靈活。
    發(fā)表于 06-07 16:23 ?1913次閱讀