在64位计算机上编译32位内核


23

我正在尝试为32位单核Intel Atom计算机编译内核。不用说,编译会花费大量时间。它已经进行了2个小时,但仍仅在驱动程序模块中途完成。

在我的主桌面上编译内核仅需15分钟,但这是一台64位计算机。我可以交叉编译以从更好的计算机生成32位内核软件包吗?


虚拟机可以做到,但速度会更慢
Tachyons 2012年

1
是的,我可以进行双重引导,但是我敢肯定,可以在不离开当前环境的情况下为其他平台进行编译。
奥利(Oli)

有趣的+1版
Tachyons,2012年

Answers:


27

尽管可以交叉编译内核,但最简单的方法是创建32位(i386)chroot并在其中构建它。

安装ubuntu-dev-tools

$ sudo apt-get install ubuntu-dev-tools

创建一个i386 chroot:

$ mk-sbuild --arch=i386 precise

(您可能必须运行两次。第一次安装schroot等,然后进行设置mk-sbuild

然后输入chroot:

$ schroot -c precise-i386

像通常那样构建内核。


11
在chroot中进行构建正是Ubuntu内核团队的开发人员所首选的方法。
科林·伊恩·金

这些是一些非常漂亮的工具。我明天试试看。谢谢。
奥利(Oli)

请在“像往常一样”上展开。我通常会按照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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.