网站首页 > 教程文章 正文
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文件:
- 上一篇: 使用makefile编译文件,命令是什么
- 下一篇: 源码安装包管理(源码包软件安装步骤)
猜你喜欢
- 2025-07-06 一个可以用来练手的C++开源编译器!
- 2025-07-06 Linux开发工具使用指南(linux软件开发工具)
- 2025-07-06 Linux下Makefile文件的模式规则和自动化变量
- 2025-07-06 程序员的副业秘籍!一款可以快速搭建各类系统的后台管理系统
- 2025-07-06 postgresql自定义函数实现,通过contrib模块进行扩展
- 2025-07-06 Linux GCC编译及Makefile使用(gcc makefile编写)
- 2025-07-06 wordpress独立站上线两周没收录?原来是robots.txt搞的鬼…
- 2025-07-06 make sure用法解析(make sure sth)
- 2025-07-06 每天一个 Python 库:Django全能Web框架,一站式后台开发
- 2025-07-06 Makefile实践(makefile经典教程)
- 最近发表
-
- 一个可以用来练手的C++开源编译器!
- Linux开发工具使用指南(linux软件开发工具)
- Linux下Makefile文件的模式规则和自动化变量
- 程序员的副业秘籍!一款可以快速搭建各类系统的后台管理系统
- postgresql自定义函数实现,通过contrib模块进行扩展
- Linux GCC编译及Makefile使用(gcc makefile编写)
- wordpress独立站上线两周没收录?原来是robots.txt搞的鬼…
- make sure用法解析(make sure sth)
- 每天一个 Python 库:Django全能Web框架,一站式后台开发
- Makefile实践(makefile经典教程)
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- mybatis plus page (35)
- vue @scroll (38)
- 堆栈区别 (33)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)
- redis aof rdb 区别 (33)
- 302跳转 (33)
- http method (35)
- js array splice (33)