ARM平台的内核模块编写与安装

最近在学习arm平台下的内核模块开发,现将内核模块建立过程记录一下。  

  从编写代码的角度来看,创建一个简单的的内核模块可以分3步走:

   1. 添加头文件(linux/init.h 和linux/module.h); 

2. 加载内核(函数module_init);

     3. 卸载内核(函数module_exit)

如一个简单的内核模块如下:

#include <linux/init.h>
#include <linux/module.h>
static int hello_init()
{
    printk(KERN_WARNING"hello my module!\n");
    return 0;
}

static void hello_exit()
{
    printk(KERN_WARNING"module exit!\n");
}

module_init(hello_init);
module_exit(hello_exit);

事实上,关键部分是两个宏 module_init() 和module_exit(),这两个宏分别完成了内核模块安装和内核模块卸载,他们的代码都是内核实现的,用户程序只要调用即可。当然,一个内核模块的组成部分还有其他可选的选项,但是这里的是必须的,也是最简单的一个部分。

  写完代码部分,接着完成Makefile的编写如下:

obj-m := hello.o
KDIR :=/home/win/myfiles/linux-mini2440
all:
   make -C $(KDIR) M=$(PWD) modules CROSS_COMPILE=arm-linux- ARCH=arm
clean:
   rm -f *.o *.ko *.order

这是内核模块只有一个源文件的Makefile,如果源文件有多个,则采用如下版本:

obj-m := modulename.o

modulename-objs := file1.o file2.o file3.o  ......
KDIR :=/home/win/myfiles/linux-mini2440
all:
   make -C $(KDIR) M=$(PWD) modules CROSS_COMPILE=arm-linux- ARCH=arm
clean:
   rm -f *.o *.ko *.order

然后回到代码所在目录执行make 命令,即可产生 .ko 文件。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/efb3be1cb35231a12d0d95baeed79bf4.html