64ビットマシンで32ビットカーネルをコンパイルする


23

32ビットのシングルコアIntel Atomマシン用にカーネルをコンパイルしようとしています。言うまでもなく、コンパイルには膨大な時間がかかります。それは2時間続いていて、まだドライバーモジュールの半分に過ぎません。

メインデスクトップでカーネルをコンパイルするのに15分しかかかりませんが、64ビットマシンです。より良いマシンから32ビットカーネルパッケージを生成するためにクロスコンパイルできますか?


仮想マシンで実行できますが、速度が遅くなります
Tachyons

1
ええ、私はデュアルブートできますが、現在の環境を離れることなく他のプラットフォーム用にコンパイルすることは可能だと確信しています。
オリ

それは興味深い+1編集
タキオン

回答:


27

カーネルはクロスコンパイルできますが、最も簡単な方法は32ビット(i386)chrootを作成してそこにビルドすることです。

インストールubuntu-dev-tools

$ sudo apt-get install ubuntu-dev-tools

i386 chrootを作成します。

$ mk-sbuild --arch=i386 precise

(おそらく2回実行する必要があります。最初にインストールschrootなどを行い、セットアップしますmk-sbuild

次に、chrootを入力します。

$ schroot -c precise-i386

通常どおり、カーネルをビルドします。


11
chrootでのビルドは、Ubuntuカーネルチームの開発者が使用する方法とまったく同じ方法です。
コリンイアンキング

これらは、かなり派手なツールです。明日、試してみます。ありがとう。
オリ

「通常どおり」を展開してください。通常help.ubuntu.com/community/Kernel/Compileの指示に従いますが、chroot内では動作しません-ビルドは「致命的なエラー:linux / compiler.h:そのようなファイルまたはディレクトリがありません」で終了します
Alistair Buxton

chrootsでホームフォルダーをマウントするのはいい追加のようです:wiki.ubuntu.com/SimpleSbuild#Mount_your_home_dir
int_ua

5

Afaik、gccでは、-m32フラグを設定してLinuxソースを32ビット実行可能ファイルにコンパイルできます。Makefileについての知識はあまりありませんが、微調整できます。

編集: 私はここにstackoverflowから質問を追加たかったのですが、そこではcflagsを設定するように言われています:

export CFLAGS=-m32

また、Torvaldsのgithubアカウントのlinuxリポジトリから、環境変数を設定することでターゲットアーキテクチャを設定できることを示すため、メインmakefileの次のセクションが役立つことがわかりました。コメントを読んでください。現在、これらの行はこのファイルの 174〜196です。

# Cross compiling and selecting different set of gcc/bin-utils
# ---------------------------------------------------------------------------
#
# When performing cross compilation for other architectures ARCH shall be set
# to the target architecture. (See arch/* for the possibilities).
# ARCH can be set during invocation of make:
# make ARCH=ia64
# Another way is to have ARCH set in the environment.
# The default ARCH is the host where make is executed.

# CROSS_COMPILE specify the prefix used for all executables used
# during compilation. Only gcc and related bin-utils executables
# are prefixed with $(CROSS_COMPILE).
# CROSS_COMPILE can be set on the command line
# make CROSS_COMPILE=ia64-linux-
# Alternatively CROSS_COMPILE can be set in the environment.
# A third alternative is to store a setting in .config so that plain
# "make" in the configured kernel build directory always uses that.
# Default value for CROSS_COMPILE is not to prefix executables
# Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile
export KBUILD_BUILDHOST := $(SUBARCH)
ARCH        ?= $(SUBARCH)
CROSS_COMPILE   ?= $(CONFIG_CROSS_COMPILE:"%"=%)

# ...
# There are more architecture related stuff beyond this line
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.