Linux内核模块

1. 在讲内核模块之前什么是宏内核和微内核

        目前来说,操作系统内核通常主要分为两种类型:宏内核或者称为单内核(Monolithic kernel)以及微内核(Micro kernel)。

  • 宏内核:将内存管理、进程管理、进程间通信、虚拟文件系统以及网络接口都包含在内核中。这样的优点是内核承担大部分服务,各服务之间由于都处于内核中,可直接通信,通信效率高;缺点是内核体积大,可扩展性弱,容错性差,如果需要扩展内核就必须重新编译、烧录内核本来体积就大,就算是裁剪版的arm开发板内核也要编译将近半个小时,总是要编译烧录,内心@# %^% #@$🤬😤 。
  • 微内核:内核仅保留精简版的进程间通信、进程管理以及内存管理,其他模块独立于内核之外。这样做的优点是内核体积小,可扩展性强,容错性强;缺点是独立于内核外的模块使用内核服务时需要借助开放的接口,效率低。
图1-1 宏内核以及微内核构成示意图[1]

[1] 图源Linux内核分析与应用

2. 为什么需要内核模块

        Linux内核是由Linux社区维护的都是大佬,虽不能说没有bug不存在的🤷‍♂️ ,但是至少没有大bug,并且Linux具有稳定版。所以说内核中大部分的不需要更新的因为这些都不是你写的💔,但是内核中有一个部分通常都需要开发者自行设计,并且需要经常性的更新还不是因为bug多!,那就是 驱动部分(Device Driver)。不仅仅是在产品的更新驱动上,在驱动的设计中也需要不断地安装卸载调试驱动,为了增强驱动程序的灵活性,Linux加入了内核模块的机制,所谓的内核模块就是开发一些接口,使得在无需重新编译内核的情况下,可以使驱动代码加入到内核中,动态的更新内核的功能。

3. 浅谈内核模块设计

        内核模块的设计其实主要就是对驱动程序的设计。主要包含三样比较重要的文件/工具:

  • 驱动程序:规定了驱动程序实现的功能以及开放给应用程序的接口。
  • 内核源码:不是说不用重新编译内核源码吗?为什么还需要呢?对于运行Linux的arm板而言我一直默认讲的就是这种吧🤪,arm板上的资源是十分有限的,我们通常采用 PC上编译程序,将生成的程序再移到arm板调试中。这就带来一个问题,PC上无法获得arm板中内核的详细信息,那么就需要在PC上有一份内核源码供编译器参考。内核源码在这里的作用其实是提供环境参数。
  • 内核模块相关命令:我们都知道,内核是高度敏感区,动不得动不得,那要是迫不得已动内核呢?那就只能按照内核的规矩来,内核的规矩就是内核提供的一系列的接口命令。
命令名称命令介绍
insmod用于内核模块的安装(调用驱动程序入口函数 __init )
rmmod用于内核模块的卸载(调用驱动程序出口函数 __exit )
lsmod用于查看已加载到内核中的内核模块
modinfo用于查看内核模块的相关信息(author、Lisence等)
depmod分析内核模块的依赖关系
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值