Складіть 32-бітове ядро ​​на 64-бітній машині


23

Я намагаюся скласти ядро ​​для 32-бітової одноядерної машини Intel Atom. Зайве говорити, що компіляція займає непомірні кількості часу. Він триває 2 години, і це все ще лише на півдорозі через драйверні модулі.

Компіляція ядра на моєму головному робочому столі займає лише 15 хвилин, але це 64-бітна машина. Чи можна перехрестити компіляцію, щоб генерувати 32-бітовий пакет ядра з кращої машини?


Віртуальна машина може це зробити, але це буде повільніше
Тахіонс

1
Так, і я міг би подвоїти завантаження, але я впевнений, що можна скласти річ для інших платформ, не виходячи з поточного середовища.
Олі

Це цікаво +1 видання
Тахіонс

Відповіді:


27

Хоча ядро ​​може бути складено крос-компіляцією, найпростіший спосіб - створити 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

І будуйте ядро, як би ви, як правило.


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-бітні виконувані файли. У мене немає широких знань про Makefiles, але ви можете їх налаштувати.

редагувати: я хотів сюди додати запитання від stackoverflow , в якому сказано встановити cflags:

export CFLAGS=-m32

І з репозиторію linux в обліковому записі github Torvalds я знайшов наступний розділ на головному файлі 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.