我正在研究ARM64 linux内核中对32位用户空间的支持,启用CONFIG_COMPAT似乎可以让我做到这一点。
有人能插话启用CONFIG_COMPAT是否会禁用64位应用程序的运行吗?我提出这个问题的原因如下:
- 文档中没有说明两个64/32位应用程序都可以使用同一内核运行
-
我看了一下fs/compat_binfmt_elf.c
#ifdef COMPAT_SET_PERSONALITY #undef SET_PERSONALITY #define SET_PERSONALITY COMPAT_SET_PERSONALITY #endif
这似乎迫使线程个性到
set_thread_flag(TIF_32BIT)
-
当调用kernel/linux-3.14/fs/binfmt_elf.c中的load_elf_binary()时,会调用SET_PERSONALITY(loc->elf_ex);
-
启用CONFIG_COMPAT时,所有用户空间应用程序都被强制标记为32-BIT,这是无效的吗?
感谢
请注意,compat_binfmt_elf.c在最后包含binfmt_elf.c-它在对全局可见符号进行定义和设置一些重命名后,将binfmt_elf.c代码重新编译到一个额外的对象文件中。
因此,它强制所有在compat层下运行的应用程序以32位运行,而所有本机运行的应用软件以64位运行。