码迷,mamicode.com
首页 > 系统相关 > 详细

linux 内核模块的编写,插入,显示及卸载

时间:2014-07-01 19:30:08      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:文件   linux   io   file   ui   ubuntu   

环境:ubuntu 8.04

内核版本:2.6.32.59-debug

1、编写文件hello.c

#include <linux/init.h>

#include <linux/kernel.h>  //printk

/*写内核驱动的时候 必须加载这个头文件,作用是动态的将模块加载到内核中去,常用的宏定义如 MODULE_LICESENCE(),MODULE_AUTHOR(),等在此文件中*/

#include <linux/module.h>

 

MODULE_LICENSE("Dual BSD/GPL");  //为必须选择的语句,它是模块的许可权限,如果不声明,会出现警告信息。

 

static int hello_init(void)

{

  printk("Hello, world -- this is the kernel speaking\n");  //printk:与printfde 区别是运行于内核态,且有消息级别机制 

  return 0;

}

 

static void hello_exit(void)

{

  printk("Short is the life of a kernel module\n");

}

 

module_init(hello_init);  //入口点不再是main( )函数,而应该是module_init( 函数名 )函数

module_exit(hello_exit);  //模块的卸载点指定为hello_exit函数指针

 

2、编写Makefile

obj-m:=hello.o

KERNELBUILD := /lib/modules/2.6.32.59-debug  //本Makefile 依赖的linux内核源码路径  ,如是交叉编译时就取开发板上运行的源码路径

all:

  make -C $(KERNELBUILD) M=$(shell pwd) modules //到linux源码所在的目录执行主Makefile 并当前路径传给主Makefile,告诉主Makefile执行完后返回到当前目录,执行Makefile

  echo insmod ./hello.ko to turn it on

 

clean:

  rm -rf *.o *.ko *.mod.c *order *.symvers .tmp_versions

 

3、在hello.c目录下make,于是当前目录出现了 hello.ko

4、insmod hello.ko    

5、dmesg -C查看内核信息(由第四步产生的)

6、lsmod | grep "hello"  命令可以看到hello内核模块,如果第四步正确的话

7、rmmod hello    //删除内核模块hello.ko

8、dmesg -C查看内核信息(由第七步产生)。

linux 内核模块的编写,插入,显示及卸载,布布扣,bubuko.com

linux 内核模块的编写,插入,显示及卸载

标签:文件   linux   io   file   ui   ubuntu   

原文地址:http://www.cnblogs.com/lipingLiu/p/3817129.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!