在虚拟机上成功安装"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平台实现内核态任务做硬浮点运算?