当前位置: 技术问答>linux和unix
gcc直接编译驱动程序(2.6内核)?
来源: 互联网 发布时间:2016-06-16
本文导语: 驱动程序为什么只能通过makefile来编译? ifneq ($(KERNELRELEASE),) obj-m := hello.o else KERNELDIR ?= /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) modules: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules endif clean: ...
驱动程序为什么只能通过makefile来编译?
ifneq ($(KERNELRELEASE),)
obj-m := hello.o
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
clean:
rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions
差不多都是这个样子。
我想知道如何直接用gcc来编译驱动程序生成.ko文件的命令。
谢谢!
ifneq ($(KERNELRELEASE),)
obj-m := hello.o
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
clean:
rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions
差不多都是这个样子。
我想知道如何直接用gcc来编译驱动程序生成.ko文件的命令。
谢谢!
|
在2.4内核中,直接用gcc可以完成编译为模块。
可是在2.6内核中,gcc是不够的,编译完还是不能加载。
还需要用ld来连接。跟楼上的意思一样。
建议还是用Makefile,因为用Makefile可以保证2.6内核编译中的许多全局设置的一致性。
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules 会从源码顶级目录的Makefile文件中读取很多常量。
然而只用gcc和ld指令则不行。
可是在2.6内核中,gcc是不够的,编译完还是不能加载。
还需要用ld来连接。跟楼上的意思一样。
建议还是用Makefile,因为用Makefile可以保证2.6内核编译中的许多全局设置的一致性。
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules 会从源码顶级目录的Makefile文件中读取很多常量。
然而只用gcc和ld指令则不行。
|
应该把_D__KERNEL__ 改成-D__KERNEL__