32 비트 단일 코어 Intel Atom 컴퓨터 용 커널을 컴파일하려고합니다. 말할 것도없이, 컴파일은 많은 시간이 걸립니다. 2 시간 동안 진행되었으며 여전히 드라이버 모듈의 중간 정도입니다.
메인 데스크탑에서 커널을 컴파일하는 데 15 분 밖에 걸리지 않지만 64 비트 시스템입니다. 더 나은 머신에서 32 비트 커널 패키지를 생성하기 위해 크로스 컴파일을 할 수 있습니까?
32 비트 단일 코어 Intel Atom 컴퓨터 용 커널을 컴파일하려고합니다. 말할 것도없이, 컴파일은 많은 시간이 걸립니다. 2 시간 동안 진행되었으며 여전히 드라이버 모듈의 중간 정도입니다.
메인 데스크탑에서 커널을 컴파일하는 데 15 분 밖에 걸리지 않지만 64 비트 시스템입니다. 더 나은 머신에서 32 비트 커널 패키지를 생성하기 위해 크로스 컴파일을 할 수 있습니까?
답변:
커널을 크로스 컴파일 할 수 있지만 가장 쉬운 방법은 32 비트 (i386) chroot를 만들어 그 안에 빌드하는 것입니다.
설치 ubuntu-dev-tools
:
$ sudo apt-get install ubuntu-dev-tools
i386 chroot를 작성하십시오.
$ mk-sbuild --arch=i386 precise
(아마도 두 번 실행해야 할 것입니다. 처음에는 schroot
등 을 설치 하고 설정합니다 mk-sbuild
)
그런 다음 chroot를 입력하십시오.
$ schroot -c precise-i386
그리고 정상적으로 커널을 빌드하십시오.
gfa에서는 Afaik을 사용하여 -m32
Linux 소스를 32 비트 실행 파일로 컴파일 할 수 있도록 플래그를 설정할 수 있습니다 . 나는 Makefile에 대한 광범위한 지식이 없지만 조정할 수 있습니다.
편집 : 여기에 stackoverflow 에서 질문 을 추가 하고 싶었습니다 .cflags를 설정하라는 메시지가 표시됩니다.
export CFLAGS=-m32
그리고 Torvalds 'github 계정 의 리눅스 저장소에서 환경 변수를 설정하여 대상 아키텍처를 설정할 수 있음을 알려주는 유용한 메이크 파일의 다음 섹션을 찾았습니다. 주석을 읽으십시오. 현재이 행은 이 파일 에서 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