Linux内核驱动模块编写尝试
2024-09-08 13:38:42
课堂笔记
源代码
/*file: hello.c*/ #ifndef _KERNEL_
#define _KERNEL_
#endif
#ifndef MODULE
#define MODULE
#endif #include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h> static hello_init(void); //需要添加额外的函数申明
void hello_exit(void); //_init and _exit is the special macro
static int hello_init(void){ //去掉了函数名前的_init printk("Hello, world!\n");
return 0;
} void hello_exit(void){ //去掉了函数名前的_exit,否则编译无法完成
printk("Good bye, world!\n");
return 0;
} module_init(hello_init);
module_exit(hello_exit); MODULE_LICENSE("GPL"); // 开源协议许可
注:
- printk与printf类似,但是是运行在内核态,打印的日志文件在/var/log/messages
编写Makefile文件并运行
obj-m += hello.o all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
注:
必须用该操作编译,否则会出现找不到asm/linkage.h的错误
如果/lib/modules/3.10.0-514.26.2.el7.x86_64目录下的build文件为红色,则执行以下操作
rm -f build #删除build文件
ln -s /usr/src/kernels/3.10.0-1160.11.1.el7.x86_64/ ./build #新建build文件并建立软链接
make构建的文件
尝试添加和移除模块
insmod hello.ko
rmmod hello.ko
如果执行成功,可以在/var/log/messages下查看是否有对应的日志打印
注:
- printk与printf类似,但是是运行在内核态,打印的日志文件在/var/log/messages
编写Makefile文件并运行
obj-m += hello.o all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
注:
必须用该操作编译,否则会出现找不到asm/linkage.h的错误
如果/lib/modules/3.10.0-514.26.2.el7.x86_64目录下的build文件为红色,则执行以下操作
rm -f build #删除build文件
ln -s /usr/src/kernels/3.10.0-1160.11.1.el7.x86_64/ ./build #新建build文件并建立软链接
make构建的文件
尝试添加和移除模块
insmod hello.ko
rmmod hello.ko
如果执行成功,可以在/var/log/messages下查看是否有对应的日志打印
最新文章
- Codeforces Round #267 Div2 C George and Job --DP
- [Elixir009]像GenServer一样用behaviour来规范接口
- 基础笔记(二)HTTP协议
- eclipse 好用的插件安装地址集合【持续更新】
- Light OJ 1033 - Generating Palindromes(区间DP)
- 生成getter()、setter()方法去掉变量前缀
- IKAnalyzer使用停用词词典进行分词
- Linux前台的程序转到后台执行(关闭终端而不杀死命令)
- BZOJ 1036: [ZJOI2008]树的统计Count( 树链剖分 )
- leetcode[60] Rotate List
- KVM 虚拟化基本搭建
- Animals and Puzzle
- Animation-list,帧动画+属性动画,做出Flash般的效果
- 可重复执行的SQL Script
- jquery左右折叠框
- XMPP协议之消息回执解决方案
- 网络学习day04_VLSM、子网划分
- plugin-barcodescanner 报错
- centos7系统分区方案
- 微信小程序初体验与DEMO分享