Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1308975
  • 博文数量: 213
  • 博客积分: 7590
  • 博客等级: 少将
  • 技术积分: 2185
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-31 17:31
个人简介

热爱开源,热爱linux

文章分类

全部博文(213)

文章存档

2018年(4)

2017年(1)

2015年(1)

2014年(5)

2013年(2)

2012年(2)

2011年(21)

2010年(82)

2009年(72)

2008年(23)

分类: LINUX

2010-03-10 20:58:31

下面是一个简单的模块编程实例:


#include <linux/kernel.h> /* 内核关键头文件*/

#include <linux/module.h> /* 模块头文件*/
#include <linux/init.h> /* 初始化头文件*/
#include <linux/proc_fs.h> /* 建立proc文件必加头文件*/
int add(int i,int j)
{
    return (i+j);   
}
void fun()
{
    printk("This is in fun() function\n");
}
static int __init hello_init(void)
{  

    fun();
    printk(KERN_INFO"<1>Hello modules\n");

    printk(KERN_INFO"<2>5+6=%d",add(5,6));
    return;
}

static void __exit hello_exit(void)
{
    printk("Leaving the kernel!Byebye\n");
}
MODULE_LICENSE("BSD/GPL");
/* 模块的发布声明*/


module_init(hello_init);
/* 注册模块新增功能*/
module_exit(hello_exit);
/* 注销模块新增功能*/

MODULE_AUTHOR(cjf);


说明:
1.文件名是:hello.c
2.中包含了对模块的 结构定义及版本控制,任何模块的编写都要包含这个头文件,程序运行过程如下:
首先,编写一个Makefile文件,里面的内容如下:

obj-m += hello.o
all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean


1模块编译
1.1编译:make
2.查看模块信息:    modinfo hello.ko
2模块运行
2.1加载模块
1.加载:sudo insmod hello.ko
2.确认加载:lsmod | head -n 10
3.查看日志信息    dmesg | tail -n 2
2.2卸载模块
1.卸载:sudo rmmod hello
2.确认卸载:lsmod | head -n 10
3.查看日志信息:dmesg | tail -n 2

阅读(822) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~