Linux内核驱动模块编写(Hello,World)
来源:互联网 发布:数据库内联外联的区别 编辑:程序博客网 时间:2024/05/16 13:59
我觉得自己的目标很混乱,总是看这个又看那个.虽说这个习惯不好,可是也增加了许多见识.
今天尝试编写内核模块,写了一个hello,world,结果弄了1个小时。
主要参考了网上的人的说明,结果发现尽信书不如无书,很多人说的都不是很仔细,我觉得这对于初学者来说,很不好。
大家贴出来的东西,不仅仅给自己也是给别人,所以有时候一定要严谨,否则很可能误导别人。
首先贴出代码
1// 这两个头文件包含相应宏定义
2#include <linux/init.h>
3#include <linux/module.h>
4// 告知内核,这是free模块
5MODULE_LICENSE("GPL");
6
7// 模块进入函数
8static int __init hello_init(void){
9 printk(KERN_ALERT "Hello World/n");
10 return 0;
11}
12
13// 模块退出函数
14static void __exit hello_exit(void){
15 printk(KERN_ALERT "Hello World exit/n");
16}
17
18// 初始化
19module_init(hello_init);
20// 退出
21module_exit(hello_exit);
22// 作者声明
23MODULE_AUTHOR("Di Zhuang");
24MODULE_DESCRIPTION("A simple Hello World Module");
25MODULE_ALIAS("a simplest module");
那么代码是很简单的,问题出现在编译上,网上很多人说要在编译的内核下编译,这个我不太懂,可能是编译后生成了我们所需要的文件?我是按照linux源代码Documention目录下面kbuild下的modules.txt和网上另一位仁兄的makefile写的,之前我很多人说用gcc -D__KERNEL__ -DMODULE -DLINUX -I{"你的linux源程序目录"} -c -o 这种编译的,结果错误一大堆,上网搜索,结果也没谁说出准确的解决方案,都是说自己解决,可我觉得这可能和不同的环境有关,很可能就是你的环境适合你的解决办法,为什么没人能够说出一种通用的解决办法。上面的办法貌似听说在2。4内核好用,我2.6还没搞明白,估计这东西在2.6上不适合吧。
那么还是采用2.6官方文档和网上成功编译人的方案,那就是写个Makefile,写好编译路径,以及模块编译后放置的路径。insmod貌似总从/lib/modues/目录下加载模块的,至于make工具如何保证我们编译的模块一定能够被正确加载,这个我暂时没研究,以后研究一下。
下面把Makefile文件贴出来
obj-m := {你要编译目标文件的名.o}
else
# modules所在目录
KERNELDIR := /lib/modules/`uname -r`/build
default:
$(MAKE) -C $(KERNELDIR) M=`pwd` modules
endif
对于这段语句,说实话,我能明白,可不太知道为什么要if else 这么写,谁能解答一下?
写好之后,运行make,然后就会发现你当前目录多了很多文件,其中一个就是.ko文件,这个就是我们需要的。
好,现在运行insmod ./你的ko文件
网上很多人会说打出什么打印语句,结果我在控制台什么也没看见,后来才知道,这个需要用dmesg | tail命令来看
好像insmod打印重定向了??????
之后你在运行rmmod ./你的ko文件
OK , 大功告成。
- Linux内核驱动模块编写(Hello,World)
- Linux内核驱动模块编写(Hello,World)
- linux内核hello world模块编写
- 编写 Hello world 模块驱动
- 编写 Hello world 模块驱动
- linux内核驱动模块编程框架---(hello world模块)
- 编写linux驱动--Hello World
- 第一个模块,hello world 驱动编写
- Linux 内核模块编程 Hello World 模块
- 编写入门的linux模块(Hello World)
- linux内核模块开发之Hello world
- Linux 内核模块之hello world
- linux 第一个内核模块Hello World
- linux 第一个内核模块Hello World
- Linux内核模块(hello world)
- linux内核之旅---"hello world"模块
- Hellomod , Linux内核模块的Hello World
- linux下hello world驱动模块
- 工薪族你真的懂什么是创业吗
- 多表连接的三种方式详解 HASH JOIN MERGE JOIN NESTED LOOP
- mini2440 tslib1.4移植
- Oracle Optimizer CBO RBO
- 10大国外IT网站
- Linux内核驱动模块编写(Hello,World)
- 创业者该知道的10件事
- Spring 框架 执行SQL getJdbcTemplate().query update 用法
- Vault Career Guide to Investment Banking, Asia Pacific Edition
- 一些不常用的注解
- mysql load data infile
- Oracle SQL的硬解析和软解析
- 柱状图使用实例--设置柱子上是否显示数值及数值的显示位置
- 等死模式与穿越模式