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

环境: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 内核模块的编写,插入,显示及卸载,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。