|
我使用的是2.6.12的内核,基于ARM9构架的处理器 用uname -a 在嵌入式系统的显示是:
Linux (none) 2.6.12-h1940 #50 Thu Dec 20 17:31:16 CST 2007 armv4tl unknown
交叉编译环境中建立了软浮点的,使用编译器版本是3.4.4 (网上找的) arm-linux-gcc -v:
Reading specs from /usr/local/arm/cross/bin/../lib/gcc/arm-linux/3.4.4/specs
Configured with: /home/zhoum/work/build/arm-linux/s3c2410/oe/tmp/work/gcc-cross-3.4.4-r3/gcc-3.4.4/configure --build=i686-linux --host=i686-linux --target=arm-linux --prefix=/home/zhoum/work/build/arm-linux/s3c2410/oe/tmp/cross --exec_prefix=/home/zhoum/work/build/arm-linux/s3c2410/oe/tmp/cross --bindir=/home/zhoum/work/build/arm-linux/s3c2410/oe/tmp/cross/bin --sbindir=/home/zhoum/work/build/arm-linux/s3c2410/oe/tmp/cross/bin --libexecdir=/home/zhoum/work/build/arm-linux/s3c2410/oe/tmp/cross/libexec --datadir=/home/zhoum/work/build/arm-linux/s3c2410/oe/tmp/cross/share --sysconfdir=/home/zhoum/work/build/arm-linux/s3c2410/oe/tmp/cross/etc --sharedstatedir=/home/zhoum/work/build/arm-linux/s3c2410/oe/tmp/cross/com --localstatedir=/home/zhoum/work/build/arm-linux/s3c2410/oe/tmp/cross/var --libdir=/home/zhoum/work/build/arm-linux/s3c2410/oe/tmp/cross/lib --includedir=/home/zhoum/work/build/arm-linux/s3c2410/oe/tmp/cross/include --oldincludedir=/home/zhoum/work/build/arm-linux/s3c2410/oe/tmp/cross/include --infodir=/home/zhoum/work/build/arm-linux/s3c2410/oe/tmp/cross/share/info --mandir=/home/zhoum/work/build/arm-linux/s3c2410/oe/tmp/cross/share/man --with-gnu-ld --enable-shared --enable-target-optspace --enable-languages=c,c++,f77 --enable-threads=posix --enable-multilib --enable-c99 --enable-long-long --enable-symvers=gnu --enable-libstdcxx-pch --program-prefix=arm-linux- --with-local-prefix=/home/zhoum/work/build/arm-linux/s3c2410/oe/tmp/cross/arm-linux --with-gxx-include-dir=/home/zhoum/work/build/arm-linux/s3c2410/oe/tmp/cross/arm-linux/include/c++ --enable-__cxa_atexit --with-float=soft
Thread model: posix
gcc version 3.4.4
这个编译器在编译应用程序时,经检验,,软浮点可用。
在做一个驱动的过程中,要在驱动中实现double型的浮点四则运算,在编译驱动时过不去,最后链接所有*.o文件时:
.......
LD [M] /nfstest/esoft_arm/esoft.o
Building modules, stage 2.
MODPOST
*** Warning: "__addsf3" [/nfstest/esoft_arm/esoft.ko] undefined!
CC /nfstest/esoft_arm/esoft.mod.o
LD [M] /nfstest/esoft_arm/esoft.ko
......
现在有2个疑问(猜想):
1: 软浮点编译器的浮点替换不能用在驱动编译过程中?????
a)软浮点编译器的-msoft-float只能用在一般的应用程序,处理程序种的浮点替换操作;如arm-linux-gcc test.c -msoft-float
预处理--编译--链接--生成a.out文件。
b)在编译驱动中,编译过程不一样,我使用时调用系统Makefile编译,在写驱动的Makefile时指定PATH就ok了,如:
ifneq ($(KERNELRELEASE),)
esoft-objs := esoftservo.o epositionloop.o emotionplan.o spt.o
obj-m := esoft.o
else
KERNELDIR ?= /usr/local/arm/linux2.6.12
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
在这个驱动编译过程中,要调用许多根目录下的文件如,Module.symvers 等和许多脚本文件
scripts/下的Makefile.build ,Makefile.lib等和scripts\mod\下的modpost 等文件。
不理解驱动*.ko文件的生成过程。
2: 软浮点编译器的浮点替换能用于驱动编译过程中,但要改相应的参数,路径等。
修改编译过程中用到的库文件,如修改scripts/Makefile.modpost 文件 Module.symvers vmlinux 等。
不知道哪些与调用编译器的lib文件有关。
BTW:看资料说,软浮点支持时在编译器的libgcc.a文件中实现的,我看了下大小,支持软浮点的libgcc.a
比不支持的大很多,接近一倍。
不知道到大家都遇到过没,
希望大家多多发表自己的看法,给小弟一点意见!!!
谢谢!!
|
|