TI中文支持网
TI专业的中文技术问题搜集分享网站

am437x在内核态使用硬浮点

在虚拟机上成功安装"ti-sdk-am437x-evm-07.01.00.00-Linux-x86-Install.bin"后得到与目标板相匹配的交叉编译工具,在profile添加export,在Makefile里添加参数-mfloat-abi=hard -mfpu=vfp之后make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-,编译报错"-mfloat-abi=soft and -mfloat-abi=hard may not be used together",急需在内核态运行原有的浮点测试程序,请各位大侠不吝赐教!

Steven Liu1:

AM437x的浮点运算由VFP单元来执行,你在编译器中已经制定了soft,又指定了hard,应该是这里冲突了,将-mfloat-abi=hard去掉试试

hao chan:

回复 Steven Liu1:

去掉后可以编译出.ko,但在目标板加载会报错

[18863.463174] hlxdrv: Unknown symbol __aeabi_dadd (err 0)Error: could not insert module hlxdrv.ko: Unknown symbol in moduleError: Module hlxdrv is not currently loaded

我们不想用软浮点库

hao chan:

回复 hao chan:

另外,我们在编译器中一直没有指定过 soft,搞不懂 hard 到底是和哪处的设置冲突了

Yaoming Qin:

请问您是把测试代码插入到kernel中了再进行的编译,编译的是kernel吗?

hao chan:

回复 Yaoming Qin:

测试代码不是插入到kernel中后再编译,而是单独编译了一个module,如果不加浮点运算的话,该module可以在目标板成功执行 insmod x.ko 并运行

Yaoming Qin:

回复 hao chan:

请问为什么贵司的kernel层会有浮点运算? 请您参考下这个链接 https://e2e.ti.com/support/arm/sitara_arm/f/791/t/413724 

hao chan:

回复 Yaoming Qin:

我司的软件架构的确是需要在内核态运行硬浮点运算,目前基于X86平台在linux-2.4和linux-3.2这两个内核版本都成功做到了内核态运行高精度硬浮点运算,linux-3.2内核源码明确指出在内核态任务上下文里可通过成对使用kernel_fpu_begin() 和 kernel_fpu_end()括起浮点运算代码区域来安全的实现内核态硬浮点计算,基于这个版本我们在X86平台已稳定测试了半年多。需要您帮忙指导,如何在AM437x平台实现内核态任务做硬浮点运算?

赞(0)
未经允许不得转载:TI中文支持网 » am437x在内核态使用硬浮点
分享到: 更多 (0)