Re: 2.6驱动编译,给gcc 增加选项参数问题? - China Linux Foru...
来源:百度文库 编辑:神马文学网 时间:2024/07/05 19:07:10
![](http://image14.360doc.cn/DownloadImg/2010/08/1922/4727621_1.gif)
目前,我在编译一个2.6上的驱动,能够加载,但是应用跑不起来。现在,我觉得可能是驱动的makefile有问题。
如下,是源码中给的makefile的内容:
*******************************************
ifneq ($(KERNELRELEASE),)
obj-m := vw2010.o
else
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
endif
*******************************************
当然,我把KDIR的值,改成了2.6内核所在的路进,编译能通过,也能成功的加载。但我看了2.4的makefile后,就觉得有些问题。
下面是2.4的makefile内容:
*******************************************
# Makefile for Linux driver
KERNEL = /work/alex/linux
VW_MODULE = vw2010
OBJS = $(VW_MODULE).o
CC = xscale_be-gcc
CFLAGS = -mbig-endian -DVWEB_BIG_ENDIAN -D__KERNEL__ -DHW_SEM -I$(KERNEL)/include -include $(KERNEL)/include/linux/modversions.h -Wall -O -DMODULE -D_BE
.SUFFIXES: .o .c .h
OBJS = $(VW_MODULE).o
all: $(OBJS)
clean:
rm -f $(OBJS) *.o
*************************************************
你可以看到,用的是交叉编译器:xscale_be-gcc,而 xscale_be-gcc还有很多的选项参数:-mbig-endian -DVWEB_BIG_ENDIAN -D__KERNEL__ -DHW_SEM -Wall -O -DMODULE -D_BE。
我的问题是:在2.6下,怎么指定这些信息,因为我不知道加在哪里?
我试过加在2.6的makefile文件里,但是看编译信息没有显示出: xscale_be-gcc 和它的选项参数。
显示部分信息:
****************************************************
make -C /lib/modules/2.6.10_dev-ixdp42x-arm_xscale_be/build SUBDIRS=/work/alex/mv4.0/workdir/gnmb/new/vweb/SDK2/driver_linux modules
make[1]: Entering directory `/work/alex/mv4.0/workdir/linux-2.6.10_dev_ms1'
CC [M] /work/alex/mv4.0/workdir/gnmb/new/vweb/SDK2/driver_linux/vw2010.o
...........................................................
CC /work/alex/mv4.0/workdir/gnmb/new/vweb/SDK2/driver_linux/vw2010.mod.o
LD [M] /work/alex/mv4.0/workdir/gnmb/new/vweb/SDK2/driver_linux/vw2010.ko
make[1]: Leaving directory `/work/alex/mv4.0/workdir/linux-2.6.10_dev_ms1
****************************************************
文章选项:
(newbie)
07-03-12 18:46
![](http://image14.360doc.cn/DownloadImg/2010/08/1922/4727621_3.gif)
![](http://image14.360doc.cn/DownloadImg/2010/08/1922/4727621_1.gif)
CFLAGS += $(DEBFLAGS)
ifneq ($(KERNELRELEASE),)
obj-m := vw2010.o
else
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
endif
在你的Makefile中加上红色那一行就可以了, 上面是相对位置.
--------------------
不喜欢GPL, BSD的免费许可不错.
文章选项:
(stranger)
07-03-13 10:31
![](http://image14.360doc.cn/DownloadImg/2010/08/1922/4727621_3.gif)
![](http://image14.360doc.cn/DownloadImg/2010/08/1922/4727621_1.gif)
那请问,DEBFLAGS是什么呢?
我要加xscale_be-gcc,还有其参数选项啊,你这个DEBFLAGS能包含我说的这些吗?
文章选项:
(newbie)
07-03-13 11:42
![](http://image14.360doc.cn/DownloadImg/2010/08/1922/4727621_3.gif)
![](http://image14.360doc.cn/DownloadImg/2010/08/1922/4727621_1.gif)
DEBFLAGS是你要加的编译选项, 比如-g -O2 -DDEBUG之类的选项或宏定义。
编译器xscale_be-gcc不需要在驱动模块的Makefile中体现,驱动模块的Makefile都会包含内核目录下的Makefile,那里定义了CROSS_COMPILE变量和CC变量。在你的实际环境下,这两个变量的值应当是这样的:
CROSS_COMPILE ?= xscale_be-
CC := $(CROSS_COMPILE)gcc
在xscale_be-的前面可能会有路径名。想知道为什么这样定义?自己读一下make的手册和内核的Makefile文件吧。
--------------------
不喜欢GPL, BSD的免费许可不错.
文章选项:
(stranger)
07-03-14 10:04
![](http://image14.360doc.cn/DownloadImg/2010/08/1922/4727621_4.gif)
楼上兄弟,你说的驱动模块的Makefile都会包含内核目录下的Makefile,那里定义了CROSS_COMPILE变量和CC变量,我很想知道是在什么地方指定?
我看了内核下的Makefile,两个变量如下:
CC = $(CROSS_COMPILE)gcc
CROSS_COMPILE = $(shell if [ -f .hhl_cross_compile ]; then \
cat .hhl_cross_compile; \
fi)
我想应该是在make menuconfig 中选择,是吧?不过,还是希望你给我说下具体的过程,在make menuconfig中具体的选项。
谢谢!