注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

笑遍世界@网易博客

明天还会在路上……

 
 
 

日志

 
 
关于我

Stay hungry, stay foolish. 工作用脑,生活用心! 走过山重水复,必然迎来柳暗花明! 受苦的人没有悲观的权利,远征的人没有流泪的资格。 Live each day as if we should die tomorrow.

网易考拉推荐
 
 

写一个简单的Linux module  

2011-09-15 23:58:34|  分类: 编程技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
在SMEP的测试中需要在kernel态去调用标志有user bit的memory,所以需要写一个简单的module来模拟。了解了一下写一个Linux module的基本方法,下面总结一下。
0. 准备一个linux系统,当让GCC、Make等基本的工具是需要有的。
1. 安装kernel源代码:在Ubuntu上可以用 apt-get install linux-headers-$(uname -r),在RHEL等上可以用yum install kernel-devel来安装。或者去kernel.org下载代码包来解压到/usr/src目录。
2.写一个Makefile:mkdir hello; cd hello; vim Makefile
  一个简单的Makefile文件的示例如下:
obj-m = hello.o
KVERSION = $(shell uname -r)
all:
            make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules
clean:
            make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean
3.写一个简单的module:hello.c 示例如下
#include <linux/module.h>       /* Needed by all modules */
#include <linux/kernel.h>       /* Needed for KERN_INFO */
#include <linux/init.h>         /* Needed for the macros */

MODULE_AUTHOR("Jay, <YYYYYY@XXX.com>");
MODULE_DESCRIPTION("Jay's first module.");
MODULE_LICENSE("GPL");
MODULE_VERSION("Version-0.0.1");

static int __init hello_start(void)
{
    printk(KERN_INFO "Loading hello module...\n");
    printk(KERN_INFO "Hello, Jay.\n");
    return 0;
}

static void __exit hello_end(void)
{
    printk(KERN_INFO "Goodbye, Jay.\n");
}

module_init(hello_start);
module_exit(hello_end);

4. 编译这个module,命令:make。   编译好后,可以看到生成了hello.ko这个module。
5. 安装这个module:insmod hello.ko  (之后可以用lsmod | grep hello来查看是否安装成功)
6. 查看加载module的log:dmesg | tail;  或者 tail /var/log/messages; 可以看到在hello.c中写一些Kernel info。
   dmesg中示例为:
[136161.503081] Loading hello module...
[136161.503083] Hello, Jay.
   /var/log/messages中示例如下:
Sep 15 22:22:03 jay-intel kernel: [136161.503081] Loading hello module...
Sep 15 22:22:03 jay-intel kernel: [136161.503083] Hello, Jay.
7.modinfo hello来查看module的一些信息(在hello.c中写的作者、表述、License、版本等信息),本文示例为:
filename:       hello.ko
version:        V0.0.1
license:        GPL
description:    Jay's first module: hello, Jay.
author:         Jay, <YYYYYY@XXX.com>
srcversion:     2F7FF08C52DC08E92E4EF39
depends:
vermagic:       2.6.32-29-generic SMP mod_unload modversions
8. 卸载module: rmmod hello; 卸载后,可以看到dmesg中有我留下的信息“Goodbye, Jay”。
至此,你已经看到了linux中写一个最简单的module的步骤了。

参考资料:
http://www.cyberciti.biz/tips/compiling-linux-kernel-module.html
http://www.tldp.org/LDP/lkmpg/2.6/html/index.html
  评论这张
 
阅读(808)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017