web-dev-qa-db-fra.com

Compiler le noyau 32 bits sur une machine 64 bits

J'essaie de compiler un noyau pour une machine Intel Atom à cœur unique 32 bits. Inutile de dire que la compilation prend énormément de temps. Cela dure depuis 2 heures et il n’est encore qu’à mi-chemin des modules de pilote.

Compiler un noyau sur mon bureau principal ne prend que 15 minutes, mais c’est une machine 64 bits. Puis-je effectuer une compilation croisée pour générer un package de noyau 32 bits à partir de la meilleure machine?

23
Oli

Bien que le noyau puisse être compilé de manière croisée, le moyen le plus simple est de créer un chroot 32 bits (i386) et de le construire ici.

Installez ubuntu-dev-tools:

$ Sudo apt-get install ubuntu-dev-tools

Créez un chroot i386:

$ mk-sbuild --Arch=i386 precise

(Vous devrez probablement l'exécuter deux fois. La première fois, il installera schroot etc. et installera mk-sbuild)

Puis entrez le chroot:

$ schroot -c precise-i386

Et construisez le noyau, comme vous le feriez normalement.

27
tumbleweed

Après cela, dans gcc, vous pouvez définir le drapeau -m32 pour lui permettre de compiler les sources linux en exécutables 32 bits. Je ne connais pas très bien les Makefiles, mais vous pouvez les modifier.

edit: Je voulais ajouter ne question de stackoverflow ici, dans lequel il est dit de définir cflags:

export CFLAGS=-m32

Et à partir du référentiel Linux dans Torvalds 'compte github, j'ai trouvé la section suivante sur le makefile principal que vous pourriez trouver utile, car il indique que vous pouvez définir une architecture cible en définissant une variable d'environnement. Lire les commentaires, actuellement, ces lignes sont de ce fichier, entre les lignes 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
5
user91091