64bit makinede 32bit çekirdek derleme


23

32 bitlik bir tek çekirdekli Intel Atom makinesi için bir çekirdek derlemeye çalışıyorum. Söylemeye gerek yok, derleme zamanla tutarsız alıyor. 2 saattir devam ediyor ve hala sürücü modüllerinin tam yarısı.

Ana masaüstümde bir çekirdeği derlemek sadece 15 dakika sürüyor, ancak 64 bit bir makine. Daha iyi makineden 32bit çekirdek paketi oluşturmak için çapraz derleyebilir miyim?


Sanal makine bunu yapabilir, ancak daha yavaş olacak
Tachyons

1
Evet ve çift çizme yapabilirim, ancak diğer platformlar için mevcut ortamdan çıkmadan bir şey derlemenin mümkün olduğuna eminim.
Oli

Bu ilginç + 1 ed
Tachyons

Yanıtlar:


27

Çekirdek çapraz derlenebilse de, en kolay yol 32 bitlik (i386) bir chroot oluşturmak ve onu orada oluşturmaktır.

Yükleyin ubuntu-dev-tools:

$ sudo apt-get install ubuntu-dev-tools

Bir i386 chroot oluşturun:

$ mk-sbuild --arch=i386 precise

(Muhtemelen bunu iki kez çalıştırmanız gerekecek. İlk kez kurulur schrootvb. mk-sbuild)

Sonra chroot'a girin:

$ schroot -c precise-i386

Ve çekirdeği, normalde yapacağınız gibi yapın.


11
Bir chrootta inşa etmek, Ubuntu çekirdek ekibindeki geliştiricilerin kullandığı yöntem olarak kesinlikle tercih edilen bir yöntemdir.
Colin Ian King,

Bunlar oldukça şık görünümlü araçlar. Yarın bir şans vereceğim. Teşekkürler.
Oli

Lütfen "normalde yaptığınız gibi" genişletin. Ben normalde help.ubuntu.com/community/Kernel/Compile adresindeki talimatları izlerdim ama onlar bir chroot içinde çalışmaz - derleme 'ölümcül hata: linux / compiler.h: Böyle bir dosya veya dizin yok' ile ölür
Alistair Buxton

Giriş klasörünüzü chroots'a yerleştirmek hoş bir ek gibi görünüyor: wiki.ubuntu.com/SimpleSbuild#Mount_your_home_dir
int_ua

5

Afaik, gcc'de, -m32linux kaynaklarını 32bit çalıştırılabilirlere derlemesi için bayrak ayarlayabilirsiniz . Makefiles hakkında geniş bir bilgim yok, fakat onları ince ayarlayabilirsiniz.

düzenleme: Burada cflags ayarlamak için söylendi burada stackoverflow bir soru eklemek istedim :

export CFLAGS=-m32

Ve Torvalds'ın github hesabındaki linux deposundan, bir ortam değişkeni ayarlayarak bir hedef mimarisi ayarlayabileceğinizi söylediği gibi, yararlı bulabileceğiniz ana makefile üzerinde aşağıdaki bölümü buldum. Yorumları oku, şu anda, bu satırlar bu dosyadan , 174-196 satırları arasında :

# 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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.