3311|0

78

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

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

我使用的是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
        比不支持的大很多,接近一倍。
       
        不知道到大家都遇到过没,
        希望大家多多发表自己的看法,给小弟一点意见!!!
        谢谢!!
点赞 关注

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表