当前位置: 首页 > news >正文

I.MX6ULL内核开发0:linux内核模块

目录

简要

一、内核模块的概念

二、内核模块加载、卸载过程


简要

        1、内核模块的概念

        2、内核模块的原理:内核模块在内核的加载、卸载过程。

一、内核模块的概念

内核,是一个操作系统的核心。是基于硬件的第一层软件扩充,提供操作系统的最基本的功能,是操作系统工作的基础,决定着整个操作系统的稳定性。

内核按照体系架构分为两类:微内核(Micto Kernel)宏内核(Monolithic Kernel)

微内核:只提供操作系统系统核心功能,如实现进程管理、存储器管理、进程间通信、I/O设备管理等,而其他的应用层IPC、文件系统功能、设备驱动模块则不被包含到内核功能中,属于微内核之外的模块,所以针对这些模块的修改不会影响到微内核的核心功能。微内核具有动态可扩展性强的有点。Windows操作系统、华为的鸿蒙操作系统就是属于这列微内核架构。

宏内核:即微内核和应用层之外的应用层IPC、文件系统功能、设备驱动模块都编译成一个整体。优点是执行效率高,缺点是修改内核某个功能需要重新编译内核,耗时长。linux系统正是采用了宏内核结构,为了解决这一缺点,liunx引入了内核模块这一机制。

内核模块具有以下特点:

  • 模块本身不被编译入内核映像,这控制了内核的大小
  • 模块一旦被加载,它和内核中的其他部分一样。

二、内核模块加载、卸载过程

ko文件在数据形式上是ELF(Excutable And Linking Format)格式,是一种普通的可重定位目标文件。这类文件包含了代码和数据,可以被用来链接成可执行文件或共享目标文件。

内核模块的的加载过程:

首先insmod会通过文件系统将.ko模块读到用户空间的一块内存中,然后执行系统调用sys_init_module()解析模组,这时,内核在vmalloc区分配与ko大小相同的内存暂存ko文件,暂存之后解析ko文件,将文件中的各个section分配到init段和core段,在module区为init段和core段分配内存,并把对应的section copy到modules区最终的运行地址,经过relocate函数地址等操作后,就可以执行ko的init操作了,这样一个ko的加载流程就结束了。同时init段会被释放掉,仅留下core段来运行。

内核模块的卸载过程:

输入指令rmmod,最终在系统内核中调用sys_delete_module进行实现。具体:先从用户空间传入需要卸载的模块名字,根据名称找到要卸载的模块指针,确保要卸载的模块没有被其它模块依赖,然后找到模块本身的exit函数实现卸载。

http://www.lryc.cn/news/26832.html

相关文章:

  • qsort快速排序的实现以及模拟实现qsort的功能(狠狠的拿捏)
  • [Java·算法·中等]LeetCode215. 数组中的第K个最大元素
  • xgboost:算法数学原理
  • map、multimap、unordered_map
  • 2023年全国最新会计专业技术资格精选真题及答案11
  • Centos7搭建NFS
  • ThreadLoca基本使用以及与synchronized的区别
  • 【C++】纯虚函数、纯虚析构
  • Python 进阶小技巧:7招展开嵌套列表
  • 【Spring6】| Bean的作用域
  • Qt界面美化之自定义qss样式表
  • 春招进行时:“211文科硕士吐槽工资5500” HR:行情和能力决定价值
  • 【DaVinci Developer专题】-45-自动生成SWC中所有Runnable对应的C文件
  • redis启动和关闭服务脚本
  • windows CMD快捷键:
  • 【C/C++语言】刷题|双指针|数组|单链表
  • Leetcode.1487 保证文件名唯一
  • python-星号(*)-双星号(**)-函数动态参数匹配-解包操作
  • 面试官:为什么说ArrayList线程不安全?
  • STP详解
  • linux AWK常用命令 —— 筑梦之路
  • SpringCloud:服务拆分及远程调用
  • 网络应用之javascript函数定义和调用
  • 使用VNC远程连接Ubuntu - 内网穿透实现公网远程办公
  • JavaScript Date 日期对象
  • 婴幼儿常见八大疾病及护理方法
  • UVa 817 According to Bartjens 数字表达式 DFS ID 迭代加深搜 逆波兰表达式
  • c++基础/类和对象
  • 2023年中国人工智能产业趋势报告
  • STM32定时器的配置,解析预分频系数和重装载值与时钟频率的关系