必要なアプリケーションに64ビットの完全なサポートを提供できるように、32ビットシステムで32ビットカーネルを64ビットカーネルに置き換えようとします(必要なライブラリがあるか静的にリンクがある場合)。ただし、他のすべての場合は、32ビットのユーザースペースを予約します。問題は、多くの32ビットユーザースペースアプリケーションがuname -m
報告したいi686
ので、何でも実行する前にこれを行う必要があることsetarch i386
ですinit
。
私はそれをinit=/sbin/myinit
カーネルに渡すのと同じことができると思いました。それはmyinit
次のとおりです。
#!/bin/sh
exec setarch i386 /sbin/init
しかし、基本的な性質をカーネル自体にエンコードする方法があったらと思います。これを行うための既存のカーネルオプションはありますか?
答え1
私が知る限り、そのようなカーネルオプションはありません。必要に応じて、カーネルのソースコードを直接調べて関連項目を検索できset_personality
ますcurrent->personality
。ご希望のロゴはですPER_LINUX32
。
カーネルにパッチを適用することに加えて、initをオーバーライドする解決策はおそらく最も簡単な解決策です。これは本当に驚くべきことではありません。 initramfsの使用と非常に似ています。すでにinitramfsを使用している場合は、initramfsを挿入できますsetarch
。