一个HelloWorld的简单内核模块例子
2014-10-14 22:44
441 查看
注:编译驱动的条件:
1、交叉工具链
2、内核源码包(驱动的版本和内核源码的版本一致)
3、源码包需要配置编译过
注:如需要帮助,可以参考内核源码中modules.txt文件(内核源码树/Documentation/kbuild/modules.txt)
编写模块的注意事项:
1.模块运行需要初始化及退出。
2. 实现初始化及退出接口。
例:
3) 添加必要的头文件
4) 添加需要的版权声明
5) 编写Makefile
6) make 编译
7) 下载运行
module_test.c文件:
Makefile文件:
常用命令:
lsmod 检查模块的转载记录
insmod 装载模块
rmmod 卸载模块
注:
卸载模块时
出现内核模块管理警告:
rmmod: chdir(2.6.35.7): No such file or directory ---> 内核默认的模块存放目录 --->
解决方法:
创建对应内核版本的模块目录 -----> mkdir /lib/modules/2.6.35.7
注:
1.查看模块的信息
$ modinfo hello.ko
filename: hello.ko
license: GPL
description: the test of module
author: drm@GEC
depends:
vermagic: 2.6.35.7 preempt mod_unload ARMv7
2.安装
# insmod *.ko
3.卸载
#rmmod *
4.查看已经安装的模块
#lsmod
1、交叉工具链
2、内核源码包(驱动的版本和内核源码的版本一致)
3、源码包需要配置编译过
注:如需要帮助,可以参考内核源码中modules.txt文件(内核源码树/Documentation/kbuild/modules.txt)
编写模块的注意事项:
1.模块运行需要初始化及退出。
module_init(test_init); module_exit(test_exit);
2. 实现初始化及退出接口。
例:
//模块初始化 static int test_init(void) { printk(" hello World!\n "); return 0; } //模块退出 static void test_exit(void) { printk(" good bye!\n "); }
3) 添加必要的头文件
#include <linux/kernel.h> #include <linux/module.h>
4) 添加需要的版权声明
MODULE_LICENSE("GPL");
5) 编写Makefile
KDIR = /home/gec/build_kernel/android-kernel-samsung-dev //指定模块服务的内核的源码目录(该内核需要经过编译) obj-m += module_test.o //指定生成模块文件 all: make -C $(KDIR) M=`pwd` modules //编译规则
6) make 编译
7) 下载运行
module_test.c文件:
#include <linux/kernel.h> #include <linux/module.h>
//模块初始化 static int test_init(void) { printk(" hello World!\n "); return 0; } //模块退出 static void test_exit(void) { printk(" good bye!\n "); }
MODULE_LICENSE("GPL");
module_init(test_init); module_exit(test_exit);
Makefile文件:
KDIR = /home/gec/build_kernel/android-kernel-samsung-dev //指定模块服务的内核的源码目录(该内核需要经过编译) obj-m += module_test.o //指定生成模块文件 all: make -C $(KDIR) M=`pwd` modules // -C表示指定Makefile文件,这里指定为内核源码树顶层Makefile文件 M参数传入当前文件路径
常用命令:
lsmod 检查模块的转载记录
insmod 装载模块
rmmod 卸载模块
注:
卸载模块时
出现内核模块管理警告:
rmmod: chdir(2.6.35.7): No such file or directory ---> 内核默认的模块存放目录 --->
解决方法:
创建对应内核版本的模块目录 -----> mkdir /lib/modules/2.6.35.7
注:
1.查看模块的信息
$ modinfo hello.ko
filename: hello.ko
license: GPL
description: the test of module
author: drm@GEC
depends:
vermagic: 2.6.35.7 preempt mod_unload ARMv7
2.安装
# insmod *.ko
3.卸载
#rmmod *
4.查看已经安装的模块
#lsmod
相关文章推荐
- 【Linux】【Kernel】一个简单的内核模块例子
- Linux:内核模块实现替换系统调用的简单例子
- 写了一个内核模块 实现简单的类似ps命令
- OS实习-编写一个简单的内核模块
- 一个简单的springmvc框架写的 helloworld例子
- python 如何重载模块,用一个简单的例子来解释
- Linux:内核模块实现替换系统调用的简单例子
- 编写、编译、安装、移除一个内核模块的基本过程,不能再简单了的
- 一个Linux内核利用init_task进行进程管理的简单例子
- 编写一个简单的内核模块
- 内核模块编程---helloworld简单入门程序(1)
- 基于CFX WebService做的一个简单的HelloWorld例子
- 一个内核模块例子(实现调用其他模块中的方法,传递参数等)
- 编写一个简单的内核模块程序Hello World!
- 一个Linux内核利用init_task进行进程管理的简单例子
- 最简单的helloworld模块编译加载(linux3.5内核源码树建立)
- 一个简单的内核模块编写到测试的全过程testmodule 之内核版本2.4.20.8
- 一个简单的Eclipse插件开发的例子——HelloWorld【转载】
- CFX WebService做的一个简单的HelloWorld例子 也可与spring 整合 发布在容器里面
- Struts 教程I:一个用jbuilder X 做的最简单的helloworld的struts例子