Cách đơn giản để biên dịch lại kernel?


41

Tôi quan tâm đến việc biên dịch kernel mới trong Ubuntu 12.04 x86 64 bit.

Tôi tìm thấy trang wiki này về cơ bản là một tấm gương cho blog này và có rất nhiều bước ( git , v.v.) dường như vô dụng đối với tôi.

Với các bản phát hành / phân phối trước đó, tôi đã sử dụng để tạo một .configtệp và sửa đổi Makefilenếu tôi cần, sau đó chỉ cần chạy makevà thế là xong.

Có một cách đơn giản để làm điều này trong Ubuntu?


Câu trả lời:


39

1. Sử dụng apt-get sourceđể tải xuống phiên bản Ubuntu của kernel

apt-get source linux-image-$(uname -r)

đưa ra một thư mục có chứa, ví dụ:

linux-3.2.0 linux_3.2.0-26.41.dsc
 linux_3.2.0-26.41.diff.gz   linux_3.2.0.orig.tar.gz

Khác biệt được in đậm bao gồm tất cả các tùy chỉnh Ubuntu / Debian.

2. Để xây dựng kernel stock .config, hãy sử dụng make-kpkgphương thức Debian "lỗi thời"

Đây là cách thay thế lỗi thời được mô tả trong wiki:

sudo apt-get install kernel-package

Nếu bạn đang biên dịch kernel lần đầu tiên:

sudo apt-get build-dep linux-image-$(uname -r)

Sau đó cdvào thư mục nguồn (ở đây, linux-3.2.0) và chạy make oldconfigđể tạo .configtệp có cấu hình kernel đang chạy của bạn hoặc sao chép phần thứ ba .configvào thư mục này.

Tùy thuộc vào việc bạn muốn cấu hình văn bản hay đồ họa, hãy cài đặt:

(Bản văn)

sudo apt-get install libncurses5 libncurses5-dev

(Đồ họa)

sudo apt-get install qt3-dev-tools libqt3-mt-dev

Và sau đó chạy:

(Bản văn)

make menuconfig

(Đồ họa)

make xconfig

Khi xong, chỉ cần chạy:

fakeroot make-kpkg -j N --initrd --append-to-version=my-very-own-kernel kernel-image kernel-headers

trong đó Ncó bao nhiêu công việc để chạy song song (thường là số lượng CPU bạn có) và my-very-own-kernellà một chuỗi tùy chỉnh để xác định bản dựng này.

Khi hoàn tất, các tệp hình ảnh và tiêu đề kernel sẽ sẵn sàng như các bản sửa lỗi trong thư mục mẹ; bạn có thể cài đặt chúng sudo dpkg -i, việc này cũng sẽ giúp bạn thêm các mục GRUB, v.v.


Tại sao họ không nói gì với bạn về diff này, với tôi diff chỉ là diff, nó có thể chứa mọi thứ.
dùng827992

Tôi không biết, bạn sẽ phải hỏi họ (google cho Nhóm nhân Canonical). Tôi vừa nói với bạn cách xây dựng nó;)
ish

1
ok, câu hỏi cuối cùng, làm thế nào để áp dụng diff này nén? : DI phải vào linux-3.2.0thư mục và chạy patch -p1 <../patch.diff?
dùng827992

1
Không cần phải áp dụng khác biệt; apt-get source ...đã làm điều đó cho bạn rồi!
ish

2
-1 Bạn gọi nó là "lỗi thời", tôi gọi nó là lỗi thời. fakeroot debian/rules editconfigs, fakeroot debian/rules clean, fakeroot debian/rules binaryLà đúng, vấn miễn phí cách.
Alexanderr Dubinsky

19

Dưới đây là các bước. Thủ tục này được dựa trên nixCraftLàm thế nào để: Compile Linux Kernel 2.6 --but hiện đại hóa đáng kể.

Tải xuống và trích xuất mã nguồn của kernel mà bạn muốn xây dựng.

Bạn có thể lấy mã nguồn kernel ngược dòng tại kernel.org . Phiên bản 3.16.1 (hạt nhân ổn định mới nhất kể từ khi viết bài này) sẽ được sử dụng ở đây. Vì vậy, bạn có thể cần sửa đổi các lệnh này nếu bạn đang sử dụng một phiên bản khác.

Mã nguồn hạt nhân hiện đang được cung cấp trong. hắc ín . lưu trữ xz , vì vậy hãy nhấp vào liên kết "tar.xz" theo bất kỳ phiên bản nào bạn muốn:

ảnh chụp màn hình từ kernel.org, hiển thị lưu trữ nguồn kernel có sẵn để tải xuống

Sau khi cdvào thư mục mà bạn đã tải xuống kho lưu trữ, bạn có thể giải nén nó bằng tar:

tar xf linux-3.16.1.tar.xz

Cài đặt các công cụ xây dựng cần thiết và thực hiện cấu hình kernel.

Để có được Ubuntu của toolchain ( gcc, make, và vân vân) cài đặt các build-essentialCài đặt bản dựng siêu gói:

sudo apt-get update
sudo apt-get install build-essential

Hai cách hợp lý thân thiện với người dùng để định cấu hình những gì đi vào kernel của bạn được cung cấp bởi các makemục tiêu xconfigmenuconfig.

xconfigchạy một tiện ích cấu hình đồ họa, trong khi menuconfigdựa trên văn bản (nghĩa là giao diện của nó xuất hiện đầy đủ trong thiết bị đầu cuối của bạn). Mỗi yêu cầu một số phần mềm bổ sung không được cung cấp bởi bản dựngCài đặt bản dựng .

Để cấu hình đồ họa , cài đặt libqt4-devCài đặt libqt4-dev pkg-configCài đặt pkg-config và chạymake xconfig:

sudo apt-get install libqt4-dev pkg-config
make xconfig

Để định cấu hình trong thiết bị đầu cuối , cài đặtlibncurses5-dev(nhờ Hannu cho thông tin này) và chạymake menuconfig:

sudo apt-get install libncurses5-dev
make menuconfig

Xây dựng kernel được cấu hình.

Đầu tiên chạy cái này để biên dịch kernel và tạo vmlinuz:

make

vmlinuzlà "hạt nhân." Cụ thể, đó là hình ảnh hạt nhân sẽ không bị nén và được tải vào bộ nhớ bởi GRUB hoặc bất kỳ bộ tải khởi động nào khác mà bạn sử dụng.

Sau đó xây dựng các mô-đun hạt nhân có thể tải :

make modules

Cài đặt kernel mới được xây dựng của bạn.

Giả sử những makelệnh đó đã hoàn thành thành công, đã đến lúc cài đặt kernel mới. Đầu tiên cài đặt các mô-đun:

sudo make modules_install

Sau đó cài đặt kernel :

sudo make install

Điều đó đặt vmlinuz-3.16.1(một bản sao của vmlinuz), config-3.16.1(một tệp văn bản lưu các tham số cấu hình kernel) và System.map-3.16.1( bảng tra cứu biểu tượng kernel ) vào /boot. Để biết thêm chi tiết, xem bài đăng comp.os.linux.misc này của Hadronman installkernel.

Thiết lập cuối cùng, vì vậy kernel có thể được khởi động và khởi động hệ thống:

Phần này một phần dựa trên thông tin trong Kernel / Compile .

Với kernel bây giờ, nơi nó cần, nó cần:

Tạo initramfs của bạn vớimkinitramfs:

cd /boot
sudo mkinitramfs -ko initrd.img-3.16.1 3.16.1

Khi bạn cập nhật cấu hình của bộ tải khởi động GRUB2 - vốn được mặc định trong Ubuntu kể từ ngày 9.10-- sẽ tự động phát hiện hạt nhân mới và thêm tùy chọn để khởi động từ nó.

sudo update-grub

Hãy thử hạt nhân của bạn.

Bây giờ bạn có thể khởi động lại để kiểm tra kernel mới của bạn. Bạn có thể cần giữ Shifthoặc nhấn Esctrong khi khởi động để xem menu khởi động GRUB nơi bạn có thể chọn giữa các hạt nhân khác nhau được cài đặt.

Để đặt kernel của bạn (hoặc một cái khác) làm mặc định, hãy xem Làm cách nào để thay đổi thứ tự khởi động GRUB?


Bước 3, make menuconfigyêu cầuapt get install libncurses5-dev
Hannu

@Hannu cảm ơn bạn, tôi hoàn toàn quên đề cập đến điều đó. Người dùng hệ thống 64 bit có thể yêu cầu "ia32-libs" để hỗ trợ các chương trình 32 bit chạy.
Novice

Có thể tốt hơn để tìm một gói độc lập với phiên bản quá ... Tôi không chắc chắn có bất kỳ gói nào.
Hannu

@EliahKagan Cảm ơn bạn. Bây giờ nó ổn hay tôi nên xóa nó hoàn toàn? Tôi không có vấn đề trong việc làm điều đó.
Novice

1
-1 Điều này không tạo ra hạt nhân Ubuntu . Nó thậm chí không tạo ra các tệp .deb. Đây là một công thức cho các vấn đề.
Alexanderr Dubinsky

3

Các hướng dẫn nhanh để xây dựng nhân Ubuntu (trái ngược với vanilla) có thể được tìm thấy ở đây: https : //wiki.ub Ubuntu.com/Kernel/BuildYourOwnKernel .

Tôi sẽ không sao chép toàn bộ wiki, nhưng tôi sẽ liệt kê các bước tối thiểu để biên dịch phiên bản kernel Ubuntu mà bạn hiện đã cài đặt. (Để có phiên bản mới nhất, hãy sao chép kho lưu trữ kernel git của bản phát hành Ubuntu sắp tới.) Đã thử nghiệm trên Ubuntu 16.04.

# Get source code
apt-get source linux-image-$(uname -r)

# Install dependencies
sudo apt-get build-dep linux-image-$(uname -r)

# Compile
cd linux-4.4.0
fakeroot debian/rules clean
fakeroot debian/rules binary

# Install (obviously the versions will be different)
cd ..
sudo dpkg -i linux-image-4.4.0-38-generic_4.4.0-38.57_amd64.deb linux-headers-4.4.0-38_4.4.0-38.57_all.deb linux-headers-4.4.0-38-generic_4.4.0-38.57_amd64.deb
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.