使用gcc编译Linux设备驱动程序模块

时间:2013-03-09 06:25:09

标签: linux gcc linux-device-driver

我有一个基本的linux设备驱动程序模块:

#include <linux/init.h>
#include <linux/module.h>   
#include <linux/kernel.h>

static int __init hello_init(void)
{
printk(KERN_ALERT "Hello, world \n");
return 0;
}

static void __exit hello_exit(void)
{
printk(KERN_ALERT "Goodbye, world \n");
}

module_init(hello_init);
module_exit(hello_exit);

我能够以传统的方式编译这个模块,这是通过使用一个使用obj-m的简单Makefile,但我想用命令行gcc编译它。这是因为我可以使用gcc -save-temps标志来查看中间生成的文件(这可以特别有助于理解Linux内核使用大量预处理器的东西)。

有没有办法使用命令行gcc ??

进行编译

编辑附加我使用的Makefile

ifeq ($(KERNELRELEASE),)
    KERNELDIR ?= /lib/modules/$(shell uname -r)/build
    PWD := $(shell pwd)

EXTRA_CFLAGS+= -save-temps

modules:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules

modules_install:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install

clean:
    rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions

.PHONY: modules modules_install clean

else

    obj-m := hello.o
endif

2 个答案:

答案 0 :(得分:1)

您可以尝试在模块的Makefile中添加“EXTRA_CFLAGS”吗? 例如EXTRA_CFLAGS + = -save-temps

希望对你有所帮助!

答案 1 :(得分:0)

我不知道如何直接在Makefile中,但您可以按文件生成 .i 文件。从Linux内核源的根目录:

make drivers/media/pci/sta2x11/sta2x11_vip.i

这将生成 .i 文件。要生成模块源文件(在内核树之外),只需使用它的绝对路径:

make /path/to/hello.i

应该有效