如何设置内核的默认个性?

如何设置内核的默认个性?

我正在尝试在 32 位系统上用 64 位内核替换 32 位内核,这样我就可以为需要它的应用程序提供对 64 位的完整支持(前提是它们具有必要的库或静态地链接),但为所有其他人保留 32 位用户空间。问题是许多 32 位用户空间应用程序都希望uname -m报告i686,因此我需要setarch i386在运行任何内容之前执行此操作,最好是在init.

我想我可以做一些类似传递init=/sbin/myinit给内核的事情,其中myinit​​有这样的事情:

#!/bin/sh
exec setarch i386 /sbin/init

但我希望有一种方法将默认个性编码到内核本身中。是否有任何现有的内核选项可以做到这一点?

答案1

据我所知,没有这样的内核选项。如果需要,您可以自己查看内核源代码;要搜索的相关内容是set_personalitycurrent->personality。您想要的标志是PER_LINUX32.

除了修补内核之外,覆盖 init 的解决方案可能是最简单的一种。这其实并不奇怪。它与使用 initramfs 非常相似。如果您已经在使用 initramfs,则可以将其放入setarch其中。

相关内容