Linux下編寫和加載 .ko 文件(編寫linux驅動)


一、.ko 文件介紹

.ko文件是kernel object文件(內核模塊),該文件的意義就是把內核的一些功能移動到內核外邊, 需要的時候插入內核,不需要時卸載。

二、優點

1)這樣可以縮小內核體積;
(2)使用方便。

 

三、.ko文件一般的用處

1)作為一個功能模塊,需要使用時,直接插入運行就行。如在imx6上連接模擬攝像頭,先運行模擬攝像頭對應的驅動模塊 camera.ko文件,然后對應的工程執行文件運行就行。

四、開發環境搭建

  [root@ht5 src]# cd /usr/src/kernels/
  [root@ht5 kernels]# ls   //這個下面沒有安裝時,什么也沒有
  [root@ht5 kernels]#
  //默認會安裝到/usr/src/kernels下

[root@ht5 src]#rpm -qa kernel-headers
[root@ht5 src]# yum install gcc  //安裝gcc編譯環境也很重要
[root@ht5 src]#yum install -y kernel-devel  //這個很關鍵,很多資料的闡述的方法不准確

  [root@ht5 src]# ls /usr/src/kernels/       //安裝之后查看下這個目錄
  3.10.0-1160.59.1.el7.x86_64

  [root@ht5 src]# ls /usr/src/kernels/3.10.0-1160.59.1.el7.x86_64/
   arch/ crypto/ fs/ ipc/ lib/ mm/ samples/ sound/ usr/
   block/ drivers/ include/ Kconfig Makefile Module.symvers scripts/ System.map virt/
   .config firmware/ init/ kernel/ Makefile.qlock net/ security/ tools/ vmlinux.id

  //確認是否有init.h內核頭文件

  [root@ht5 linux]# ls /usr/src/kernels/3.10.0-1160.59.1.el7.x86_64/include/linux/ | grep init.h
  init.h

  [root@ht5 src]# uname -r   //注意本機和安裝的內核開發環境的版本不是一致的
  3.10.0-1160.42.2.el7.x86_64

五、創建驅動文件mydriver.c

//引入相關內核頭文件
#include <linux/init.h> #include <linux/module.h> MODULE_LICENSE("GPL"); //這里必須要聲明,內核許可證信息
MODULE_AUTHOR("jinzs");
MODULE_DESCRIPTION("mydriver");
MODULE_VERSION("1.0");
//初始化函數
static int mydriver_init(void)
{
  printk(KERN_ALERT "it is mydriver\n");
  return 0;
}
//清理函數,在卸載時調用,回收資源銷毀執行環境
static void mydriver_exit(void) {   printk(KERN_ALERT "out\n"); } //登記初始化函數及清理函數 module_init(mydriver_init); module_exit(mydriver_exit);


############################################################################
內核代碼中會有大量的驅動模塊
例如: E:\linux內核\linux-2.6.0\linux-2.6.0\drivers\i2c\i2c-dev.c

  MODULE_AUTHOR("Frodo Looijaard <frodol@dds.nl> and ""Simon G. Vogl <simon@tk.uni-linz.ac.at>");
  MODULE_DESCRIPTION("I2C /dev entries driver");
  MODULE_LICENSE("GPL");
  module_init(i2c_dev_init);
  module_exit(i2c_dev_exit);
  //看完本文基本就知道,它的加載機制和實現機制了

六、編譯驅動文件mydriver.c,利用Makefile文件

obj-m   := mydriver.o    //obj-m后是tab鍵縮進
KERNEL := /usr/src/kernels/3.10.0-1160.59.1.el7.x86_64/
PWD     :=$(shell pwd)   //PWD后是tab鍵縮進
modules:
        $(MAKE) -C $(KERNEL) M=$(PWD) modules
clean:
        rm -f *.o *.ko
# Makefile語法要注意,不能使用空格鍵來控制文本行縮進,必須使用Tab鍵,否則會出現Makefile:5: *** missing separator
# /usr/src/kernels/3.10.0-1160.59.1.el7.x86_64/這里3.10.0....寫死了, 可以這樣 /usr/src/kernels/$(uname -r)/ 
# 但是由於安裝沒有對應的內核的devel所以寫死了.

編譯

 
         

 [root@ht5 src]# make
 make -C /usr/src/kernels/3.10.0-1160.59.1.el7.x86_64/ M=/usr/local/src modules
 make[1]: Entering directory `/usr/src/kernels/3.10.0-1160.59.1.el7.x86_64'
 CC [M] /usr/local/src/mydriver.o
 Building modules, stage 2.
 MODPOST 1 modules
 CC /usr/local/src/mydriver.mod.o
 LD [M] /usr/local/src/mydriver.ko
 make[1]: Leaving directory `/usr/src/kernels/3.10.0-1160.59.1.el7.x86_64'

[root@ht5 src]# ll
total 101360
-rw-r--r-- 1 root root      297 Mar 28 20:49 mydriver.c
-rw-r--r-- 1 root root   101472 Mar 28 20:59 mydriver.ko
-rw-r--r-- 1 root root      907 Mar 28 20:59 mydriver.mod.c
-rw-r--r-- 1 root root    58864 Mar 28 20:59 mydriver.mod.o
-rw-r--r-- 1 root root    45728 Mar 28 20:59 mydriver.o
-rw-r--r-- 1 root root       17 Mar 28 20:37 mydriver.s-rw-r--r-- 1 root root      170 Mar 28 21:00 Makefile
-rw-r--r-- 1 root root       31 Mar 28 21:00 modules.order
-rw-r--r-- 1 root root        0 Mar 28 20:59 Module.symvers

 

七、加載.ko 文件

1、加載驅動模塊mydriver.ko

1)方法一 一旦生成mydriver.ko驅動模塊文件,進入所在的目錄,然后直接 
 [root@ht5 src]#insmod mydriver.ko
2)方法二 將mydriver.ko文件拷貝到可加載驅動所在目錄下  /lib/modules/3.10.0-693.el7.x86_64/

    注意本機:
    [root@ht5 src]# uname -r
    3.10.0-1160.42.2.el7.x86_64
    

[root@ht5 src]# depmod 
 //depmod 會在/lib/modules/3.10.0-693.el7.x86_64/目錄下生成modules.dep和modules.dep.bb文件
[root@ht5 src]# modprobe -r mydriver  //注意這里無需輸入.ko后綴
 注:兩種方法的區別 modprobe和insmod類似,都是用來動態加載驅動模塊的,區別在於modprobe可以解決load module時的依賴關系,
 它是通過/lib/modules/#uname -r/modules.dep(.bb)文件來查找依賴關系的;而insmod不能解決依賴問題。也就是說,如果你確定你要加載的驅動模塊不依賴其他驅動模塊的話,
 既可以insmod也可以modprobe,當然insmod可以在任何目錄下執行,更方便一些。而如果你要加載的驅動模塊還依賴其他ko驅動模塊的話,就只能將模塊拷貝到上述的特定目錄,
 depmod后再modprobe。 2、查看已加載的驅動模塊列表和模塊信息
[root@ht5 src]# lsmod | grep mydriver
mydriver                  12496  0 

 [root@ht5 src]# modinfo mydriver.ko
 filename: /usr/local/src/mydriver.ko
 version: 1.0
 description: mydriver
 author: jinzs
 license: GPL
 retpoline: Y
 rhelversion: 7.9
 srcversion: FCA9B81CB0D8E3B092F2759
 depends:
 vermagic: 3.10.0-1160.59.1.el7.x86_64 SMP mod_unload modversions

 loading out-of-tree module taints kernel問題

[root@ht5 src]# dmesg | grep mydriver
[3334186.411879] mydriver: loading out-of-tree module taints kernel.
[3334186.411922] mydriver: module verification failed: signature and/or required key missing - tainting kernel

確認是否簽名是否被加載
[root@ht5 src]# modinfo -F signer mydriver.ko //執行后無提示

  [root@ht5 src]# cd /lib/modules/3.10.0-327.el7.x86_64/kernel/drivers/
  [root@ht5 drivers]# ls
  acpi bcma char dma gpu i2c iommu media misc ntb platform ptp staging uio vhost xen
  ata block cpufreq edac hid idle isdn memstick mmc parport power rtc target usb video
  auxdisplay bluetooth crypto firewire hv infiniband leds message mtd pci powercap scsi thermal uwb virtio
  base cdrom dca firmware hwmon input md mfd net pcmcia pps ssb tty vfio watchdog
  [root@ht5 drivers]# cd net/
  [root@ht5 net]# ls
  bonding ethernet ieee802154 macvlan.ko mdio.ko netconsole.ko ntb_netdev.ko ppp team usb virtio_net.ko vxlan.ko wireless
  dummy.ko hyperv ifb.ko macvtap.ko mii.ko nlmon.ko phy slip tun.ko veth.ko vmxnet3 wan xen-netfront.ko
  [root@ht5 net]# modinfo -F signer ifb.ko
  CentOS Linux kernel signing key

  [root@ht5 net]# modinfo -F signer tun.ko
  CentOS Linux kernel signing key

  [root@ht5 net]# modinfo tun | grep '^sig'
  signer: CentOS Linux kernel signing key
  sig_key: 28:FD:E6:60:84:9F:DF:48:DE:A9:1B:48:B8:0B:17:B5:6C:E1:51:98
  sig_hashalgo: sha256

 [root@ht5 net]# hexdump -C tun.ko | tail
 0000bea0 5a da 53 36 67 22 a1 fd 16 ab d1 7c c6 84 e4 8b |Z.S6g".....|....|
 0000beb0 45 03 6a 10 dc b3 37 6b 52 18 ea 7b 27 06 0b b2 |E.j...7kR..{'...|
 0000bec0 59 a6 86 53 4e 20 72 b2 b0 95 aa 3f 2d e4 28 fc |Y..SN r....?-.(.|
 0000bed0 92 18 a3 cf c2 58 40 75 7d 76 f9 65 d1 8c ac dd |.....X@u}v.e....|
 0000bee0 ec a1 83 0c 8f 62 ef 4f 30 4d 3d ef db 3b 4a 5e |.....b.O0M=..;J^|
 0000bef0 08 9f 18 b9 82 77 3f dc 4c 92 aa 59 c6 01 04 01 |.....w?.L..Y....|
 0000bf00 1f 14 00 00 00 00 00 01 82 7e 4d 6f 64 75 6c 65 |.........~Module|
 0000bf10 20 73 69 67 6e 61 74 75 72 65 20 61 70 70 65 6e | signature appen|
 0000bf20 64 65 64 7e 0a |ded~.|
 0000bf25

  使用insmod命令加載編寫的驅動模塊,在用demesg出現信息:loading out-of-tree module taints kernel。
  模塊還是能夠被加載。並且卸載后再次加載時,該提示信息沒有再次出現。關於taint資料很多,查查就知道了 

  部分內核被污染的原因:
  加載非GPL兼容的內核模塊 
  驅動程序的使用,它們是內核源代碼的一部分,但尚未經過全面測試
  使用內核源代碼未包含的樹外模塊
  強制加載不是為當前內核版本構建的模塊
  某些嚴重錯誤,例如machine check exceptions(MCE)和kernel oopses

  參考 
  https://unix.stackexchange.com/questions/118116/what-is-a-tainted-linux-kernel

  https://wiki.gentoo.org/wiki/Signed_kernel_module_support#Manually_signing_modules


3、卸載驅動模塊
[root@ht5 src]#  rmmod mydriver 
 //注:"module_name"是lsmod顯示的模塊名稱,而不是對應的ko文件名

 本例子中命令行下執行命令:rmmod mydriver.ko即可。
 查看cat /var/log/messages.
 可以看到下面這樣的信息:“Aug 6 13:40:36 localhost kernel: Goodbye, cruel world”,說明模塊卸載成功。

 4. 查看模塊信息

[root@ht5 src]# nm mydriver.ko 
0000000000000020 T cleanup_module
                 U __fentry__
0000000000000020 t mydriver_exit
0000000000000000 t mydriver_init
0000000000000000 T init_module
000000000000004b r __module_depends
                 U printk
0000000000000000 D __this_module
0000000000000000 r __UNIQUE_ID_license8
000000000000000c r __UNIQUE_ID_retpoline11
0000000000000018 r __UNIQUE_ID_rhelversion10
0000000000000028 r __UNIQUE_ID_srcversion9
0000000000000054 r __UNIQUE_ID_vermagic8
0000000000000000 r ____versions

 

八 查看內核內置模塊(它不以文件形式存在,不在驅動列表下)

[root@ht5 src]# cat /lib/modules/$(uname -r)/modules.builtin
kernel/arch/x86/crypto/aes-x86_64.ko
kernel/arch/x86/crypto/sha1-ssse3.ko
kernel/arch/x86/crypto/sha256-ssse3.ko
kernel/arch/x86/events/intel/intel-rapl-perf.ko
kernel/arch/x86/events/intel/intel-uncore.ko
kernel/arch/x86/kernel/msr.ko
kernel/arch/x86/kernel/cpuid.ko
kernel/mm/zpool.ko
kernel/mm/zbud.ko
kernel/mm/zsmalloc.ko
kernel/fs/binfmt_script.ko
kernel/fs/autofs4/autofs4.ko
kernel/fs/configfs/configfs.ko
kernel/fs/efivarfs/efivarfs.ko
kernel/fs/exportfs/exportfs.ko
kernel/fs/nls/nls_base.ko
kernel/fs/nls/nls_cp437.ko
kernel/fs/nls/nls_ascii.ko
kernel/fs/quota/quota_v2.ko
kernel/fs/quota/quota_tree.ko
kernel/security/keys/trusted.ko
kernel/security/keys/encrypted-keys/encrypted-keys.ko
kernel/crypto/crypto.ko
kernel/crypto/crypto_wq.ko
kernel/crypto/crypto_algapi.ko
kernel/crypto/aead.ko
kernel/crypto/crypto_blkcipher.ko
kernel/crypto/chainiv.ko
kernel/crypto/eseqiv.ko
kernel/crypto/seqiv.ko
kernel/crypto/crypto_hash.ko
kernel/crypto/pcompress.ko
kernel/crypto/akcipher.ko
kernel/crypto/kpp.ko
kernel/crypto/acompress.ko
kernel/crypto/scompress.ko
kernel/crypto/cryptomgr.ko
kernel/crypto/hmac.ko
kernel/crypto/md5.ko
kernel/crypto/sha1_generic.ko
kernel/crypto/sha256_generic.ko
kernel/crypto/ecb.ko
kernel/crypto/cbc.ko
kernel/crypto/ctr.ko
kernel/crypto/aes_generic.ko
kernel/crypto/crc32c.ko
kernel/crypto/lzo.ko
kernel/crypto/rng.ko
kernel/crypto/af_alg.ko
kernel/crypto/algif_hash.ko
kernel/crypto/algif_skcipher.ko
kernel/crypto/asymmetric_keys/asymmetric_keys.ko
kernel/crypto/asymmetric_keys/public_key.ko
kernel/crypto/asymmetric_keys/rsa.ko
kernel/crypto/asymmetric_keys/x509_key_parser.ko
kernel/crypto/asymmetric_keys/pkcs7_message.ko
kernel/block/deadline-iosched.ko
kernel/block/cfq-iosched.ko
kernel/block/mq-deadline.ko
kernel/block/kyber-iosched.ko
kernel/drivers/acpi/ac.ko
kernel/drivers/acpi/button.ko
kernel/drivers/acpi/fan.ko
kernel/drivers/acpi/processor.ko
kernel/drivers/acpi/thermal.ko
kernel/drivers/acpi/battery.ko
kernel/drivers/acpi/hed.ko
kernel/drivers/base/firmware_class.ko
kernel/drivers/char/raw.ko
kernel/drivers/char/nvram.ko
kernel/drivers/char/crash.ko
kernel/drivers/char/agp/agpgart.ko
kernel/drivers/char/agp/amd64-agp.ko
kernel/drivers/char/agp/intel-agp.ko
kernel/drivers/char/agp/intel-gtt.ko
kernel/drivers/char/agp/sis-agp.ko
kernel/drivers/char/agp/via-agp.ko
kernel/drivers/char/hw_random/rng-core.ko
kernel/drivers/char/tpm/tpm.ko
kernel/drivers/char/tpm/tpm_tis_core.ko
kernel/drivers/char/tpm/tpm_tis.ko
kernel/drivers/connector/cn.ko
kernel/drivers/cpufreq/cpufreq_performance.ko
kernel/drivers/cpufreq/cpufreq_powersave.ko
kernel/drivers/cpufreq/cpufreq_userspace.ko
kernel/drivers/cpufreq/cpufreq_ondemand.ko
kernel/drivers/cpufreq/cpufreq_conservative.ko
kernel/drivers/dax/dax.ko
kernel/drivers/edac/edac_core.ko
kernel/drivers/firmware/dmi-sysfs.ko
kernel/drivers/firmware/qemu_fw_cfg.ko
kernel/drivers/firmware/efi/efivars.ko
kernel/drivers/firmware/efi/efi-pstore.ko
kernel/drivers/hid/hid.ko
kernel/drivers/hid/hid-generic.ko
kernel/drivers/hid/hid-a4tech.ko
kernel/drivers/hid/hid-apple.ko
kernel/drivers/hid/hid-belkin.ko
kernel/drivers/hid/hid-cherry.ko
kernel/drivers/hid/hid-chicony.ko
kernel/drivers/hid/hid-cypress.ko
kernel/drivers/hid/hid-ezkey.ko
kernel/drivers/hid/hid-kensington.ko
kernel/drivers/hid/hid-logitech.ko
kernel/drivers/hid/hid-magicmouse.ko
kernel/drivers/hid/hid-microsoft.ko
kernel/drivers/hid/hid-monterey.ko
kernel/drivers/hid/hid-ntrig.ko
kernel/drivers/hid/hid-plantronics.ko
kernel/drivers/hid/intel-ish-hid/intel-ishtp.ko
kernel/drivers/hid/intel-ish-hid/intel-ish-ipc.ko
kernel/drivers/hid/intel-ish-hid/intel-ishtp-hid.ko
kernel/drivers/hid/usbhid/usbhid.ko
kernel/drivers/hwmon/hwmon.ko
kernel/drivers/i2c/i2c-core.ko
kernel/drivers/iio/industrialio.ko
kernel/drivers/iio/buffer/industrialio-buffer-cb.ko
kernel/drivers/iio/buffer/kfifo_buf.ko
kernel/drivers/input/input-core.ko
kernel/drivers/input/ff-memless.ko
kernel/drivers/input/input-leds.ko
kernel/drivers/input/mousedev.ko
kernel/drivers/input/evdev.ko
kernel/drivers/input/keyboard/atkbd.ko
kernel/drivers/input/mouse/psmouse.ko
kernel/drivers/input/serio/serio.ko
kernel/drivers/input/serio/i8042.ko
kernel/drivers/input/serio/serport.ko
kernel/drivers/input/serio/libps2.ko
kernel/drivers/iommu/iova.ko
kernel/drivers/leds/led-class.ko
kernel/drivers/macintosh/mac_hid.ko
kernel/drivers/md/md-mod.ko
kernel/drivers/mfd/mfd-core.ko
kernel/drivers/mfd/intel-lpss.ko
kernel/drivers/mfd/intel-lpss-pci.ko
kernel/drivers/mfd/intel-lpss-acpi.ko
kernel/drivers/net/phy/libphy.ko
kernel/drivers/net/phy/realtek.ko
kernel/drivers/net/phy/fixed_phy.ko
kernel/drivers/nvmem/nvmem_core.ko
kernel/drivers/pci/pci-stub.ko
kernel/drivers/pcmcia/pcmcia_core.ko
kernel/drivers/pcmcia/pcmcia_rsrc.ko
kernel/drivers/platform/x86/pvpanic.ko
kernel/drivers/rtc/rtc-cmos.ko
kernel/drivers/scsi/scsi_mod.ko
kernel/drivers/scsi/device_handler/scsi_dh.ko
kernel/drivers/scsi/device_handler/scsi_dh_rdac.ko
kernel/drivers/scsi/device_handler/scsi_dh_hp_sw.ko
kernel/drivers/scsi/device_handler/scsi_dh_emc.ko
kernel/drivers/scsi/device_handler/scsi_dh_alua.ko
kernel/drivers/thermal/thermal_sys.ko
kernel/drivers/thunderbolt/thunderbolt.ko
kernel/drivers/tty/serial/serial_core.ko
kernel/drivers/tty/serial/kgdboc.ko
kernel/drivers/tty/serial/8250/8250.ko
kernel/drivers/tty/serial/8250/8250_pci.ko
kernel/drivers/tty/serial/8250/8250_dw.ko
kernel/drivers/usb/common/usb-common.ko
kernel/drivers/usb/core/usbcore.ko
kernel/drivers/usb/host/ehci-hcd.ko
kernel/drivers/usb/host/ehci-pci.ko
kernel/drivers/usb/host/ohci-hcd.ko
kernel/drivers/usb/host/ohci-pci.ko
kernel/drivers/usb/host/uhci-hcd.ko
kernel/drivers/usb/host/xhci-hcd.ko
kernel/drivers/usb/host/xhci-pci.ko
kernel/drivers/usb/mon/usbmon.ko
kernel/drivers/usb/serial/usbserial.ko
kernel/drivers/usb/typec/typec.ko
kernel/drivers/usb/typec/altmodes/typec_displayport.ko
kernel/drivers/usb/typec/ucsi/typec_ucsi.ko
kernel/drivers/usb/typec/ucsi/ucsi_acpi.ko
kernel/drivers/video/fb.ko
kernel/drivers/video/cfbfillrect.ko
kernel/drivers/video/cfbcopyarea.ko
kernel/drivers/video/cfbimgblt.ko
kernel/drivers/video/backlight/backlight.ko
kernel/drivers/video/console/fbcon.ko
kernel/drivers/video/console/bitblit.ko
kernel/drivers/video/console/font.ko
kernel/drivers/video/console/softcursor.ko
kernel/drivers/video/console/tileblit.ko
kernel/drivers/video/console/fbcon_rotate.ko
kernel/drivers/video/console/fbcon_cw.ko
kernel/drivers/video/console/fbcon_ud.ko
kernel/drivers/video/console/fbcon_ccw.ko
kernel/drivers/xen/xenbus/xenbus_probe_frontend.ko
kernel/arch/x86/pci/vmd.ko
kernel/arch/x86/video/fbdev.ko
kernel/net/core/drop_monitor.ko
kernel/net/core/netprio_cgroup.ko
kernel/net/ipv4/inet_lro.ko
kernel/net/ipv4/tcp_cubic.ko
kernel/net/ipv6/ipv6.ko
kernel/net/ipv6/inet6_hashtables.ko
kernel/net/mpls/mpls_gso.ko
kernel/net/netfilter/x_tables.ko
kernel/net/netfilter/xt_tcpudp.ko
kernel/net/packet/af_packet.ko
kernel/net/sched/cls_cgroup.ko
kernel/net/unix/unix.ko
kernel/net/xfrm/xfrm_algo.ko
kernel/net/xfrm/xfrm_user.ko
kernel/lib/test-kstrtox.ko
kernel/lib/bitrev.ko
kernel/lib/crc16.ko
kernel/lib/crc32.ko
kernel/lib/digsig.ko
kernel/lib/asn1_decoder.ko
kernel/lib/oid_registry.ko
kernel/lib/ucs2_string.ko
kernel/lib/lzo/lzo_compress.ko
kernel/lib/lzo/lzo_decompress.ko
kernel/lib/mpi/mpi.ko
kernel/lib/xz/xz_dec.ko
kernel/lib/zlib_deflate/zlib_deflate.ko
kernel/lib/zlib_inflate/zlib_inflate.ko
可加載驅動所在目錄

 

在 /sys/module目錄下,你可以找到內核模塊(包含內置和可加載的)命名的子目錄
進入每個模塊目錄,這里有個“parameters”目錄,列出了這個模塊所有的參數。

[root@ht5 src]# cd  /sys/module 
[root@ht5 module]# ls
8250               cryptd                        hid              ipt_REJECT  nf_conntrack            ppdev               suspend       vmw_vsock_vmci_transport
ablk_helper        debug_core                    hid_apple        ip_tunnel   nf_conntrack_ipv4       printk              syscopyarea   vmxnet3
acpi               dm_log                        hid_magicmouse   ipv6        nf_conntrack_ipv6       processor           sysfillrect   vsock
acpiphp            dm_mirror                     hid_ntrig        ip_vs       nf_conntrack_netlink    psmouse             sysimgblt     vt
aesni_intel        dm_mod                        i2c_piix4        joydev      nf_defrag_ipv4          pstore              sysrq         watchdog
ata_generic        dm_region_hash                i8042            kdb_main    nf_defrag_ipv6          rcupdate            tcp_cubic     workqueue
ata_piix           drm                           intel_idle       kernel      nf_nat                  rcutree             thermal       xfs
battery            drm_kms_helper                intel_ishtp      keyboard    nf_nat_ipv4             rng_core            tpm           xhci_hcd
block              drm_panel_orientation_quirks  iosf_mbi         kgdboc      nf_nat_ipv6             sb_edac             tpm_tis       xt_addrtype
bridge             dynamic_debug                 ip6table_nat     kgdbts      nf_nat_masquerade_ipv4  scsi_dh_alua        tpm_tis_core  xt_comment
br_netfilter       edac_core                     ip6_tables       libata      nf_reject_ipv4          scsi_dh_rdac        ttm           xt_conntrack
cdrom              efi_pstore                    ipip             libcrc32c   overlay                 scsi_mod            tunnel4       xt_mark
configfs           efivars                       ip_set           llc         parport                 scsi_transport_sas  uhci_hcd      xt_multiport
coretemp           ehci_hcd                      ip_set_hash_ip   lrw         parport_pc              sd_mod              usbcore       xt_nat
cpuidle            fb_sys_fops                   ip_set_hash_net  md_mod      pata_acpi               serio_raw           usbhid        xt_recent
crc32c_intel       firmware_class                iptable_filter   module      pcie_aspm               sg                  uv_nmi        xt_set
crc32_pclmul       gf128mul                      iptable_mangle   mousedev    pciehp                  shpchp              veth          xt_statistic
crc_t10dif         ghash_clmulni_intel           iptable_nat      mptbase     pci_hotplug             spurious            vmd           xz_dec
crct10dif_common   glue_helper                   iptable_raw      mptsas      pci_slot                sr_mod              vmw_balloon   zswap
crct10dif_generic  haltpoll                      ip_tables        mptscsih    pcmcia_core             stp                 vmwgfx
crct10dif_pclmul   mydriver                         ipt_MASQUERADE   netpoll     pcspkr                  sunrpc              vmw_vmci

 

小結這里有幾個目錄

/usr/src/kernels/3.10.0-1160.59.1.el7.x86_64/    開發的內核頭文件所在目錄
/lib/modules/3.10.0-327.el7.x86_64/kernel/drivers/  動態加載驅動所在目錄
/sys/module  動態和內置驅動所在目錄
順便可以看看深入網卡這篇 https://www.cnblogs.com/aozhejin/p/16057226.html

 

 參考

 http://kojipkgs.fedoraproject.org/packages/kernel/2.6.26.6/49.fc8/src/kernel-2.6.26.6-49.fc8.src.rpm

http://ftp.osuosl.org/pub/elrepo/kernel/el7/x86_64/RPMS/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM