"HelloModule.ko"内核模块编程

1. "HelloModule.ko"内核模块编程

1.1 实验目的

· 掌握Linux内核驱动模块的编写、编译和加载过程

· 掌握带参数的内核模块的编写、编译和加载过程

· 掌握基于X86平台和ARM 平台掌握Linux内核模块更加灵活的特性

1.2 实验原理

· 本实验通过编写一个简单的内核模块,实现模块的初始化和卸载函数,并在加载时传入控制参数,用printk能够在后台打印加载和卸载信息。使用Makefile为当前运行的Linux内核编译驱动模块,最后通过insmod命令加载模块运行。

· 内核模块流程图。

SHAPE \* MERGEFORMAT

1.3 步骤与现象

· X86平台不带参数的内核模块

1. 编写hellomodule.c和Makefile文件

编译

执行,第一步无hellomodule 模块

2. 插入hellomodule模块

3. 卸载模块

· 分析代码执行现象

1. 我们在ubuntu图形界面gnome下的控制台不能显示我们的printk输出,printk函数是系统内核调用,在init进程启动后就申请不到控制台,所以调用它就没能在图形界面下的控制台输出,通过查看日志文件。

先查看/var/log/syslog 文件,在加载模块,再查看/var/log/syslog 文件。

2. 卸载模块

3. 分析加载的模块以及模块间的依赖关系

4. lsmod命令实际上读取并分析/proc/modules文件

5. 内核中已加载模块的信息也存在于/sys/module目录下,加载hellomodule.ko后,内核将包含/sys/module/hellomodule目录,查看该目录树。

6. 获取模块的信息,包含模块的作者、模块的说明、模块所支持的参数以及vermagic

· X86平台带参数的内核模块,雷同不带参数的部分就不列出

1. 编译

2. 查看日志文件

3. 带参数加载

· ARM平台不带参数的内核模块, 雷同X86平台就不列出

1. copy x86 平台的hellomodule.c和Makefile文件

2. 修改Makefile

3. 编译,验证

4. Copy到SD卡

5. 开发板SD卡插入,上电,查看运行结果

· ARM平台带参数的内核模块, 雷同X86平台就不列出

1. 源码准备

2. 编译

3. COPY到SD卡

4. 开发板SD卡插入,上电,查看运行结果

1.4 关键代码分析

· X86平台

1. 无参数

C文件

Makefile文件:

2. 有参数

C文件:

Makefile文件:

· ARM平台

1. 无参数

C文件: 雷同x86 平台无参数部分

Makefile文件:

1. 有参数

C文件:雷同x86平台有参数部分

Makefile文件:

原文链接:,转发请注明来源!