Re: 2.6驱动编译,给gcc 增加选项参数问题? - China Linux Foru...

来源:百度文库 编辑:神马文学网 时间:2024/07/05 19:07:10
2.6驱动编译,给gcc 增加选项参数问题?  

目前,我在编译一个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
****************************************************

文章选项:

rockos
(newbie)
07-03-12 18:46
Re: 2.6驱动编译,给gcc 增加选项参数问题? [re: lf_alex]  

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的免费许可不错.

文章选项:

lf_alex
(stranger)
07-03-13 10:31
Re: 2.6驱动编译,给gcc 增加选项参数问题? [re: lf_alex]  

那请问,DEBFLAGS是什么呢?
我要加xscale_be-gcc,还有其参数选项啊,你这个DEBFLAGS能包含我说的这些吗?

文章选项:

rockos
(newbie)
07-03-13 11:42
Re: 2.6驱动编译,给gcc 增加选项参数问题? [re: lf_alex]  

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的免费许可不错.

文章选项:

lf_alex
(stranger)
07-03-14 10:04
Re: 2.6驱动编译,给gcc 增加选项参数问题? [re: lf_alex]  

楼上兄弟,你说的驱动模块的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中具体的选项。
谢谢!