内核模块4 | 学习笔记

简介: 快速学习内核模块4

开发者学堂课程【物联网开发 - Linux 驱动开发实操演练:内核模块4】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/657/detail/10872


内核模块4


内容介绍:

一、模块的使用

二、使用过程中重要的6个命令和1个选项


一、模块的使用

第一:将内核模块加载到内核中,和内核形成一个整体,来运行。

第二:将内核中的内核模块从内核中卸载出来。

以上两个使用方法,由两个命令来实现。

 

二、使用过程中重要的6个命令和1个选项

1.查看内核模块信息

命令:modinfo 如图:

edu@edu-T:~/work/test

edu@edu-T:-/work/test$ 1s

demo.cdemo.ko demo.mod.c demo.mod.o demo.o

Makefile modules.order Module.symvers edu@edu-T:-/work/tests modinfo

demo.ko

filename: demo.ko

license: GPL

srcversion: CF96C788C51FEFA1CF2C9CD

depends:

vermagic: 3.2.0-29-generic-pae SMP mod_unload modversions 686

edu@edu-T:-/work/tests

image.png

复制下来之后,进行粘贴

image.png

5 obj-m:=demo.o

7 all:

8 make -C $(KERNDIR) M=$(PWD) modules

10 clean:

11 make -C S(KERNDIR) M=(PWD) clean

模块的使用:

查看内核模块信息的命令:

modinfo

$ modinfo demo.ko

demo.ko

Ifilename:

license: GPL

srcversion: CF96C788C51FEFA1CF2C9CD

depends:

vermagic: 3.2.0-29-generic-pae SMP mod_unload modversions 686

对于模块信息,三要素有文件名,遵循的GPL申明协议,版本说明和依赖。上图中,demo 无依赖,因此 depends 为空。

还可能会有作者申明和功能描述,这俩者可以省略不写。但是模块三要素,是必须写明。

模块的使用:

查看内核模块信息的命令:

modinfoI

Smodinfo demo.ko

filename: demo.ko

license: GPL

srcversion: CF96C788C51FEFA1CF2C9CD

depends:

vermagic: 3.2.0-29-generic-pae SMP mod_unload modversions 686

作者:

描述:

将内核模块加载到内核中,和内核形成一个整体,运行。

将内核中的内核模块,从内核中卸载出来。

2、查看当前内核中已经插入的动态模块

命令:lsmod 里面包括模块名,大小,和被使用的个数

图片1.png

3、将编写的内核模块加载到内核中的命令:insmod

insmod(8) insmod(8)

NANE

insmod -pimple program to insert a module into the Linux Kernel 无

SYNOPSIS

insmod [filename] [module options ...]

DESCRIPTION

insmod is a trivial program to insert a module into the kernel:if the filename is a hyphen, the module is taken from standard input. Most users will want to use modprobe(8) instead, which is more clever and can handle module dependen- cies.

Only the most general of error messages are reported:as the work of trying to link the module is now done inside the kernel, the dmesg usually gives more information about errors.

COPYRIGBT

This manual page originally Copyright 2002, Rusty Russell, IBM Corporation. Maintained by Jon Masters and others. SEE ALSO

modprobe(8),Tmmod(8),1smod(8) modinfo(8)

insmod(8)

将内核模块插入到内核里面,格式为 insmod+文件名。

edueedu-T:-/work/tests1s

demo.c demo.ko demo.mod.c demo.mod.o demo.o Makefile

modules.order Module.symvers

edu@edu-T:-/work/tests insmoddemo.ko

insmod:error inserting'demo.ko':-1 Operation notpermitted

edu@edu-T:-/work/tests

image.png

如上图,发现系统报错,无权限执行。因为如果需要将内核模块插入到内核里面,和内核形成一个整体,此操作需要管理员权限。

如需执行此操作,则需要临时赋予管理员权限:

u@edu-1.-work/cest

edu@edu-T:-/work/tests1s

demo.c demo.ko demo.mod.c demo.mod.o demo.o Makefile

modules.order Module.symvers

edu@edu-T:-/work/tests insmoddemo.ko

insmod:errorinserting 'demo.ko':-1 Operation not permitted

edu@edu-T:-/work/tests sudo insmod demo.ko

image.png

4、查看内核的日志信息的命令:dmesg

image.png

l./woIk/teat

5.291606] [drm] Multimon.

5.291608] [drm] Pitchlock.

5.291609] [drm] Irq mask.

5.291610] [drm] Display Topology.

GMR.

5.2916121 【drm]

5.291613][drm]MaxGMR ids is 64

5.291615] [drm] MaxGMR descriptors is 4096

5.291616][drm]VRAM at Oxf0000000 size is 32768 KiB

5.291618][drm]

5.2916211 amm0size is 2048 kiB

5.291792] global init.

[TTM] Zone kernel:Available graphics memory:420394 kiB.

5.291797】 [TTM]Zone[highmem:Available graphics memory:2060782 kiB.

5.291800] [TTM]Initializing pool allocator.

5.292083] [drm] width 640

5.292110][drm] height 480

5.292125] [drm】 bpp 32

5.295310] [drm] Fifo max0x00200000 min Ox00001000 cap Ox0000007f

5.295581】 [drm] Not using screen objects, missing cap SCREEN OBJECT_2

5.295603】 [drm]Supports vblank timestamp caching Rev 1 (10.10.2010).

5.295605] [drm]No driver support for vblank timestamp query.

5.295656] [drm] Detected no device 3D availability.

5.295951] fbcon:svgadrmfb (fb0) is primary device

5.296021]Console:switching to colour frame buffer device 100x37

5.296081] [drm] Initialized vmwgfx 2.3.0 20111025 for 0000:00:0f.0 on minor 0

16.085300]eth0:no IPv6 routers present

60.5732331 ---/home/edu/work/test/demo.c---demo init---7---

70.9820491---/home/edu/work/test/demo.c---demo exit---14---

76.0939281---/home/edu/work/test/demo.c---demo init---7---

79.2016391---/home/edu/work/test/demo.c---demo exit---14---

506.067836]---/home/edu/work/test/demo.c---demo init---7---

du@edu-T:-/work/tests

基本使用 19:23

上图,将内核的信息全部打印出来。第七行的 demo.init 已经执行。

5、选项:-c  清楚当前内核信息

执行完成后重新加载发现,仅剩下当前信息:

@edu-T:~/work/test

eduledu-T:-/work/tests 1s

demo.c demo.ko demo.mod.c demo.mod.o demo.o Makefile modules.orderModule.symvers

eduledu-T:-/work/tests sudo insmod demo.ko

edu@edu-T:-/work/tests dmesg

[ 623.0232961 一. /home/edu/work/test/demo.c---demo init---7---

edu@edu-T:-/work/tests

image.png

6、将内核模块从内核中卸载出来的命令:rmmod

执行完 rmmod 之后,会发现第14行的 demo.exit 已经执行,则说明执行的函数为卸载函数,加载的时候是一个模块的全名,卸载时去掉后缀,卸载的时候会执行入口或加载函数会被调用。

执行卸载的时候会调用卸载函数,如图为卸项:

image.png

S dmesg

623.023296] ---/home/edu/work/test/demo.c---demo

init---7---699.863850] ---/home/edu/work/test/demo.c---demo

exit---14---

特点:

内核模块加载的时候执行加载函数并只会执行一次,在内核模块卸载时执行卸载函数也只执行一次。

相关文章
|
2月前
|
Linux
探索Linux操作系统的内核模块
本文将深入探讨Linux操作系统的核心组成部分——内核模块,揭示其背后的工作机制和实现方式。我们将从内核模块的定义开始,逐步解析其加载、卸载以及与操作系统其他部分的交互过程,最后探讨内核模块在系统性能优化中的关键作用。
|
12月前
|
编译器 Linux 开发者
内核模块(上)
内核模块
72 0
|
12月前
|
存储 编译器 开发者
内核模块(下)
内核模块(下)
135 0
|
Linux KVM 虚拟化
Linux内核模块
在模块A编译好后会生成符号表文件Module.symvers, 里面有函数地址和函数名对应关系,把这个文件拷贝到需要调用的模块B的源代码下,替换模块B的该文件。 然后重新编译B模块.这样就能够让模块B调用模块A的函数,以后加载模块顺序也必须先A后B,卸载相反。
Linux内核模块
|
物联网 Linux 开发者
内核模块2 | 学习笔记
快速学习模块编写2
127 0
内核模块2 | 学习笔记
|
Ubuntu 物联网 编译器
内核模块3 | 学习笔记
快速学习内核模块3
114 0
内核模块3 | 学习笔记
|
Linux
linux内核模块指北
linux内核模块指北
62 0
|
缓存 IDE Linux
16.4 Linux内核(内核模块)的加载
GRUB 加载了内核之后,内核首先会再进行二次系统的自检,而不一定使用 BIOS 检测的硬件信息。这时内核终于开始替代 BIOS 接管 Linux 的启动过程了。
191 0
16.4 Linux内核(内核模块)的加载
|
Linux
16.16 Linux内核模块管理
Linux 的内核会在启动过程中自动检验和加载硬件与文件系统的驱动。一般这些驱动都是用模块的形式加载的,使用模块的形式保存驱动,可以不直接把驱动放入内核,有利于控制内核大小。
118 0
16.16 Linux内核模块管理
|
开发框架 Ubuntu Unix
内核模块-基本概念
内核模块-基本概念
251 0