我正在编写一个内核模块,它将作为我中文Arduino的驱动程序。
我已经阅读了许多有关它的指南,并且其中的Makefile是完全不同的。其中一些只是无法正常工作。我想了解如何以及为什么:)
例如,我有一个简单的初学者代码:
#define MODULE
#define __KERNEL__
#include <module.h> // определения для модуля
#include <init.h> // module_init и module_exit
#include <kernel.h> // printk
MODULE_AUTHOR("...");
MODULE_DESCRIPTION("Test module for linux kernel");
int module_start()
{
printk("This is a test module startup message\n");
return 0;
}
void module_stop()
{
printk("Module is dead\n");
return;
}
module_init(module_start);
module_exit(module_stop);
我也有一个可以在手册中找到的Makefile:
CC=gcc
MODFLAGS:= -O2 -Wall -DLINUX
module.o: module.c
$(CC) $(MODFLAGS) -c module.c
因此,据我所知,我的系统使用.ko文件作为模块。这是第一个问题。第二个问题是该makefile文件不起作用。
当我制作时,出现错误“ missing module.h”。但是我当然安装了标题。他们在/usr/src/linux-headers-(3.2.0-4-686-pae)
和/usr/src/linux-headers-(3.2.0-4-common)
。* pae目录中没有module.h,但它位于* common目录中(大多数文件都在其中)。因此,我既无法使用gcc也无法使用makefile对其进行编译。
谢谢你的回答。
模块构建的“标准Makefile”是:
obj-m := hello-1.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
clean:
rm -rf *.o *.ko *.mod.* *.symvers *.order
(从hello-1.c创建hello-1.ko)
唯一使用的标头是/ lib / modules / uname -r
/ build / include /中的标头。
而且没有“ module.h´”:请输入#include <linux/module.h>
(或asm / module.h)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句