首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在linux中内核模块的加载是如何工作的?

在Linux中,内核模块的加载是通过以下步骤进行的:

  1. 内核模块编译:首先,开发人员使用C语言编写内核模块代码,并将其编译为目标文件。编译时需要使用与目标内核版本相匹配的头文件和编译选项。
  2. 模块加载器:Linux内核提供了一个称为模块加载器的机制,用于加载和管理内核模块。模块加载器是一个内核的一部分,负责加载、卸载和管理内核模块。
  3. 模块查找:当需要加载一个内核模块时,模块加载器会在指定的目录中搜索该模块的二进制文件。通常,这些目录包括/lib/modules/<kernel_version>/目录和/lib/modules/<kernel_version>/kernel/目录。
  4. 模块加载:一旦找到了目标模块的二进制文件,模块加载器会将其加载到内核中。加载模块时,模块加载器会执行模块的初始化函数,完成模块的初始化工作。
  5. 模块符号解析:在加载模块时,模块加载器会解析模块中使用的符号(如函数、变量等)。如果模块使用了其他模块中的符号,模块加载器会尝试解析这些符号,并加载相应的模块。
  6. 模块依赖关系:内核模块可能会依赖其他模块的功能。在加载模块时,模块加载器会检查模块的依赖关系,并自动加载所需的依赖模块。
  7. 模块注册:加载完成后,内核会将模块注册到内核的模块列表中,以便其他部分可以使用该模块提供的功能。

总结起来,内核模块的加载过程包括编译、模块查找、模块加载、模块符号解析、模块依赖关系和模块注册等步骤。通过这些步骤,内核模块可以被动态地加载到Linux内核中,扩展内核的功能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Initramfs_正在生成initramfs

    一、initramfs是什么 在2.6版本的linux内核中,都包含一个压缩过的cpio格式的打包文件。当内核启动时,会从这个打包文件中导出文件到内核的rootfs文件系统,然后内核检查rootfs中是否包含有init文件,如果有则执行它,作为PID为1的第一个进程。这个init进程负责启动系统后续的工作,包括定位、挂载“真正的”根文件系统设备(如果有的话)。如果内核没有在rootfs中找到init文件,则内核会按以前版本的方式定位、挂载根分区,然后执行 /sbin/init程序完成系统的后续初始化工作。 这个压缩过的cpio格式的打包文件就是initramfs。编译2.6版本的linux内核时,编译系统总会创建initramfs,然后把它与编译好的内核连接在一起。内核源代码树中的usr目录就是专门用于构建内核中的initramfs的,其中的initramfs_data.cpio.gz文件就是initramfs。缺省情况下,initramfs是空的,X86架构下的文件大小是134个字节。

    02

    【GNU/Linux kernel源码分析】刨根问底,速览,对初学者友好的底层理解,让你对内核不再迷茫

    为什么会写这样一篇“无效水文”,我想是由于我的这样一种强迫症,对于任何的学习,在不理解原理,无法把他与我的已知知识架构产生联系的时候,我会本能地拒绝这种知识,所以由于这种偏执,很多情况下拖慢了自己的进度,因为很多时候无法有效收集到有用的资料,软件实训的时候,老师只会丢给一个配置文件,然后在此基础上做一些修改开发,可以除了可以勉强做一个垃圾出来,没有任何意义。就连再去做一个垃圾的能力都没有。这种情况直到毕业我才感觉无法再继续这样的生活了,于是开始大量学习,阅读专业书籍。这次就想对这些原本困扰我的东西进行一次小的抛砖引玉式的总结,当然也是把别人已经写过的一些文章综合一下,让入门的人对此好奇的人产生初步印象。 总之,人生没有白走的路。五年之前你正在梦想你今天的生活。 还有,当我们在经历冬季的时候,新西兰正被春风吹拂。所以做自己认为对的事情吧。

    03

    KVM手动及自动化安装

    KVM包括很多部件:首先,它是一个Linux内核模块(现在包括在主线中)用于转换处理器到一种新的用户 (guset) 模式。用户模式有自己的ring状态集合,但是特权ring0的指令会陷入到管理器(hypervisor)的代码。由于这是一个新的处理器执行模型,代 码不需要任何的改动。   除了处理器状态转换,这个内核模块同样处理很小一部分低层次的模拟,比如MMU注册(用于管理VM)和一部分PCI模拟的硬件。 在可预见的未来,Qemu团队专注于硬件模拟和可移植性,同时KVM团队专注于内核模块(如果某些部分确实有性能提升的话,KVM会将一小部分模拟代码移 进来)和与剩下的用户空间代码的交互。 kvm-qemu可执行程序像普通Qemu一样:分配RAM,加载代码,不同于重新编译或者调用calling KQemu,它创建了一个线程(这个很重要);这个线程调用KVM内核模块去切换到用户模式,并且去执行VM代码。当遇到一个特权指令,它从新切换会 KVM内核模块,该内核模块在需要的时候,像Qemu线程发信号去处理大部分的硬件仿真。 这个体系结构一个比较巧妙的一个地方就是客户代码被模拟在一个posix线程,这允许你使用通常Linux工具管理。如果你需要一个有2或者4核的虚拟 机,kvm-qemu创建2或者4个线程,每个线程调用KVM内核模块并开始执行。并发性(若果你有足够多的真实核)或者调度(如果你不管)是被通用的 Linux调度器,这个使得KVM代码量十分的小 当一起工作的时候,KVM管理CPU和MEM的访问,QEMU仿真硬件资源(硬盘,声卡,USB,等等)当QEMU单独运行时,QEMU同时模拟CPU和 硬件。

    02
    领券