Biên dịch kernel 32 bit trên máy 64 bit


23

Tôi đang cố gắng biên dịch kernel cho máy Intel Atom đơn lõi 32 bit. Không cần phải nói, việc biên dịch đang mất nhiều thời gian. Nó đã hoạt động được 2 giờ và nó vẫn chỉ đi được một nửa các mô-đun trình điều khiển.

Quá trình biên dịch kernel trên máy tính để bàn chính của tôi chỉ mất 15 phút nhưng đó là máy 64 bit. Tôi có thể biên dịch chéo để tạo gói kernel 32 bit từ máy tốt hơn không?


Máy ảo có thể làm điều đó, nhưng nó sẽ chậm hơn
Tachyons

1
Vâng và tôi có thể khởi động kép, nhưng tôi chắc chắn có thể biên dịch mọi thứ cho các nền tảng khác mà không cần rời khỏi môi trường hiện tại.
Oli

Đó là điều thú vị +1 ed
Tachyons

Câu trả lời:


27

Mặc dù kernel có thể được biên dịch chéo, cách dễ nhất là tạo ra một chroot 32 bit (i386) và xây dựng nó trong đó.

Cài đặt ubuntu-dev-tools:

$ sudo apt-get install ubuntu-dev-tools

Tạo một chroot i386:

$ mk-sbuild --arch=i386 precise

(Bạn có thể sẽ phải chạy hai lần. Lần đầu tiên, nó cài đặt, schrootv.v. và thiết lập mk-sbuild)

Sau đó nhập chroot:

$ schroot -c precise-i386

Và xây dựng kernel, như bạn muốn, bình thường.


11
Xây dựng trong một chroot chính xác là phương pháp ưa thích được sử dụng bởi các nhà phát triển trong nhóm nhân Ubuntu.
Colin Ian King

Đó là một số công cụ tìm kiếm khá lạ mắt. Tôi sẽ cho nó một shot vào ngày mai. Cảm ơn.
Oli

Vui lòng mở rộng trên "như bạn thường làm". Tôi thường làm theo hướng dẫn tại help.ubfox.com/community/Kernel/Compile nhưng chúng không hoạt động bên trong một chroot - bản dựng bị lỗi với 'lỗi nghiêm trọng: linux / Trình biên dịch.h: Không có tệp hoặc thư mục như vậy'
Alistair Buxton

Gắn thư mục nhà của bạn trong chroots trông giống như một bổ sung tốt đẹp: wiki.ubuntu.com/SimpleSbuild#Mount_your_home_dir
int_ua

5

Afaik, trong gcc, bạn có thể đặt -m32cờ để cho phép nó biên dịch các nguồn linux thành các tệp thực thi 32 bit. Tôi không có kiến ​​thức rộng về Makefiles, nhưng bạn có thể điều chỉnh chúng.

chỉnh sửa: Tôi muốn thêm một câu hỏi từ stackoverflow tại đây, trong đó nó được yêu cầu đặt cflags:

export CFLAGS=-m32

Và từ kho lưu trữ linux trong tài khoản github của Torvalds , tôi đã tìm thấy phần sau trên tệp chính mà bạn có thể thấy hữu ích, vì nó cho biết rằng bạn có thể đặt kiến ​​trúc đích bằng cách đặt biến môi trường. Đọc các bình luận, hiện tại, các dòng này là từ tệp này , giữa các dòng 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.