I.MX6ULL内核开发0:linux内核模块
创始人
2024-05-28 11:11:48

目录

简要

一、内核模块的概念

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


简要

        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函数实现卸载。

相关内容

热门资讯

苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...