Linux内核模块添加的两种方法
来源:互联网 发布:mac excwl 改变语言 编辑:程序博客网 时间:2024/06/04 21:07
Linux内核模块添加的两种方法
静态加载:
把组件都添加进内核文件中,在目录kongfig文件中增加新代码对应的编译选项,在Makefile文件中添加编译条目。
动态加载:
下载并安装Linux内核模板:
make modules _install ARCH = arm CROSS _COMPILE=arm-linux
编写Makefile。
以hello world为例来实现这两种方法:
静态加载:
(1)hello world.c源代码
#include <linux/init.h>
#include <linux/module.h>
static int hello_init(void)
{
printk(KERN_INFO " Hello World enter\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_INFO " Hello World exit\n ");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
MODULE_LICENSE("Dual BSD/GPL");
MODULE_DESCRIPTION("A simple Hello World Module");
MODULE_ALIAS("a simplest module");
把所有的组件都翻译进内核文件,即生成zImage或bzImage
(1)进入linux-2.6.32.2-mini2440内核
(2)进入/drivers建立Hello文件夹,在Hello文件夹里面建立hello.c,Makefile,Kconfig
Makefiel:obj-y(CONFIG_HELLO_WORD) +=hello.o
Kconfig:config hello_word
tristate "TEST hello word"
help
usually you have to make
(3)在drivers里面的Makefile添加:obj-y(CONFIG_HELLO_WORD) +=Hello/
(4)在drivers里面的Kconfig添加 source"drivers/Hello/Kconfig"
(5)输入make menuconfig进入内核配置界面
(6)然后输入y退出并保存
(7)生成了.config文件为配置的记录
(8)在make bzImage进行编译内核
(9)然后在arch/arm/boot/下生成bzImage
动态加载:直接编译成PC机X86的内核模块
(1)模块加载函数:insmod;模块卸载函数:rmmod;查看模块函数:lsmod
(2)模块可选信息:模块参数、模块导出符号、模块作者等信息声明
(3)在/work里面加入hello.c文件和Makefile文件
Makefile的内容为:
ifneq ($(KERNELRELEASE),)
obj-m :=hello.o ####和要编译的模块的名字一致
else
KDIR:= /lib/modules/3.5.0-17-generic/build
######以便寻找内核源码目录下的Mmakefile
all:
make -C $(KDIR) M=$(PWD)modules
######用KDIR目录下的Makefile来编译当前目录下的模块
clean:
rm -f *.ko *.o *.mod.o *.mod.c.symvers
endif
(4)执行make命令
(5)、然后查看hello文件夹生成hello.ko文件
(6)执行insmod hello.ko进行加载模块:(7)lsmod查看模块查看加载模块输出信息
(8)删除rmmod模块(9)查看删除模块输出信息
(10)这样,就完成了对模块的添加和删除。
总结:
通过对Linux内核模块的添加和删除实验,我学会了关于内核添加和删除的很多相关知识,首先,把组件编译进内核中,如果建立的一个文件夹,需要使建立的文件夹里的Kconfig和Makefile生效,需要在上一级目录里修改Kconfig和Makefile,这样才能使新建立的Kconfig和Makefile生效。其次,在模块动态加载到内核过程中,常常会出现不成功的时候,通过问老师,知道了是版本的问题,使得模块加载不成功。我会在以后的学习过程中,加强这方面的学习,提高这方面的技能,让自己所学得到运用。
- Linux内核模块添加的两种方法
- Linux内核模块动态添加方法
- Linux添加路由的两种方法
- Linux添加路由的两种方法
- Linux添加路由的两种方法
- linux 添加内核模块
- linux内核添加新的模块
- Linux 驱动开发内核模块的添加
- linux内核添加新的模块
- Linux上安装Perl模块的两种方法
- Linux上安装Perl模块的两种方法
- Linux: 添加内核模块步骤
- linux中添加内核模块
- 查看linux内核模块依赖关系的三种方法
- 加载模块到linux内核的方法
- Linux 下面编译内核模块的 方法
- Linux添加库路径的两种方法
- Linux 添加开机启动项的两种方法
- (NO.00003)iOS游戏简单的机器人投射游戏成形记(十四)
- live555
- mybatis返回插入数据的自增长id
- adb的端口被占用问题
- 射频识别技术漫谈(21)——RC系列射频芯片的天线设计
- Linux内核模块添加的两种方法
- 【Oracle】Oracle 12c DB In-Memory入门实验手册(二)
- java 动态代理学习(Proxy,InvocationHandler)
- hadoop2.2伪分布式安装
- C#中Config文件中,特殊符号的书写方法。
- Zookeeper--Zookeeper是什么
- Javacard
- Unity面试题(含答案)
- shell 脚本 学习笔记1