Скомпилировать ядро ​​с определенной конфигурацией [duplicate]

Я пытаюсь скомпилировать ядро ​​для 32-разрядной одноядерной машины Intel Atom. Излишне говорить, что компилятор занимает слишком много времени.

Компиляция ядра на моем основном рабочем столе занимает всего 15 минут, но это 64-битная машина. Могу ли я перекрестно скомпилировать для создания 32-битного пакета ядра с лучшей машины?

23
задан 19 February 2011 в 22:55

16 ответов

В то время как ядро ​​может быть скомпилировано, самый простой способ - создать 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

И создайте ядро, как обычно,

27
ответ дан 25 July 2018 в 05:47
  • 1
    Строение в chroot - это именно тот метод, который используется разработчиками в команде ядра Ubuntu. – Colin Ian King 14 November 2012 в 15:44
  • 2
    Это довольно привлекательные инструменты. Завтра я сделаю снимок. Благодарю. – Oli♦ 14 November 2012 в 22:54
  • 3
    Пожалуйста, расширьте & quot; как обычно. & Quot ;. Обычно я выполняю инструкции в help.ubuntu.com/community/Kernel/Compile , но они не работают внутри chroot - сборка умирает с «фатальной ошибкой: linux / compiler.h: нет таких файл или каталог ' – Alistair Buxton 29 April 2013 в 01:54
  • 4
    Установка вашей домашней папки в chroots выглядит как приятное дополнение: wiki.ubuntu.com/SimpleSbuild#Mount_your_home_dir – int_ua 27 June 2016 в 13:19

В то время как ядро ​​может быть скомпилировано, самый простой способ - создать 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

И создайте ядро, как обычно,

27
ответ дан 1 August 2018 в 08:01

В то время как ядро ​​может быть скомпилировано, самый простой способ - создать 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

И создайте ядро, как обычно,

27
ответ дан 3 August 2018 в 04:06

В то время как ядро ​​может быть скомпилировано, самый простой способ - создать 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

И создайте ядро, как обычно,

27
ответ дан 4 August 2018 в 05:53

В то время как ядро ​​может быть скомпилировано, самый простой способ - создать 32-битный (i386) chroot и построить его там.

Установить ubuntu-dev-tools :

  $ sudo apt-get install ubuntu-dev-tools  

Создать chroot i386:

  $ mk  -sbuild --arch = i386 exact  

(Вам, вероятно, придется запустить это дважды. В первый раз он устанавливает schroot и т. д. и устанавливает mk-sbuild )

Затем введите chroot:

  $ schroot -c exact-i386  

И выстройте ядро, как обычно,

27
ответ дан 5 August 2018 в 13:28

В то время как ядро ​​может быть скомпилировано, самый простой способ - создать 32-битный (i386) chroot и построить его там.

Установить ubuntu-dev-tools :

  $ sudo apt-get install ubuntu-dev-tools  

Создать chroot i386:

  $ mk  -sbuild --arch = i386 exact  

(Вам, вероятно, придется запустить это дважды. В первый раз он устанавливает schroot и т. д. и устанавливает mk-sbuild )

Затем введите chroot:

  $ schroot -c exact-i386  

И выстройте ядро, как обычно,

27
ответ дан 7 August 2018 в 06:55

В то время как ядро ​​может быть скомпилировано, самый простой способ - создать 32-битный (i386) chroot и построить его там.

Установить ubuntu-dev-tools :

  $ sudo apt-get install ubuntu-dev-tools  

Создать chroot i386:

  $ mk  -sbuild --arch = i386 exact  

(Вам, вероятно, придется запустить это дважды. В первый раз он устанавливает schroot и т. д. и устанавливает mk-sbuild )

Затем введите chroot:

  $ schroot -c exact-i386  

И выстройте ядро, как обычно,

27
ответ дан 9 August 2018 в 13:54

В то время как ядро ​​может быть скомпилировано, самый простой способ - создать 32-битный (i386) chroot и построить его там.

Установить ubuntu-dev-tools :

  $ sudo apt-get install ubuntu-dev-tools  

Создать chroot i386:

  $ mk  -sbuild --arch = i386 exact  

(Вам, вероятно, придется запустить это дважды. В первый раз он устанавливает schroot и т. д. и устанавливает mk-sbuild )

Затем введите chroot:

  $ schroot -c exact-i386  

И выстройте ядро, как обычно,

27
ответ дан 15 August 2018 в 07:06
  • 1
    Строение в chroot - это именно тот метод, который используется разработчиками в команде ядра Ubuntu. – Colin Ian King 14 November 2012 в 15:44
  • 2
    Это довольно привлекательные инструменты. Завтра я сделаю снимок. Благодарю. – Oli♦ 14 November 2012 в 22:54
  • 3
    Пожалуйста, расширьте & quot; как обычно. & Quot ;. Обычно я выполняю инструкции в help.ubuntu.com/community/Kernel/Compile , но они не работают внутри chroot - сборка умирает с «фатальной ошибкой: linux / compiler.h: нет таких файл или каталог ' – Alistair Buxton 29 April 2013 в 01:54
  • 4
    Установка вашей домашней папки в chroots выглядит как приятное дополнение: wiki.ubuntu.com/SimpleSbuild#Mount_your_home_dir – int_ua 27 June 2016 в 13:19

Afaik, в gcc, вы можете установить флаг -m32, чтобы он скомпилировал источники Linux в 32-разрядные исполняемые файлы.

edit: Я хотел добавить вопрос из stackoverflow здесь, в котором сказано, чтобы установить cflags:

export CFLAGS=-m32

И из репозитория linux в edit: 'github account, я нашел следующий раздел основного файла 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
5
ответ дан 25 July 2018 в 05:47

Afaik, в gcc, вы можете установить флаг -m32, чтобы он скомпилировал источники Linux в 32-разрядные исполняемые файлы.

edit: Я хотел добавить вопрос из stackoverflow здесь, в котором сказано, чтобы установить cflags:

export CFLAGS=-m32

И из репозитория linux в edit: 'github account, я нашел следующий раздел основного файла 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
5
ответ дан 1 August 2018 в 08:01

Afaik, в gcc, вы можете установить флаг -m32, чтобы он скомпилировал источники Linux в 32-разрядные исполняемые файлы.

edit: Я хотел добавить вопрос из stackoverflow здесь, в котором сказано, чтобы установить cflags:

export CFLAGS=-m32

И из репозитория linux в edit: 'github account, я нашел следующий раздел основного файла 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
5
ответ дан 3 August 2018 в 04:06

Afaik, в gcc, вы можете установить флаг -m32, чтобы он скомпилировал источники Linux в 32-разрядные исполняемые файлы.

edit: Я хотел добавить вопрос из stackoverflow здесь, в котором сказано, чтобы установить cflags:

export CFLAGS=-m32

И из репозитория linux в edit: 'github account, я нашел следующий раздел основного файла 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
5
ответ дан 4 August 2018 в 05:53

Afaik, в gcc, вы можете установить флаг -m32 , чтобы он скомпилировал источники Linux в 32-разрядные исполняемые файлы.

edit: Я хотел добавить вопрос из stackoverflow здесь, в котором сказано, чтобы установить cflags:

  export CFLAGS = -m32  

И из репозитория linux в Torvalds 'github account я нашел следующий раздел в главном make-файле, который вам может пригодиться, поскольку он сообщает, что вы можете установить целевую архитектуру, установив переменную среды. Прочитайте комментарии, в настоящее время эти строки взяты из этого файла , между строками 174-196 :

  # Кросс-компиляция и выбор другого набора  gcc / bin-utils # -------------------------------------------  -------------------------------- # # При выполнении кросс-компиляции для других архитектур ARCH должна быть установлена ​​# целевой архитектуре  ,  (См. Arch / * для возможностей).  # ARCH можно установить во время вызова make: # make ARCH = ia64 # Другой способ - установить ARCH в среде.  # ARCH по умолчанию - это хост, в котором выполняется make.  # CROSS_COMPILE указывает префикс, используемый для всех исполняемых файлов, используемых во время компиляции.  Только gcc и связанные с ним исполняемые файлы bin-utils имеют префикс $ (CROSS_COMPILE).  # CROSS_COMPILE можно установить в командной строке # make CROSS_COMPILE = ia64-linux- # В качестве альтернативы CROSS_COMPILE можно установить в среде.  # Третьей альтернативой является сохранение параметра в .config, так что обычная # "make" в сконфигурированном каталоге сборки ядра всегда использует это.  # Значение по умолчанию для CROSS_COMPILE не для префикса исполняемых файлов # Примечание. Некоторые архитектуры назначают CROSS_COMPILE в их экспорте arch / * / Makefile. KBUILD_BUILDHOST: = $ (SUBARCH) ARCH? = $ (SUBARCH) CROSS_COMPILE? = $ (CONFIG_CROSS_COMPILE: "%" =  %) # ... # За этой линией больше связанных с архитектурой материалов  
5
ответ дан 5 August 2018 в 13:28

Afaik, в gcc, вы можете установить флаг -m32 , чтобы он скомпилировал источники Linux в 32-разрядные исполняемые файлы.

edit: Я хотел добавить вопрос из stackoverflow здесь, в котором сказано, чтобы установить cflags:

  export CFLAGS = -m32  

И из репозитория linux в Torvalds 'github account я нашел следующий раздел в главном make-файле, который вам может пригодиться, поскольку он сообщает, что вы можете установить целевую архитектуру, установив переменную среды. Прочитайте комментарии, в настоящее время эти строки взяты из этого файла , между строками 174-196 :

  # Кросс-компиляция и выбор другого набора  gcc / bin-utils # -------------------------------------------  -------------------------------- # # При выполнении кросс-компиляции для других архитектур ARCH должна быть установлена ​​# целевой архитектуре  ,  (См. Arch / * для возможностей).  # ARCH можно установить во время вызова make: # make ARCH = ia64 # Другой способ - установить ARCH в среде.  # ARCH по умолчанию - это хост, в котором выполняется make.  # CROSS_COMPILE указывает префикс, используемый для всех исполняемых файлов, используемых во время компиляции.  Только gcc и связанные с ним исполняемые файлы bin-utils имеют префикс $ (CROSS_COMPILE).  # CROSS_COMPILE можно установить в командной строке # make CROSS_COMPILE = ia64-linux- # В качестве альтернативы CROSS_COMPILE можно установить в среде.  # Третьей альтернативой является сохранение параметра в .config, так что обычная # "make" в сконфигурированном каталоге сборки ядра всегда использует это.  # Значение по умолчанию для CROSS_COMPILE не для префикса исполняемых файлов # Примечание. Некоторые архитектуры назначают CROSS_COMPILE в их экспорте arch / * / Makefile. KBUILD_BUILDHOST: = $ (SUBARCH) ARCH? = $ (SUBARCH) CROSS_COMPILE? = $ (CONFIG_CROSS_COMPILE: "%" =  %) # ... # За этой линией больше связанных с архитектурой материалов  
5
ответ дан 7 August 2018 в 06:55

Afaik, в gcc, вы можете установить флаг -m32 , чтобы он скомпилировал источники Linux в 32-разрядные исполняемые файлы.

edit: Я хотел добавить вопрос из stackoverflow здесь, в котором сказано, чтобы установить cflags:

  export CFLAGS = -m32  

И из репозитория linux в Torvalds 'github account я нашел следующий раздел в главном make-файле, который вам может пригодиться, поскольку он сообщает, что вы можете установить целевую архитектуру, установив переменную среды. Прочитайте комментарии, в настоящее время эти строки взяты из этого файла , между строками 174-196 :

  # Кросс-компиляция и выбор другого набора  gcc / bin-utils # -------------------------------------------  -------------------------------- # # При выполнении кросс-компиляции для других архитектур ARCH должна быть установлена ​​# целевой архитектуре  ,  (См. Arch / * для возможностей).  # ARCH можно установить во время вызова make: # make ARCH = ia64 # Другой способ - установить ARCH в среде.  # ARCH по умолчанию - это хост, в котором выполняется make.  # CROSS_COMPILE указывает префикс, используемый для всех исполняемых файлов, используемых во время компиляции.  Только gcc и связанные с ним исполняемые файлы bin-utils имеют префикс $ (CROSS_COMPILE).  # CROSS_COMPILE можно установить в командной строке # make CROSS_COMPILE = ia64-linux- # В качестве альтернативы CROSS_COMPILE можно установить в среде.  # Третьей альтернативой является сохранение параметра в .config, так что обычная # "make" в сконфигурированном каталоге сборки ядра всегда использует это.  # Значение по умолчанию для CROSS_COMPILE не для префикса исполняемых файлов # Примечание. Некоторые архитектуры назначают CROSS_COMPILE в их экспорте arch / * / Makefile. KBUILD_BUILDHOST: = $ (SUBARCH) ARCH? = $ (SUBARCH) CROSS_COMPILE? = $ (CONFIG_CROSS_COMPILE: "%" =  %) # ... # За этой линией больше связанных с архитектурой материалов  
5
ответ дан 9 August 2018 в 13:54

Afaik, в gcc, вы можете установить флаг -m32 , чтобы он скомпилировал источники Linux в 32-разрядные исполняемые файлы.

edit: Я хотел добавить вопрос из stackoverflow здесь, в котором сказано, чтобы установить cflags:

  export CFLAGS = -m32  

И из репозитория linux в Torvalds 'github account я нашел следующий раздел в главном make-файле, который вам может пригодиться, поскольку он сообщает, что вы можете установить целевую архитектуру, установив переменную среды. Прочитайте комментарии, в настоящее время эти строки взяты из этого файла , между строками 174-196 :

  # Кросс-компиляция и выбор другого набора  gcc / bin-utils # -------------------------------------------  -------------------------------- # # При выполнении кросс-компиляции для других архитектур ARCH должна быть установлена ​​# целевой архитектуре  ,  (См. Arch / * для возможностей).  # ARCH можно установить во время вызова make: # make ARCH = ia64 # Другой способ - установить ARCH в среде.  # ARCH по умолчанию - это хост, в котором выполняется make.  # CROSS_COMPILE указывает префикс, используемый для всех исполняемых файлов, используемых во время компиляции.  Только gcc и связанные с ним исполняемые файлы bin-utils имеют префикс $ (CROSS_COMPILE).  # CROSS_COMPILE можно установить в командной строке # make CROSS_COMPILE = ia64-linux- # В качестве альтернативы CROSS_COMPILE можно установить в среде.  # Третьей альтернативой является сохранение параметра в .config, так что обычная # "make" в сконфигурированном каталоге сборки ядра всегда использует это.  # Значение по умолчанию для CROSS_COMPILE не для префикса исполняемых файлов # Примечание. Некоторые архитектуры назначают CROSS_COMPILE в их экспорте arch / * / Makefile. KBUILD_BUILDHOST: = $ (SUBARCH) ARCH? = $ (SUBARCH) CROSS_COMPILE? = $ (CONFIG_CROSS_COMPILE: "%" =  %) # ... # За этой линией больше связанных с архитектурой материалов  
5
ответ дан 15 August 2018 в 07:06

Другие вопросы по тегам:

Похожие вопросы: