64 비트 시스템에서 32 비트 커널 컴파일


23

32 비트 단일 코어 Intel Atom 컴퓨터 용 커널을 컴파일하려고합니다. 말할 것도없이, 컴파일은 많은 시간이 걸립니다. 2 시간 동안 진행되었으며 여전히 드라이버 모듈의 중간 정도입니다.

메인 데스크탑에서 커널을 컴파일하는 데 15 분 밖에 걸리지 않지만 64 비트 시스템입니다. 더 나은 머신에서 32 비트 커널 패키지를 생성하기 위해 크로스 컴파일을 할 수 있습니까?


가상 머신은 그것을 할 수 있지만 속도가 느려집니다
터키 온

1
예, 이중 부팅이 가능하지만 현재 환경을 벗어나지 않고 다른 플랫폼을 위해 컴파일 할 수 있습니다.
Oli

흥미 롭습니다 +1 ed
Tachyons

답변:


27

커널을 크로스 컴파일 할 수 있지만 가장 쉬운 방법은 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

그리고 정상적으로 커널을 빌드하십시오.


11
chroot에서 빌드하는 것은 Ubuntu 커널 팀의 개발자가 사용하는 것과 같은 기본 방법입니다.
콜린 이안 킹

그것들은 꽤 멋진 도구입니다. 내일 촬영 할게요 감사.
Oli

"평소대로"확장하십시오. 나는 보통 help.ubuntu.com/community/Kernel/Compile 의 지침을 따르지만 chroot 안에서는 작동하지 않습니다-빌드는 '치명적인 오류 : linux / compiler.h : 그런 파일이나 디렉토리가 없습니다'로 죽습니다
Alistair Buxton

chroots에 홈 폴더를 마운트하는 것은 멋진 추가 물처럼 보입니다 : wiki.ubuntu.com/SimpleSbuild#Mount_your_home_dir
int_ua

5

gfa에서는 Afaik을 사용하여 -m32Linux 소스를 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.