免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3938 | 回复: 0
打印 上一主题 下一主题

软浮点编译器与 编译驱动 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-02-19 12:45 |只看该作者 |倒序浏览
5可用积分
我使用的是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
        比不支持的大很多,接近一倍。
       
        不知道到大家都遇到过没,
        希望大家多多发表自己的看法,给小弟一点意见!!!
        谢谢!!

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP