linux内核模块开发基础
来源:互联网 发布:帝国cms网址导航模板 编辑:程序博客网 时间:2024/05/25 23:59
1. 什么是内核模块
内核模块具有以下两个特点:1. 模块本身并不被编译进内核文件(zImage或bzImage),可以根据需求,在内核运行期间动态的安装或卸载。
2. 为什么需要内核模块
原因:Linux内核的整体结构非常庞大,其包含的组件也非常多,如何使用这些组件呢,方法1:把所有的组件都编译键内核,即:zImage或bzImage,但这样会导致一个问题:占用内存过多。然后内核模块就诞生了,可以不用被编译进内核但是可以动态的添加到正在运行的内核中!
3. 如何使用内核模块
1> 安装模块 insmod filename.ko
2> 卸载模块 rmmod filename
3> 查看模块 lsmod
这里举一个简单的例子:
还是亘古不变的方式helloworld程序(不过这里没有main函数的)
#include <linux/init.h>#include <linux/module.h>static int hello_init(){ printk(KERN_WARNING"Hello world!\n");//前面的宏表示打印的级别 return 0;}static void hello_exit(){ printk(KERN_WARNING"hello exit!\n");}module_init(hello_init);//用宏来指定入口 加载模块时里面的加载函数会被调用module_exit(hello_exit);
三要素: 加载模块 、卸载模块、 头文件
Makefile文件
obj-m := helloworld.oKDIR := /home/kernel/linux-ok6410 //开发板运行的内核的源码的路径,因为模块最后是要在开发板上运行,所以这个模块的编译是要依赖板子上运行的内核源码的,(这里我开发板用的内核源码是这个路径)all:make -C $(KDIR) M=$(PWD) modules CROSS_COMPILE=arm-linux- ARCH=armclean:rm -f *.o *.ko *.order *.symvers这里KDIR是我们内核源码的路径:
然后make 编译模块文件,这可可以看到生成了helloworld.ko文件
结合前面的课程这里可以通过串口终端同步看到(一下可以看到相关命令执行的效果)
内核模块的可选项:
1. 模块申明
2. 模块参数
3. 符号输出
1 0
- linux内核模块开发基础
- 内核模块开发基础
- 内核模块开发基础
- Linux内核模块基础
- Linux内核模块基础
- Linux设备驱动开发基础---Linux内核模块
- Linux内核模块开发
- Linux内核模块开发
- linux内核模块开发
- Linux内核模块开发
- Linux内核模块开发
- Linux-内核模块开发
- linux内核模块开发
- Linux 内核模块开发
- Linux内核模块开发
- Linux内核模块开发
- Linux 驱动开发之内核模块开发 (一)—— 内核模块机制基础
- linux 学习- 编程基础之内核模块开发
- HDU 2032 杨辉三角(DP)
- 如何为Adobe Reader加入自己的书签
- 跨语言情感分析(中/英)
- Android五子连珠
- 51Nod 1202 子序列个数(简单计数dp)
- linux内核模块开发基础
- 放在ViewPager中的Button有左右滑动冲突的奇葩问题
- 169.[LeetCode]Majority Element
- centos7下添加常用YUM源(EPEL/Remi/RPMforge/php/Nginx)
- quick-lua文件加密步骤
- 206.[LeetCode]Reverse Linked List
- OpenCV Error: Assertion failed (size.width>0 && size.height>0) in cv::imshow
- Python challenge
- Java正则表达式的获取功能