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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了专题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内核模块设计与编写的主要内容,如果未能解决你的问题,请参考以下文章

专题5-内核模块开发3-内核模块可选项

i.MX6ULL驱动开发 | 01-Linux内核模块的编写与使用

i.MX6ULL驱动开发 | 01-Linux内核模块的编写与使用

Linux内核配置编译以及模块开发

Linux内核配置编译以及模块开发

《linux内核设计与分析》内核模块编程