hello world 级别模块程序
来源:互联网 发布:java的socket编程 编辑:程序博客网 时间:2024/06/08 17:29
只不过它有它的书写规范
下面看一个简单的hello world 级别module 代码。
--------------------------------------------------------------------------------
[root@hjj /home/samba/test]# cat test.c
--------------------------------------------------------------------------------
#include <linux/module.h>
int mod_entry(void)
{
unsigned long d = be64_to_cpu(0x12345678abcdef);
printk("d is 0x%lx\n", d);
return 0;
}
void mod_exit(void)
{
printk("bye bye! module.\n");
}
module_init(mod_entry);
module_exit(mod_exit);
MODULE_AUTHOR("hjjdebug");
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("test only");
格式定义了入口,出口以及其它辅助信息。
下面看看怎样把它编译成module.
--------------------------------------------------------------------------------
[root@hjj /home/samba/test]# cat Makefile
--------------------------------------------------------------------------------
$(warning KERNELRELEASE = $(KERNELRELEASE))
ifneq ($(KERNELRELEASE),)
obj-m := test.o
else
PWD=$(shell pwd)
KVER=$(shell uname -r)
KDIR=/lib/modules/$(KVER)/build
all:
make -C $(KDIR) M=$(PWD)
clean:
rm *.o *.ko modules.* Module.symvers test.mod.c
endif
[root@hjj /home/samba/test]#
makefile 写得如此奇怪,到底是什么意思呢? 下面先看看它的执行过程
--------------------------------------------------------------------------------
[root@hjj /home/samba/test]# make
--------------------------------------------------------------------------------
Makefile:1: KERNELRELEASE =
make -C /lib/modules/3.10.17/build M=/home/samba/test
make[1]: Entering directory `/usr/src/linux-3.10.17'
/home/samba/test/Makefile:1: KERNELRELEASE = 3.10.17
LD /home/samba/test/built-in.o
CC [M] /home/samba/test/test.o
Building modules, stage 2.
/home/samba/test/Makefile:1: KERNELRELEASE = 3.10.17
MODPOST 1 modules
CC /home/samba/test/test.mod.o
LD [M] /home/samba/test/test.ko
make[1]: Leaving directory `/usr/src/linux-3.10.17'
source Makefile, 第一遍KERNELRELEASE 为空,执行all 目标,将进入kernel 目录进行编译,
并指定了M 宏定义。
第2遍source Makefile, KERNELRELEASE 已经赋值,所以它读走了obj-m.
开始编译出test.o. 以上过程叫第一阶段,与普通make差别不大。
编译模块第2阶段。叫module 后处理阶段。由test.mod.c编译出test.mod.o
其中test.mod.c 是第一阶段生成的中间产物。是每一个.o 文件对应的头文件部分。
然后把头.o和体.o 连接成.ko
--------------------------------------------------------------------------------
模块测试,使用
--------------------------------------------------------------------------------
insmod, rmmod, modinfo, modprobe 来安装,卸载,查看模块
dmesg 可以查看模块中printk 信息输出。
~
~
40,4 Bot
- hello world 级别模块程序
- Spring boot (Hello World 级别)
- hello world 模块
- LDD3 hello world 模块
- hello world 内核模块
- hello world 模块编译
- Drupal Hello World模块
- hello world 模块编译
- (二) Hello World模块
- hello world!(驱动模块)
- Linux多文件的内核模块程序Hello World
- 编写一个简单的内核模块程序Hello World!
- 一个Hello World程序
- hello world程序
- QT Hello World 程序
- hello world程序
- ABAP程序Hello World
- Win32 Hello World程序
- git rebase小计
- 压缩图片
- 这才是婚姻
- Apache DataFu: LinkedIn开源的Pig UDF库
- Git简介
- hello world 级别模块程序
- 使用github上的开源框架SlidingMenu环境的搭建,以及getSupportActionBar方法不能找到的问题
- POJ1742 coins
- java和bat相互调用
- 据说这是改进版顺序链表
- IIR与FIR基础知识
- jQ confirm确认对话框
- oracle 常用sql
- 使用语音输入法时,当文字没有加载出来,清空文本框时系统崩溃