Я пытаюсь скомпилировать ядро для 32-битной одноядерной машины Intel Atom. Излишне говорить, что компиляция занимает слишком много времени. Это продолжается в течение 2 часов, и это все еще только на полпути через модули драйвера.
Компиляция ядра на моем главном рабочем столе занимает всего 15 минут, но это 64-битная машина. Могу ли я сделать кросс-компиляцию для генерации 32-битного пакета ядра с лучшей машины?
Хотя ядро можно скомпилировать кросс-компиляцией, самый простой способ - это создать 32-битный (i386) chroot и встроить его туда.
Установить ubuntu-dev-tools
:
$ sudo apt-get install ubuntu-dev-tools
Создать chroot i386:
$ mk-sbuild --arch=i386 precise
(Вам, вероятно, придется запускать его дважды. В первый раз он устанавливает schroot
и т. Д. И настраивает mk-sbuild
)
Затем введите chroot:
$ schroot -c precise-i386
и соберите ядро, как обычно.
Afaik, в gcc вы можете установить -m32
флаг, позволяющий компилировать исходные тексты Linux в 32-битные исполняемые файлы. У меня нет обширных знаний о Makefile, но вы можете их настроить.
edit: Я хотел добавить сюда вопрос из stackoverflow , в котором сказано установить cflags:
export CFLAGS=-m32
И из репозитория linux в Torvalds 'учетной записи github я нашел следующий раздел о основной make-файл, который может оказаться полезным, поскольку он сообщает, что вы можете установить целевую архитектуру, установив переменную среды. Прочтите комментарии, в настоящее время эти строки взяты из этого файла , между строками 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