最近需要开发一些内核模块,进行探究linux内核的一些特征,现在把一些遇到的比较好的文章和知识点,进行简要记录和备忘;

内核模块开发相关链接:

内核模块开发过程遇到的知识点:

  • make命令,会隐士调用cc -c 命令,生成.o文件;所以在内核模块的makefile中,可以直接写上:  obj-m += hello_mod.o
  • 内核模块可以进行传参:insmod module.ko [param1=value param2=value ...]
  • 内核模块只能访问内核导出的函数和变量;EXPORT_SYMBOL(my_variable);
  • 想要熟悉内核模块编程,写一个linux设备驱动程序是比较好的学习方法;
  • 在进行开发linux内核模块的时候,最好下载对应版本的linux内核代码,使用source insight或者vscode工具进行打开进行参考;因为经常内核中的API会改变;你参考别人的针对其他版本开发的代码,编译不通过;
  • 内核模块和内核公用一个地址空间,可以使用所有模块导出的符号表;我们可以使用内存拷贝函数,把用户空间中的一些代码段,拷贝到内核态来完成。

最简单的内核模块编译示例:

//必要的头文件
#include <linux/module.h> // included for all kernel modules
#include <linux/kernel.h> // include for KERN_INFO
#include <linux/init.h> // include for __init and __exit macros
//模块许可证声明(必须)
MODULE_LICENSE("Dual BSD/GPL"); // 通常使用BSD 和 GPL 双协议
//声明模块的作者(可选)
MODULE_AUTHOR("Yaowen Xu");
MODULE_AUTHOR("YaoXu");
MODULE_DESCRIPTION("This is a simple example!");
MODULE_ALIAS("A simplest example");
//模块加载函数(必须)
static int hello_init(void)
{
printk(KERN_ALERT "Hello World enter/n");
return ;
}
//模块卸载函数(必须)
static void hello_exit(void)
{
printk(KERN_ALERT "Hello World exit/n");
}
//模块的注册
module_init(hello_init);
module_exit(hello_exit);

hello_mod.c

obj-m += hello_mod.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

Makefile

编译前需要安装必要编译工具和所需要的文件:

apt-get install build-essential linux-headers-$(uname -r)

保持更新,转载请注明出处;更多内容请关注cnblogs.com/xuyaowen; 如果对您有帮助,请点击推荐~!

最新文章

  1. 二叉树建立,遍历和二叉排序树的判断【c++】
  2. Putty颜色设置
  3. sruts2 自定义类型转换器
  4. POJ 1947 Rebuilding Roads 树形DP
  5. Linux基础: 挂载镜像文件(Mount &amp; ISO)
  6. Linux网络编程3&mdash;&mdash;socket
  7. Android_Intent_note
  8. iOS把一个简单的图形变成一个圆
  9. War文件部署(转)
  10. 表单与JQuery
  11. echarts_部分图表配置_堆叠折线图
  12. React-Native(三):React Native是基于React设计的
  13. 编译Xposed
  14. 磁盘IO的性能指标 阻塞与非阻塞、同步与异步 I/O模型
  15. WebService客户端(以命令方式创建)
  16. 【vue】vue +element 搭建项目,el-input 常用的验证
  17. 微信小程序里解决app.js onLaunch事件与小程序页面的onLoad加载前后异常问题
  18. Qt: QAction在QToolBar中快捷键行为注意事项
  19. 《“胡”说IC——菜鸟工程师完美进阶》
  20. Go语言之进阶篇连接mysql

热门文章

  1. C#异常处理总结
  2. 优雅写Java之三(IO与文本解析)
  3. JS-02-js的变量
  4. http---&gt;http缓存机制系统梳理
  5. Dubbo如何支持本地调用?injvm方式解析
  6. Spring整合Spring-data-jpa项目所遇到的坑
  7. 请注意安全!你的mongodb已经被黑了!互联网安全生产大过天!
  8. python+selenium爬取百度文库不能下载的word文档
  9. 修改 VS2013 项目属性的默认包含路径(全局)
  10. 解决Apple Mobile Device USB Driver