首页 > 代码库 > 专题5-内核模块开发2内核模块设计与编写

专题5-内核模块开发2内核模块设计与编写

1、范例

touch helloworld.c

chmod 777 -R helloworld.c

#include<linux/init.h>

#include<linux/module.h>

static int hello_init(void)

{

  printk(KERN_WARNING"hello,world!\n");

  return 0;

}

static void hello_exit(void)

{

  printk(KERN_INFO"Goodbye,world!\n");

}

module_init(hello_init);//insmod+文件名.ko(入口)

module_exit(hello_exit);//rmmod+文件名(出口)

 

内核模块包括:

1、头文件

#include<linux/init.h>

#include<linux/module.h>

2、加载函数:

module_init

3、卸载函数:

module_exit

 

编写makefile文件:touch Makefile

chmod 777 -R Makefile

1)格式相对固定,先使用obj-m(用来指明内核模块最终产生的名字)

a、当只有一个源文件时:obj-m:helloworld.o

b、当有多个.c源文件时:obj-m:hello.o

                                 hello-objs:file1.o file2.o file3.o .....

这里的hello.o是随意取的名字,但是要和hello-objs相对应

2)KDIR变量保存的是开发板运行的内核代码路径,KDIR名字自己取,如:

/opt/FriendlyARM/mini6410/linux/linux-2.6.38

3)目标   

          all:

        make -C $(KDIR)  M=$(PWD) modules CROSS_COMPILE=arm-linux- ARCH=arm

          clean:

      rm -f *.o *.ko *.order *.symvers

-C:指进入到某目录。

M=$(PWD):M为内核模块代码的路径,PWD为当前路径

下面将helloworld.ko放入NFS目录下去,启动开发板,安装insmod helloworld.ko,卸载rmmod helloworld,会出错,没有目录2.6.30.4-Embedsky,当我们去卸载模块时,必须在lib/modules下面有和我们内核版本相同的目录,建一个mkdir -p  /lib/modules/$(uname -r)。

技术分享

 

专题5-内核模块开发2内核模块设计与编写