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



我正在研究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-BIT,这是无效的吗?

感谢

请注意,compat_binfmt_elf.c在最后包含binfmt_elf.c-它在对全局可见符号进行定义和设置一些重命名后,将binfmt_elf.c代码重新编译到一个额外的对象文件中。

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

相关内容

  • 没有找到相关文章

最新更新