64位内核能支持32位的应用?

64位内核能支持32位的应用?

最近一位同事在调试EVB板时遇到一个很奇怪的问题。
内核:Linux4.4.14
编译器:gcc-linaro-aarch64-linux-gnu-4.9-2014.09_linux
使用cpio生成一个简单的根文件系统,busybox等都运行正常。但以前编译好的一个测试程序无法运行,提示“exec format error”
一开始怀疑是缺少依赖的动态库问题,通过file指令发现

ELF 32-bit LSB  executable, ARM, EABI5 version 1 (SYSV), statically linked, for GNU/Linux 2.6.31, BuildID[sha1]=5fec46f654c65379bd58fdeb35204443ab54e6e6, not stripped

这的确是一个ARM 32位静态链接的应用,应该不依赖动态库。而且sha1值正确,文件没有损坏。该文件在qemu模拟器上也能正常运行。

尝试重新编译该测试程序,但工作量比较大,只能作罢。

偶然通过file指令查看rootfs中的其它可执行程序,发现他们都是64位的。所以怀疑是不是内核不支持运行32位应用程序。

顺着这个思路,果然在内核中找到了是否支持32位应用的选项,将该选项打开,即可。

这里写图片描述

这里写图片描述

这也颠覆了我之前对ARM64软件兼容性的认知,64位内核不是天然能够运行32位应用程序的。

猜你喜欢

转载自blog.csdn.net/sunao2002002/article/details/51917917