简单linux内核模块的开发
来源:互联网 发布:论坛源码hybss 编辑:程序博客网 时间:2024/05/03 21:30
看了一个月的应用开发,今天开始看简单的驱动。开始看的是韦大神的代码,但是期间出现了几个小问题。
所以回头看国嵌的视频,内核模块开发这一部分。内核模块我自己的理解就是驱动程序注册进内核的过程。
开发环境:Redhat 企业版5。
这次做的实验是编写两个相互关联的模块,分别是hello.c和calculate.c。
hello.c的代码
#include <linux/init.h>#include <linux/module.h>//在hello.c中调用函数实现的具体函数部分。int add_integar(int a,int b){return a+b;}int sub_integar(int a,int b){return a-b;}static int __init sym_init(){return 0;}static void __exit sym_exit(){}//将两个在本程序中的函数导出,这样就可以在hello.c中引用了。//符号导出的宏,这是两个固定的宏。EXPORT_SYMBOL(add_integar);EXPORT_SYMBOL(sub_integar);module_init(sym_init);module_exit(sym_exit);
下面是calculate.c的代码
#include <linux/init.h>#include <linux/module.h>//在hello.c中调用函数实现的具体函数部分。int add_integar(int a,int b){return a+b;}int sub_integar(int a,int b){return a-b;}static int __init sym_init(){return 0;}static void __exit sym_exit(){}//将两个在本程序中的函数导出,这样就可以在hello.c中引用了。//符号导出的宏,这是两个固定的宏。EXPORT_SYMBOL(add_integar);EXPORT_SYMBOL(sub_integar);module_init(sym_init);module_exit(sym_exit);
这两部分代码都可以执行通,但是需要注意的是前者调用后者,所以在insmod的过程中要先insmod前者。
以下是Makefile部分代码。
ifneq ($(KERNELRELEASE),)obj-m := hello.o calculate.oelseKDIR := /lib/modules/2.6.18-92.el5/buildall:make -C $(KDIR) M=$(PWD) modulesclean:rm -f *.ko *.o *.mod.o *.mod.c *.symversendif
在Makefile的第二行,是生成的目标文件。但是这一部分还是没有完全搞懂。
在Makefile的第四行,是编译内核模块的时候需要用到的内核,这个时候要根据不同的内核版本进行修改。
小问题:
1,内核模块版本不匹配。//一定要找到相对应的内核进行编译。
不要投机取巧。
2,内核printk函数的打印参数是用来定义打印级别的。如果没有定义,默认的是警告的级别。
- 简单linux内核模块的开发
- 简单的Linux内核模块示例
- 一个简单的Linux内核模块实现
- 一个简单的Linux内核模块
- 编写一个简单的linux内核模块
- 最简单的linux内核模块实例
- 最简单的linux内核模块
- Linux内核模块开发
- Linux内核模块开发
- linux内核模块开发
- Linux内核模块开发
- Linux内核模块开发
- Linux-内核模块开发
- linux内核模块开发
- Linux 内核模块开发
- Linux内核模块开发
- Linux内核模块开发
- 嵌入式Linux驱动开发(一)一个简单的Linux内核模块框架
- linux kernel -oops
- Asp.NET中的Response、Request和Server对象
- 为什么用Spring来管理Hibernate?
- 如何遍历HashMap
- Cavium octeon 与intel DPDK的一些比较
- 简单linux内核模块的开发
- Oracle 创建同义词 synonym
- springMVC 文件上传
- 指针:const与指针
- android4.0混淆XmlPullParser报错
- openjtag 使用记录
- Hibernate使用Spring进行单元测试时的事务问题
- windows 消息队列
- jquery操作select(取值,设置选中)