在arm64 linux中混合使用64/32位用户空间(使用CONFIG_COMPAT)

时间:2015-02-05 01:29:16

标签: c linux arm64

我正在研究ARM64 linux内核中的32位用户空间支持,看起来启用CONFIG_COMPAT会让我这样做。

是否有人能够了解启用CONFIG_COMPAT是否会禁用64位应用程序的运行?我问这个原因有以下几点:

  1. 文档未声明两个64/32位应用程序可以使用相同的内核运行
  2. 我看了一下fs / compat_binfmt_elf.c

    #ifdef   COMPAT_SET_PERSONALITY
    #undef   SET_PERSONALITY
    #define  SET_PERSONALITY      COMPAT_SET_PERSONALITY
    #endif
    

    这似乎迫使线程人格

    set_thread_flag(TIF_32BIT)    
    
  3. 当调用kernel / linux-3.14 / fs / binfmt_elf.c中的load_elf_binary()时,会调用SET_PERSONALITY(loc-> elf_ex);

  4. 如果效果不佳,启用CONFIG_COMPAT时,所有用户空间应用程序都被强制标记为32位?

  5. 由于

1 个答案:

答案 0 :(得分:1)

请注意,compat_binfmt_elf.c最后包含binfmt_elf.c - 在将juggled定义并为全局可见符号设置一些重命名后,它会将binfmt_elf.c代码重新编译为另一个目标文件。

因此它强制在compat层下运行的所有应用程序以32位运行,并且所有本机运行的应用程序以64位运行。