Biên dịch hạt nhân Linux. Nhân Linux (tiếp nhận và kiểm soát)

Xây dựng nhân Linux
Xin chào các độc giả thân mến. Hôm nay tôi sẽ kể cho bạn nghe về một hoạt động thú vị như vậy Cách xây dựng hạt nhân Linux. Tại sao bạn cần phải tự mình lắp ráp kernel? Trên thực tế, có thể có nhiều lý do: nhu cầu sử dụng thêm khả năng của kernel, tối ưu kernel cho máy tính, cập nhật kernel lên phiên bản mới nhất. Trong bài viết này, tôi sẽ trình bày quy trình lấy mã nguồn, định cấu hình, biên dịch và cài đặt nhân Linux vào hệ thống, như một phần của việc giải quyết vấn đề bao gồm hỗ trợ cryptoloop (thiết bị mã hóa loopback) trong kernel.

Lấy mã nguồn
Trước hết chúng ta cần lấy mã nguồn, việc này có thể được thực hiện theo nhiều cách khác nhau và từ nhiều nguồn khác nhau. Tôi đề xuất chỉ xem xét hai: kho hệ thống, trang web hạt nhân chính thức. Các kho lưu trữ rất có thể sẽ chứa các phiên bản kernel cũ hơn phiên bản trên trang web chính thức, nhưng những nguồn này phải bao gồm các bản vá và bản sửa lỗi từ nhà sản xuất bản phân phối Linux của bạn. Cách tiếp cận này thích hợp hơn trừ khi bạn cần một số công nghệ hoặc tính năng mới chỉ được hỗ trợ bởi các nhân mới hơn. Bạn có thể xem tất cả các phiên bản của nguồn kernel có trong kho của hệ thống bằng cách nhập vào thiết bị đầu cuối (đúng với Ubuntu Linux, tên gói có thể khác trong các bản phân phối khác):

Apt-cache tìm kiếm nguồn linux

Lệnh sẽ liệt kê các gói có sẵn:


Như bạn thấy, tôi chỉ có một gói có phiên bản hiện tại và một gói có phiên bản 3.5 (thực tế thì phiên bản kernel hiện tại cũng là 3.5). Để mở rộng danh sách các hạt nhân có sẵn theo cách này, cần kết nối các kho bổ sung. Chúng ta có thể lấy kernel bằng lệnh: sudo apt-get install linux-source

linux-source - tên của gói nguồn, nó có thể khác trong trường hợp của bạn.
Sau khi lệnh hoàn thành, một tệp sẽ xuất hiện trong thư mục /usr/src, trong trường hợp của tôi - linux-source-3.5.0.tar.bz2. Chúng ta hãy vào thư mục, giải nén tệp lưu trữ và để thuận tiện, hãy tạo một liên kết tượng trưng:

Cd /usr/src sudo tar -xjvf linux-source-3.5.0.tar.bz2 sudo ln -s linux-source-3.5.0 linux

Nếu bạn cần phiên bản kernel mới nhất, bạn luôn có thể tải xuống từ trang web kernel.org. Điều đáng chú ý là trang web chứa cả phiên bản ổn định của hạt nhân và phiên bản dành cho thử nghiệm và sửa đổi (thường tên của chúng có chứa từ viết tắt “RC” - Ứng cử viên phát hành). Nếu bạn không muốn hệ thống gặp những sự cố không đáng có, tôi khuyên bạn nên tải xuống phiên bản ổn định:

Hãy lưu kho lưu trữ với các nguồn trong thư mục /usr/src. Để giải nén kho lưu trữ kết quả, bạn có thể cần cài đặt các tiện ích bổ sung:

Sudo apt-get cài đặt xz-utils

Bây giờ, như trong trường hợp tải kernel từ kho, chúng ta phải giải nén kho lưu trữ nguồn và tạo một liên kết:

Cd /usr/src sudo tar -xpJf linux-3.8.5.tar.xz sudo ln -s linux-3.8.5.tar.xz linux

Cấu hình và biên dịch.
Bây giờ chúng ta đến phần thú vị nhất. Trước khi bắt đầu, hãy cài đặt một vài gói bổ sung:

sudo apt-get cài đặt gói kernel cần thiết libncurses-dev

Chúng tôi sẽ tạo một cấu hình mới dựa trên kernel hiện được hệ thống sử dụng:

Cd /usr/src/linux sudo tạo oldconfig

Nếu bạn đang định cấu hình phiên bản kernel mới hơn phiên bản hiện có trong hệ thống thì có khả năng nó chứa các tham số không có trong cấu hình của kernel hiện tại. Trong trường hợp này, chương trình sẽ yêu cầu bạn đưa ra lựa chọn, bạn có thể để các giá trị mặc định bằng cách nhấn phím Enter. Trong mọi trường hợp, cấu hình vẫn chưa hoàn tất. Bây giờ chúng ta có thể thực hiện các cài đặt mình cần thông qua menu tạo cấu hình:

Sudo tạo menuconfig

Chương trình cấu hình sẽ bắt đầu trong terminal:

Tại đây, các tùy chọn cấu hình được chia thành các phần để dễ điều hướng hơn. Như tôi đã nói ở trên, tôi cần đưa hỗ trợ cryptoloop vào kernel. Để thực hiện việc này, hãy đi tới phần “Trình điều khiển thiết bị” và từ đó đến phần phụ “Chặn thiết bị”:

Chúng ta tìm thấy tham số “Cryptoloop Support”, bên cạnh có chữ “M” nghĩa là hỗ trợ cho các thiết bị mã hóa sẽ được thêm dưới dạng mô-đun hạt nhân có thể được kích hoạt bằng lệnh modprobe. Chúng ta cần đưa hỗ trợ trực tiếp cho công nghệ này vào kernel để nó luôn được hỗ trợ. Chúng tôi chuyển trọng tâm sang tham số “Hỗ trợ Cryptoloop” và nhấn phím cách. Chữ “M” nên được thay thế bằng ký hiệu “*”, điều này có nghĩa là sự hỗ trợ cho công nghệ này sẽ được “cố định” vào kernel. Hãy cẩn thận, một khoảng trống có nghĩa là công nghệ sẽ không được hỗ trợ.

Nhấn phím “Tab” và nhấp vào nút “Thoát” cho đến khi bạn được nhắc lưu các thay đổi:

Chúng tôi trả lời “Có”. Chúng ta đã hoàn tất cấu hình thành công!
Hãy bắt đầu biên dịch. Đầu tiên, chúng ta xóa các tập tin còn lại từ các tập hợp trước đó; nếu bạn khởi động tập hợp này lần đầu tiên thì không cần thiết phải chạy lệnh này: sudo make-kpkg clean

Hãy bắt đầu quá trình biên dịch:

Sudo make-kpkg -j4 --initrd --append-to-version=-mykernel kernel_image kernel_headers

J4 - cờ cho biết có bao nhiêu luồng sử dụng để biên dịch. Điều này sẽ tăng tốc đáng kể quá trình biên dịch trên bộ xử lý đa lõi. Số 4 ở đây biểu thị 4 chủ đề. Cài đặt số lượng luồng bằng số lõi của bộ xử lý mà hệ thống “nhìn thấy”.
-mykernel - tiền tố chỉ ra rằng kernel được biên dịch thủ công, bạn có thể thay đổi nó, thực tế nó không ảnh hưởng gì cả.

Bây giờ quá trình biên soạn đã bắt đầu. Có thể mất từ ​​10 phút đến vài giờ tùy thuộc vào mức độ mạnh mẽ của máy tính:

Cài đặt kernel trên hệ thống

Sau khi biên dịch hoàn tất, hai tệp có phần mở rộng “deb” sẽ xuất hiện trong thư mục /usr/src. Chúng là các gói cài đặt kernel mới của chúng tôi và có thể được cài đặt bằng tiện ích dpkg:

sudo dpkg -i linux-image-3.8.5-mykernel_3.8.5-mykernel-10.00.Custom_i386.deb
sudo dpkg -i linux-headers-3.8.5-mykernel_3.8.5-mykernel-10.00.Custom_i386.deb

Chúc mừng! Kernel đã được cài đặt, bây giờ hệ thống sẽ khởi động với kernel này theo mặc định, nhưng nếu gặp vấn đề với kernel mới, bạn luôn có thể khởi động với kernel cũ bằng cách chọn nó trên màn hình khởi động - Grub. Với điều này tôi kết thúc bài viết hôm nay và chúc bạn thành công, độc giả thân mến!

Trong một dòng hệ điều hành lớn dựa trên GNU/Linux. Chắc chắn bạn đã nghe nói rằng các mã này được mở, phân phối miễn phí và miễn phí. Họ nói, bạn muốn gì thì lấy, nhưng chỉ tuân thủ các điều khoản của giấy phép GPL, điều này không hề khó khăn chút nào. Tuy nhiên, ít người giải thích đủ rõ ràng bản chất của hiện tượng này là gì, ý nghĩa của nó là gì. Vì vậy, chúng tôi sẽ cố gắng giải thích như vậy.

Bản chất tóm tắt

Mọi chuyện bắt đầu vào năm 1991, khi sinh viên Phần Lan Linus Torvalds công bố mã hạt nhân của hệ điều hành Linux mới. Tại sao lại mở? Bởi vì anh đã ủng hộ. Nhưng chắc hẳn bạn đã biết điều này (hoặc dễ dàng tìm ra). Chúng ta sẽ chú ý đến những điểm cần phân loại rõ ràng.

Linux

Linux không phải là một hệ điều hành mà chỉ là một hạt nhân. Một bộ giải pháp phần mềm cần thiết để khởi động máy tính và hoạt động của các thành phần của nó (“phần cứng”), nền tảng cho hoạt động của các chương trình khác.

GNU

GNU là một tập hợp các ứng dụng đơn giản tồn tại ngay cả trước khi xuất hiện hạt nhân trên. Các chương trình này cho phép một người thực hiện ít nhất một số tương tác với máy tính chứ không chỉ nhìn chằm chằm vào màn hình. Tất nhiên, mã nguồn cũng là mã mở.

GNU/Linux là một hệ điều hành, không chỉ là một hạt nhân. Thay vì GNU có thể có thứ khác, ví dụ như Dalvik trong Android.

Trình điều khiển

Công nghệ ngày càng phát triển, số lượng phần cứng máy tính ngày càng tăng, thiết bị ngày càng phát triển. Và mọi sản phẩm đều cần có người điều khiển để hoạt động. Vì vậy, một số trình điều khiển được vặn trực tiếp vào lõi. Nếu chúng miễn phí (Phần mềm miễn phí), như GNU và Linux, thì các mã chắc chắn là mở.

Chà, khi không có trình điều khiển miễn phí phù hợp thì không thể làm gì được, bạn phải cài đặt những trình điều khiển độc quyền. Mã của họ có mở hay không chỉ phụ thuộc vào nhà sản xuất phần cứng.

Các ứng dụng

Các ứng dụng tùy chỉnh được phân loại là Nguồn mở thường được sản xuất theo phiên bản dành cho các hệ điều hành khác nhau. Chúng không phải là một phần của Linux. Đúng, một số là tiêu chuẩn cho một bản phân phối hoặc shell đồ họa cụ thể, nhưng không phải là một phần của kernel.

Đương nhiên, mã cho tất cả các tùy chọn đều mở - cho tất cả các hệ điều hành được hỗ trợ. Tình huống tương tự cũng áp dụng cho các tiện ích khác nhau.

Ai làm ra nó

Nhân Linux đang được cải tiến bởi một nhóm những người đam mê. Đôi khi chính Linus Torvalds cũng tham gia. Mã hạt nhân, được đóng gói trong kho lưu trữ, có thể được tải xuống từ kernel.org để biên dịch độc lập tiếp theo.

Driver nếu miễn phí cũng thường do cộng đồng làm ra. Đối với máy in, máy quét, card màn hình, bộ chuyển đổi Wi-Fi... Nói chung là rất nhiều thứ.

Ví dụ: gói Gutenprint, là một bộ đầy đủ các trình điều khiển cho nhiều kiểu máy in. Hơn nữa, chất lượng in thường tương đương với các chỉ số đưa ra khi sử dụng trình điều khiển “bản địa” của nhà sản xuất.

Đôi khi các nhà sản xuất phần cứng tự mở mã theo một số giấy phép phù hợp, chẳng hạn như GPL hoặc BSD. Những sự kiện như vậy thường gây ra niềm vui khôn tả cho những người ủng hộ Nguồn mở.

Như bạn có thể đoán, các ứng dụng tùy chỉnh cũng được tạo bởi cộng đồng hoặc bởi những người đam mê cá nhân. Tuy nhiên, các công ty thương mại cũng thích quảng cáo bản thân bằng cách cung cấp cho người dân một phần sản phẩm của họ dưới dạng Phần mềm Tự do. Một ví dụ nổi bật: bộ ứng dụng văn phòng OpenOffice.org đã được Oracle sản xuất từ ​​lâu.

Hơn nữa, một số công ty thậm chí còn sản xuất toàn bộ bộ dụng cụ phân phối. Red Hat, SuSE, Xandros tính tiền cho các tập hợp nhị phân sẵn sàng sử dụng nhưng họ không có quyền giấu mã. Nghĩa là, những mã này dù được xử lý như thế nào cũng phải được mở. Đây là một yêu cầu của giấy phép GPL.

Ai sử dụng nó

Một lập trình viên nhìn vào phần mềm và nghĩ: “Đó là một điều tốt, nhưng nó có thể được thực hiện tốt hơn!” Tải xuống kho lưu trữ có mã từ trang web của nhà phát triển và cải thiện nó. Anh ấy được tham gia cùng với một nhóm chuyên gia muốn tham gia và một dự án mới đã ra đời.

Đây là cách các “fork” xuất hiện (từ “fork” tiếng Anh, trong trường hợp này được dịch là “chi nhánh”). Các chương trình mới dựa trên cơ sở mã của những chương trình hiện có.

Ví dụ: từ một trình phát âm thanh tốt Amarok, một trình phát âm thanh thậm chí còn tốt hơn - Clementine đã được tạo ra. Và từ bộ ứng dụng văn phòng OpenOffice.org - LibreOffice, bộ ứng dụng này đang phát triển nhanh chóng và rất hứa hẹn.

Vì vậy, toàn bộ hệ điều hành được sao chép theo nguyên tắc này. Hệ điều hành CentOS miễn phí được biên dịch từ mã nguồn của Red Hat Enterprise Linux trả phí. Tất nhiên, các ông chủ ở Red Hat có lẽ đang tức giận nhưng họ không thể làm gì vì không sở hữu mã nguồn.

Tuy nhiên, trong trường hợp này, việc sửa đổi chủ yếu là cắt bỏ các logo đã đăng ký, nhưng nếu không có tính mở bắt buộc của mã thì về nguyên tắc, sự tồn tại của CentOS sẽ không thể tồn tại.

Phần kết luận

Nguồn mở là một khái niệm cơ bản của Linux nói riêng và của tất cả các Phần mềm Tự do nói chung. Các mã này có thể được sử dụng cho các dự án của riêng bạn, được kiểm tra tính vô hại thông qua nỗ lực của cộng đồng, nghiên cứu, nâng cao kỹ năng của bạn bằng cách tham gia phát triển, cải thiện và hỗ trợ mọi người vì mục đích cao cả của họ.

Không có tập hợp phần mềm nhị phân nào quan trọng đối với bạn đối với một bản phân phối GNU/Linux cụ thể? Trình điều khiển không được bao gồm trong kernel? Chúng tôi lấy kho lưu trữ cùng với mã nguồn, giải nén nó, đọc hướng dẫn lắp ráp, biên dịch, cài đặt nó - và sử dụng nó. Bạn không phụ thuộc vào nhà sản xuất, bạn không bị ràng buộc vào một hệ điều hành cụ thể - đây là sự tự do thực sự.

Các ấn phẩm trước đây:

Nhân Linux chứa hơn 13 triệu dòng mã và là một trong những dự án nguồn mở lớn nhất thế giới. Vậy kernel Linux là gì và nó dùng để làm gì?

Kernel là cấp độ thấp nhất của phần mềm tương tác với phần cứng máy tính. Nó chịu trách nhiệm về sự tương tác của tất cả các ứng dụng đang chạy trong không gian người dùng cho đến phần cứng vật lý. Đồng thời cho phép các quy trình được gọi là dịch vụ nhận thông tin từ nhau bằng hệ thống IPC.

Các loại và phiên bản của kernel

Bạn đã biết kernel Linux là gì nhưng có những loại kernel nào? Có nhiều phương pháp và cân nhắc về kiến ​​trúc khác nhau khi tạo hạt nhân từ đầu. Hầu hết các hạt nhân có thể là một trong ba loại: hạt nhân nguyên khối, hạt nhân vi mô và hạt nhân lai. Nhân Linux là nhân nguyên khối, trong khi nhân Windows và OS X là nhân lai. Chúng ta hãy xem tổng quan về ba loại hạt nhân này.

vi hạt nhân

Hạt nhân vi mô thực hiện một cách tiếp cận trong đó chúng chỉ quản lý những gì chúng được cho là: CPU, bộ nhớ và IPC. Hầu hết mọi thứ khác trên máy tính đều được coi là phụ kiện và được xử lý ở chế độ người dùng. Hạt nhân vi mô có lợi thế về tính di động; chúng có thể được sử dụng trên phần cứng khác và thậm chí cả hệ điều hành khác, miễn là hệ điều hành cố gắng truy cập phần cứng theo cách tương thích.

Hạt nhân vi mô cũng có kích thước rất nhỏ và an toàn hơn vì hầu hết các quy trình đều chạy ở chế độ người dùng với các đặc quyền tối thiểu.

thuận

  • Tính di động
  • Kích thước nhỏ
  • Tiêu thụ bộ nhớ thấp
  • Sự an toàn

Nhược điểm

  • Phần cứng có thể truy cập thông qua trình điều khiển
  • Phần cứng chậm hơn vì trình điều khiển chạy ở chế độ người dùng
  • Các tiến trình phải đợi đến lượt mình để nhận thông tin
  • Các tiến trình không thể truy cập các tiến trình khác mà không phải chờ đợi

lõi nguyên khối

Hạt nhân nguyên khối trái ngược với hạt nhân vi mô vì chúng không chỉ bao gồm bộ xử lý, bộ nhớ và IPC mà còn bao gồm những thứ như trình điều khiển thiết bị, quản lý hệ thống tệp, hệ thống I/O. Hạt nhân nguyên khối cho phép truy cập tốt hơn vào phần cứng và cho phép thực hiện đa nhiệm tốt hơn vì nếu một chương trình cần lấy thông tin từ bộ nhớ hoặc một quy trình khác thì nó không phải xếp hàng đợi. Nhưng điều này có thể gây ra một số vấn đề vì nhiều thứ được thực hiện ở chế độ siêu người dùng. Và điều này có thể gây hại cho hệ thống nếu thực hiện không đúng cách.

Ưu điểm:

  • Truy cập trực tiếp hơn vào phần cứng
  • Trao đổi dữ liệu dễ dàng hơn giữa các quy trình
  • Quy trình phản hồi nhanh hơn

Nhược điểm:

  • Size lớn
  • Chiếm nhiều RAM
  • Kém an toàn

Lõi lai

Hạt nhân lai có thể chọn những gì sẽ làm việc trong chế độ người dùng và những gì trong không gian hạt nhân. Thông thường trình điều khiển thiết bị và hệ thống tệp nằm trong không gian người dùng, trong khi IPC và các lệnh gọi hệ thống nằm trong không gian kernel. Giải pháp này tận dụng tối đa cả hai thế giới nhưng đòi hỏi nhiều công việc hơn từ các OEM. Bởi mọi trách nhiệm đối với người lái xe giờ đây đều thuộc về họ.

thuận

  • Khả năng chọn những gì sẽ hoạt động trong kernel và không gian người dùng
  • Kích thước nhỏ hơn lõi nguyên khối
  • Linh hoạt hơn

Nhược điểm

  • Có thể làm việc chậm hơn
  • Trình điều khiển thiết bị được nhà sản xuất phát hành

Các tập tin kernel được lưu trữ ở đâu?

Nhân Linux nằm ở đâu? Các tệp kernel của Ubuntu hoặc bất kỳ bản phân phối Linux nào khác đều nằm trong thư mục /boot và được gọi là phiên bản vmlinuz. Cái tên vmlinuz xuất phát từ thời Unix. Vào những năm sáu mươi, hạt nhân thường được gọi đơn giản là Unix; vào những năm 90, hạt nhân Linux còn được gọi là Linux.

Khi bộ nhớ ảo được phát triển để hỗ trợ đa nhiệm, các chữ cái vm xuất hiện trước tên tệp để cho biết rằng kernel hỗ trợ công nghệ này. Đôi khi kernel được gọi là vmlinux, nhưng sau đó hình ảnh không còn vừa với bộ nhớ khởi động và bị nén. Sau đó, chữ x cuối cùng được đổi thành z để biểu thị rằng nén zlib đã được sử dụng. Kiểu nén cụ thể này không phải lúc nào cũng được sử dụng; đôi khi bạn có thể tìm thấy LZMA hoặc BZIP2, vì vậy một số hạt nhân được gọi đơn giản là zImage.

Số phiên bản bao gồm ba chữ số, số phiên bản của nhân Linux, số phiên bản của bạn và các bản vá hoặc bản sửa lỗi.

Gói /boot không chỉ chứa nhân Linux mà còn chứa các tệp như initrd.img và system.map. Initrd được sử dụng như một đĩa ảo nhỏ để tìm nạp và thực thi tệp kernel thực tế. Tệp System.map được sử dụng để quản lý bộ nhớ trong khi hạt nhân chưa được tải và các tệp cấu hình có thể chỉ định mô-đun hạt nhân nào được bao gồm trong ảnh hạt nhân khi được xây dựng.

Kiến trúc hạt nhân Linux

Vì nhân Linux là một cấu trúc nguyên khối nên nó lớn hơn và phức tạp hơn nhiều so với các loại nhân khác. Tính năng thiết kế này đã thu hút nhiều tranh cãi trong những ngày đầu của Linux và vẫn còn mang một số lỗi thiết kế vốn có trong các nhân nguyên khối.

Nhưng để khắc phục những thiếu sót này, các nhà phát triển nhân Linux đã làm một việc - các mô-đun hạt nhân có thể được tải khi chạy. Điều này có nghĩa là bạn có thể thêm và xóa các thành phần kernel một cách nhanh chóng. Điều này có thể vượt xa việc thêm chức năng phần cứng, bạn có thể chạy các quy trình máy chủ, bật ảo hóa và thay thế hoàn toàn kernel mà không cần khởi động lại.

Hãy tưởng tượng bạn có thể cài đặt gói cập nhật Windows mà không cần phải khởi động lại liên tục.

Mô-đun hạt nhân

Điều gì sẽ xảy ra nếu Windows đã có tất cả trình điều khiển bạn cần theo mặc định và bạn chỉ có thể kích hoạt những trình điều khiển bạn cần? Đây chính xác là nguyên tắc mà các mô-đun hạt nhân Linux thực hiện. Mô-đun hạt nhân, còn được gọi là mô-đun có thể tải (LKM), rất cần thiết để giữ cho hạt nhân chạy với tất cả phần cứng mà không sử dụng hết RAM.

Mô-đun này mở rộng chức năng của hạt nhân cơ sở cho các thiết bị, hệ thống tệp và lệnh gọi hệ thống. Các mô-đun có thể tải có phần mở rộng .ko và thường được lưu trữ trong thư mục /lib/modules/. Nhờ tính chất mô-đun của nó, bạn có thể tùy chỉnh kernel rất dễ dàng bằng cách cài đặt và tải các mô-đun. Tự động tải hoặc dỡ các mô-đun có thể được cấu hình trong các tệp cấu hình hoặc dỡ và tải nhanh chóng bằng các lệnh đặc biệt.

Các mô-đun nguồn đóng, độc quyền của bên thứ ba có sẵn trên một số bản phân phối như Ubuntu, nhưng chúng không được cung cấp theo mặc định và phải được cài đặt thủ công. Ví dụ: các nhà phát triển trình điều khiển video NVIDIA không cung cấp mã nguồn mà thay vào đó họ đã biên dịch các mô-đun của riêng mình ở định dạng .ko. Mặc dù các mô-đun này có vẻ miễn phí nhưng chúng không miễn phí. Đó là lý do tại sao chúng không được đưa vào nhiều bản phân phối theo mặc định. Các nhà phát triển tin rằng không cần thiết phải làm ô nhiễm kernel bằng phần mềm độc quyền.

Bây giờ bạn đã tiến gần hơn đến việc trả lời câu hỏi nhân Linux là gì. Cốt lõi không phải là phép thuật. Nó rất cần thiết cho hoạt động của bất kỳ máy tính nào. Nhân Linux khác với OS X và Windows vì nó bao gồm tất cả các trình điều khiển và thực hiện rất nhiều thứ được hỗ trợ ngay lập tức. Bây giờ bạn đã biết thêm một chút về cách phần mềm của bạn hoạt động và những tập tin nào được sử dụng để thực hiện điều đó.

Trong hướng dẫn từng bước này, bạn sẽ tìm hiểu cách xây dựng và cài đặt đúng cách hạt nhân nhánh >2.6 trên dòng hệ điều hành Ubuntu.

Bước 1: Lấy mã nguồn kernel

Nguồn nhân Ubuntu có thể được lấy theo hai cách:

    Bằng cách cài đặt kho lưu trữ từ kho lưu trữ, với ứng dụng tự động các bản vá chính thức mới nhất. Thao tác này sẽ tải gói có kích thước ~150 MB xuống thư mục hiện tại. Để lấy nguồn kernel, phiên bản được cài đặt trên máy tính, hãy chạy lệnh: apt-get source linux-image-`uname -r`

    Hoặc thay vì `uname -r` bạn có thể chỉ định một phiên bản cụ thể có sẵn trong kho.

Có thể xem danh sách các phiên bản có sẵn trong kho lưu trữ bằng cách gõ lệnh: “apt-get source linux-image-” và không cần nhấn Enter, hãy nhấn phím Tab hai lần.

Đừng quên bật chia sẻ nguồn trong kho lưu trữ (Cài đặt hệ thống → Chương trình và cập nhật → Phần mềm Ubuntu → Mã nguồn). Bạn có thể thực hiện việc này từ bảng điều khiển bằng cách bỏ ghi chú các dòng bắt đầu bằng deb-src trong tệp /etc/apt/sources.list, sau đó thực hiện cập nhật bằng lệnh: “sudo apt-get update”.

    Phiên bản mới nhất của kernel có sẵn thông qua git. Kích thước của gói tải xuống là ~ 500-800 MB. git clone git://kernel.ubuntu.com/ubuntu/ubuntu- .git

    Ở đâu - tên phát hành, ví dụ:

    Bản sao Git git://kernel.ubuntu.com/ubuntu/ubuntu-xenial.git

Hạt nhân khác

Ngoài ra còn có các hạt nhân không được đảm bảo sẽ hoạt động trong Ubuntu. Ví dụ: có một sự cố đã biết với một số ứng dụng hệ thống phổ biến (đặc biệt là trình điều khiển NVidia, VirtualBox), khi cài đặt sẽ được biên dịch cho kernel đã cài đặt. Do đó, việc cài đặt chúng trên kernel không chuẩn cho một phiên bản Ubuntu nhất định (ví dụ: Ubuntu 16.04 đi kèm kernel 4.4.0) có thể yêu cầu biên dịch thủ công riêng hoặc các bản vá đặc biệt và ứng dụng có thể không hỗ trợ các phiên bản mới nhất của Ubuntu. hạt nhân từ kernel.org.

    Lưu trữ từ phiên bản cơ bản không có bản vá, tức là. ví dụ "4.8.0", "4.8.10": sudo apt-get cài đặt nguồn linux

Giải nén kho lưu trữ kết quả bằng các lệnh:

Cd ~/ tar -xjf linux-2.6.x.y.tar.bz2

Hoặc trong trường hợp nguồn linux:

Cd /usr/src tar -xjf linux-source-2.6.x.y.tar.bz2

Bước 2. Lấy các gói hàng cần thiết để lắp ráp

Bước này chỉ phải được thực hiện nếu kernel được lắp ráp trên máy tính lần đầu tiên

Chạy các lệnh sau để cài đặt các gói cốt lõi:

Cập nhật Sudo apt-get Sudo apt-get build-dep linux Sudo apt-get cài đặt gói kernel

    cấu hình- Phương pháp cấu hình truyền thống. Chương trình hiển thị lần lượt các tùy chọn cấu hình, nhắc bạn đặt giá trị khác nhau cho từng tùy chọn. Không nên dùng cho người dùng thiếu kinh nghiệm.

    cấu hình cũ- tệp cấu hình được tạo tự động dựa trên cấu hình kernel hiện tại. Đề xuất cho người mới bắt đầu.

    định cấu hình sai- tập tin cấu hình được tạo tự động, dựa trên các giá trị mặc định.

    cấu hình menu- giao diện giả đồ họa để cấu hình thủ công, không yêu cầu nhập tuần tự các giá trị tham số. Được khuyến nghị sử dụng trong thiết bị đầu cuối.

    xconfig- Giao diện đồ họa (X) để cấu hình thủ công, không yêu cầu nhập tuần tự các giá trị tham số.

    gconfig- giao diện đồ họa (GTK+) để cấu hình thủ công, không yêu cầu nhập tuần tự các giá trị tham số. Được khuyến nghị sử dụng trong môi trường Gnome.

    localmodconfig- tệp cấu hình được tạo tự động, chỉ bao gồm những gì cần thiết cho thiết bị cụ thể này. Khi lệnh này được gọi, hầu hết lõi sẽ được điều chế

Trong trường hợp bạn muốn sử dụng cấu hình, cấu hình cũ, định cấu hình sai, localmodconfig hoặc cấu hình ngôn ngữ, bạn không cần bất kỳ gói bổ sung nào nữa. Trong trường hợp có 3 tùy chọn còn lại, bạn cũng phải cài đặt thêm các gói bổ sung.

cấu hình menu chạy lệnh sau:

Sudo apt-get cài đặt libncurses5-dev

Để cài đặt các gói cần thiết để sử dụng gconfig chạy lệnh sau:

Sudo apt-get cài đặt libgtk2.0-dev libglib2.0-dev libglade2-dev

Để cài đặt các gói cần thiết để sử dụng xconfig chạy lệnh sau:

Trước Ubuntu 12.04: sudo apt-get install qt3-dev-tools libqt3-mt-dev

Sudo apt-get cài đặt libqt4-dev

Bước 3. Áp dụng các bản vá

Bước này là tùy chọn.

Các bản vá chính thức đã được áp dụng cho các nguồn nếu kernel được lấy bằng lệnh được mô tả ở trên:

Nguồn Apt-get linux-image-`uname -r`

Nếu trước đây bạn chưa bao giờ áp dụng các bản vá cho mã nguồn thì hãy chạy lệnh sau:

Bản vá cài đặt Sudo apt-get

Lệnh này sẽ cài đặt chương trình vá lỗi, chương trình này cần thiết để áp dụng các bản vá, như bạn có thể đoán. Bây giờ tải tập tin vá vào thư mục mà bạn đã giải nén kernel. Đây có thể là tệp lưu trữ (ví dụ Bzip2 hoặc Gzip) hoặc tệp vá lỗi không nén.

Tại thời điểm này, giả định rằng bạn đã lưu tệp vào thư mục mà trước đó bạn đã giải nén kernel và cài đặt chương trình vá lỗi.
Nếu tệp bạn đã tải xuống có định dạng Gzip (*.gz), hãy chạy lệnh sau để trích xuất nội dung của kho lưu trữ:

Bản vá Gunzip-2.6.x.y.gz

Nếu tệp bạn đã tải xuống có định dạng Bzip2 (*.bz2), hãy chạy lệnh sau để trích xuất nội dung của kho lưu trữ:

Bản vá Bunzip2-2.6.x.y.bz2

trong đó 2.6.x.y là phiên bản vá kernel. Các lệnh thích hợp sẽ trích xuất tệp vá vào thư mục nguồn kernel. Trước khi áp dụng bản vá, bạn cần đảm bảo rằng nó sẽ hoạt động không có lỗi. Để thực hiện việc này, hãy chạy lệnh:

Patch -p1 -i patch-2.6.x.y --dry-run

trong đó 2.6.x.y là phiên bản vá kernel. Lệnh này sẽ mô phỏng việc áp dụng một bản vá mà không tự thay đổi các tệp.

Nếu không có lỗi xảy ra trong quá trình thực thi thì các thay đổi có thể được thực hiện một cách an toàn trong chính các tệp. Để thực hiện việc này, hãy chạy lệnh:

Patch -p1 -i patch-2.6.x.y

trong đó 2.6.x.y là phiên bản vá kernel. Nếu không có lỗi thì bản vá đã được áp dụng thành công cho mã nguồn.

Chú ý! Trước khi áp dụng bản vá, hãy thực hiện các bước sau: 1. Tải xuống từ http://www.kernel.org bản vá có cùng phiên bản với nguồn của bạn. 2. Chạy lệnh sau: patch -p1 -R

trong đó 2.6.x.y là phiên bản của bản vá và nguồn của bạn

Bước 4. Cấu hình bản dựng kernel trong tương lai

Chuyển đến thư mục nơi bạn đã giải nén kernel bằng cách chạy lệnh

Cd ~/linux-2.6.x.y

trong đó 2.6.x.y là phiên bản kernel bạn đã tải xuống.

Tại thời điểm này, bạn hẳn đã quyết định phương pháp cấu hình kernel (nếu chưa, hãy kiểm tra chúng trong phần “Lấy các gói cần thiết để xây dựng”). Tùy thuộc vào điều này, hãy chạy lệnh sau để chạy phương thức cấu hình bạn đã chọn:

    cấu hình- Phương pháp cấu hình truyền thống. Chương trình hiển thị lần lượt các tùy chọn cấu hình, nhắc bạn đặt giá trị khác nhau cho từng tùy chọn. Được gọi bằng lệnh make config

    cấu hình cũ- tệp cấu hình được tạo tự động dựa trên cấu hình kernel hiện tại. Đề xuất cho người mới bắt đầu. Được gọi bởi make oldconfig

    định cấu hình sai- tệp cấu hình được tạo tự động, dựa trên các giá trị mặc định cho kiến ​​trúc cụ thể này. Được gọi bởi make defconfig

    cấu hình menu- giao diện giả đồ họa để cấu hình thủ công, không yêu cầu nhập tuần tự các giá trị tham số. Được khuyến nghị sử dụng trong thiết bị đầu cuối. Gọi: tạo menuconfig

    gconfigxconfig- cấu hình đồ họa cho cấu hình thủ công. Gọi: tạo gconfig

    Tạo xconfig

    tương ứng

    localmodconfigcấu hình ngôn ngữ- bộ cấu hình tự động. Cấu hình được tạo dựa trên các mô-đun hiện được gọi và kernel đang chạy. Sự khác biệt giữa hai bộ cấu hình này là số lượng mô-đun. Trong trường hợp đầu tiên, sẽ có ít nhất 50% lõi và trong trường hợp thứ hai, không quá 2 mô-đun. Gọi: tạo localmodconfig

    Tạo localesconfig

    tương ứng

Sau khi được gọi, chương trình cấu hình tương ứng sẽ được khởi chạy. Thực hiện các cài đặt cần thiết theo nhu cầu của bạn, lưu tệp cấu hình và tiến hành bước tiếp theo.

Bước 5: Xây dựng hạt nhân

Vậy là việc chuẩn bị đã hoàn tất. Bây giờ bạn có thể bắt đầu quá trình xây dựng kernel. Để thực hiện việc này, hãy chạy lệnh:

Fakeroot make-kpkg -j 5 --initrd --append-to-version=-custom kernel_image kernel_headers #-j<количество ядер процессора>+1

Việc xây dựng kernel có thể mất từ ​​20 phút đến vài giờ, tùy thuộc vào cấu hình kernel và thông số kỹ thuật của máy tính. Lắp ráp với bộ xử lý đa lõi có thể nhanh hơn nhiều lần

Bước 6: Cài đặt hình ảnh và tiêu đề hạt nhân

Khi quá trình xây dựng kernel hoàn tất, hai gói gỡ lỗi sẽ xuất hiện trong thư mục chính của bạn. Chúng cần được cài đặt. Để thực hiện việc này, hãy chạy các lệnh:

Cd ~/ sudo dpkg -i linux-image-2.6.x.y-custom_2.6.x.y-custom-10.00.Custom_arc.deb sudo dpkg -i linux-headers-2.6.x.y-custom_2.6.x.y-custom-10.00. Custom_arc.deb

trong đó 2.6.x.y là phiên bản của kernel đã lắp ráp, arc là kiến ​​trúc bộ xử lý (i386 - 32-bit, amd64 - 64-bit).
Nếu bạn không biết tên chính xác của gói, hãy liệt kê các tệp trong thư mục chính của bạn bằng lệnh

và tìm hai gói giống nhau.

Bước 7. Tạo đĩa RAM ban đầu

Để hoạt động chính xác, Ubuntu yêu cầu hình ảnh đĩa RAM ban đầu. Để tạo nó, hãy chạy lệnh:

Sudo update-initramfs -c -k 2.6.x.y-custom

trong đó 2.6.x.y là phiên bản của kernel đã biên dịch.

Bước 8: Cập nhật cấu hình bộ tải khởi động GRUB

Để đảm bảo rằng phiên bản kernel mới có sẵn để lựa chọn khi máy tính khởi động, hãy chạy lệnh sau:

Sudo cập nhật-grub

Tệp menu.lst (đối với GRUB phiên bản 1) hoặc grub.cfg (đối với GRUB phiên bản 2) sẽ được cập nhật tùy theo tính khả dụng của hệ điều hành và hình ảnh hạt nhân đã cài đặt.

Bước 9: Kiểm tra kernel

Quá trình lắp ráp và cài đặt hạt nhân đã hoàn tất thành công! Bây giờ hãy khởi động lại máy tính của bạn và thử khởi động hệ thống với kernel mới. Để đảm bảo hệ thống đang chạy với kernel mới, hãy chạy lệnh

Bỏ tên -r

Nó sẽ hiển thị phiên bản kernel đang được sử dụng.

Nếu mọi thứ được thực hiện chính xác, bạn có thể xóa kho lưu trữ mã nguồn và toàn bộ thư mục linux-2.6.x.y trong thư mục chính của mình. Điều này sẽ giải phóng khoảng 5 GB trên ổ cứng của bạn (dung lượng trống được giải phóng tùy thuộc vào cài đặt bản dựng của bạn).

Vậy là quá trình lắp ráp và cài đặt đã hoàn tất, xin chúc mừng!