it-swarm-vi.com

Lợi ích của việc biên dịch kernel linux của bạn là gì?

Tôi có thể thấy được lợi ích gì khi tự biên dịch kernel Linux? Có một số hiệu quả bạn có thể tạo ra bằng cách tùy chỉnh nó vào phần cứng của bạn?

107
jjclarkson

Trong suy nghĩ của tôi, lợi ích duy nhất bạn thực sự nhận được từ việc biên dịch kernel linux của riêng bạn là:

Bạn tìm hiểu cách biên dịch kernel linux của riêng bạn.

Đó không phải là thứ bạn cần để làm thêm tốc độ/bộ nhớ/xxx. Đó là một điều có giá trị để làm nếu đó là giai đoạn bạn cảm thấy bạn đang ở trong sự phát triển của bạn. Nếu bạn muốn hiểu sâu hơn về toàn bộ điều "nguồn mở" này là gì, về cách thức và các phần khác nhau của hạt nhân, thì bạn nên thử. Nếu bạn chỉ muốn tăng tốc thời gian khởi động thêm 3 giây, thì ... điểm gì ... hãy mua một ssd. Nếu bạn tò mò, nếu bạn muốn tìm hiểu, thì việc biên dịch kernel của riêng bạn là một ý tưởng tuyệt vời và bạn có thể sẽ nhận được rất nhiều từ nó.

Như đã nói, có một số lý do cụ thể khi nào đó sẽ phù hợp để biên dịch kernel của riêng bạn (như nhiều người đã chỉ ra trong các câu trả lời khác). Nói chung, những điều này phát sinh từ một nhu cầu cụ thể mà bạn có cho một kết quả cụ thể, ví dụ:

  • Tôi cần để hệ thống khởi động/chạy trên phần cứng với nguồn lực hạn chế
  • Tôi cần thử nghiệm một bản vá và cung cấp phản hồi cho các nhà phát triển
  • Tôi cần phải vô hiệu hóa một cái gì đó gây ra xung đột
  • Tôi cần phát triển kernel linux
  • Tôi cần kích hoạt hỗ trợ cho phần cứng không được hỗ trợ của mình
  • Tôi cần cải thiện hiệu suất của x vì tôi đang đạt đến giới hạn hiện tại của hệ thống (và tôi biết tôi đang làm gì)

Vấn đề nằm ở chỗ nghĩ rằng có một số lợi ích nội tại để biên dịch kernel của riêng bạn khi mọi thứ đã hoạt động theo đúng nghĩa của nó và tôi không nghĩ rằng có. Mặc dù bạn có thể dành vô số thời gian để vô hiệu hóa những thứ bạn không cần và điều chỉnh những thứ có thể điều chỉnh được, nhưng thực tế là nhân linux đã được điều chỉnh khá tốt (bởi bản phân phối của bạn) cho hầu hết tình huống người dùng.

75
gabe.

Hầu hết người dùng không cần phải biên dịch kernel của riêng họ, bản phân phối của họ đã thực hiện công việc này cho họ. Thông thường các bản phân phối sẽ bao gồm một tập hợp các bản vá để tích hợp với một số phần nhất định trong cách thức phân phối hoạt động, hỗ trợ trình điều khiển thiết bị và sửa lỗi từ các phiên bản mới hơn nhưng chưa được phát hành của kernel hoặc các tính năng mà chúng tiên phong với người dùng.

Khi bạn biên dịch kernel của riêng mình, bạn có một vài tùy chọn, bạn có thể biên dịch kernel Linus Torvalds chính thức, điều này sẽ không bao gồm bất kỳ bản vá hoặc tùy chỉnh nào được thêm bởi bản phân phối của bạn (có thể tốt hoặc xấu) hoặc bạn có thể sử dụng công cụ xây dựng lại phân phối của bạn để xây dựng kernel của riêng bạn.

Những lý do bạn có thể muốn xây dựng lại kernel của mình bao gồm:

  • Sửa lỗi hoặc thêm một tính năng cụ thể vào hệ thống sản xuất, nơi bạn không thể thực sự mạo hiểm nâng cấp toàn bộ kernel cho một hoặc hai lần sửa chữa.
  • Để dùng thử trình điều khiển thiết bị cụ thể hoặc tính năng mới
  • Để mở rộng kernel, hãy làm việc với nó
  • thử nghiệm một số mô-đun hoặc tính năng "Alpha".

Nhiều nhà phát triển sử dụng nó để tạo các phiên bản tùy chỉnh của kernel cho các hệ thống nhúng hoặc hộp giải quyết nơi họ cần trình điều khiển thiết bị đặc biệt hoặc họ muốn xóa chức năng mà họ không cần.

36
miguel.de.icaza

Tự biên dịch kernel cho phép bạn chỉ bao gồm các phần có liên quan đến máy tính của bạn, điều này làm cho nó nhỏ hơn và có khả năng nhanh hơn, đặc biệt là khi khởi động. Hạt nhân chung cần bao gồm hỗ trợ cho càng nhiều phần cứng càng tốt; tại thời điểm khởi động, họ phát hiện phần cứng nào được gắn vào máy tính của bạn và tải các mô-đun thích hợp, nhưng cần có thời gian để làm tất cả những điều đó và họ cần tải các mô-đun động, thay vì phải nướng mã trực tiếp vào kernel. Không có lý do gì để nhân của bạn hỗ trợ 400 CPU khác nhau khi chỉ có một trong máy tính của bạn hoặc để hỗ trợ chuột bluetooth nếu bạn không có, tất cả đều lãng phí không gian mà bạn có thể giải phóng

30
Michael Mrozek

Tôi không thể tin câu trả lời được chấp nhận ở đây bắt đầu nói rằng "Đó không phải là điều bạn cần làm để có thêm tốc độ/bộ nhớ/xxx."

Điều này là hoàn toàn sai. Tôi thường xuyên tùy chỉnh xây dựng Kernels của mình để loại bỏ mã không cần thiết cũng như bao gồm mã tăng cường hiệu suất chủ yếu liên quan đến phần cứng. Ví dụ: tôi chạy một số phần cứng cũ hơn và có thể tăng thêm một số hiệu suất bằng cách kích hoạt trình điều khiển Kernel hiếm khi được hỗ trợ như chipset HPT36x trên một số MoBos cũ có tích hợp sẵn này.

Một ví dụ khác, BIG SMP trong Slackware là mặc định và trên Dell 2800, chẳng hạn, sẽ tiêu thụ một bản in chân cỡ lớn để chạy những thứ như GFSD (không phải là một mô-đun hạt nhân), nhân tiện, cũng tiêu thụ CPU cho một cái gì đó tôi không cần. Tương tự như vậy đối với NFSD và các sản phẩm hấp dẫn khác để làm hài lòng tất cả các tinh thần, điều đó tốt nếu bạn chỉ cố gắng lấy Linux trên hộp và chạy nhưng nếu bạn quan tâm đến "tốc độ/bộ nhớ/xxx bất cứ điều gì" thì những điều này quan trọng và hiệu quả .

Tất cả các hộp sản xuất của tôi là Kernels tùy chỉnh. Nếu tôi sử dụng phần cứng phổ biến, chẳng hạn như phần cứng Dell (2800, 2850, 2900, v.v.), thì việc sao chép tệp .config của kernel xung quanh vào mỗi hộp và biên dịch kernel và cài đặt.

24
Eric

Dưới đây là một số tình huống biên dịch kernel của riêng bạn sẽ có lợi cho bạn:

  • Một hạt nhân với tải mô-đun bị vô hiệu hóa là an toàn hơn. Điều này sẽ yêu cầu bạn chọn các mô-đun bạn biết bạn cần và đưa chúng vào như một phần của kernel, trái ngược với việc biên dịch chúng thành các mô-đun.

  • Vô hiệu hóa hỗ trợ cho/dev/kmem hoặc làm tê liệt nó với tùy chọn trình biên dịch phù hợp là một điều tốt cho bảo mật. Tôi nghĩ rằng hầu hết các distro làm điều này theo mặc định bây giờ.

  • Tôi không thích sử dụng initrd khi có thể. Tùy chỉnh kernel của bạn với phần cứng mà nó khởi động để loại bỏ initrd.

  • Đôi khi một phiên bản kernel sau này sẽ có các tính năng bạn cần, nhưng điều này rất hiếm ngày nay. Tôi nhớ khi tôi mới bắt đầu sử dụng Debian, nó đã sử dụng hạt nhân 2.4, nhưng tôi cần một hạt nhân 2.6 để hỗ trợ udev.

  • Vô hiệu hóa các giao thức/tùy chọn mạng mà bạn không cần có thể tăng tốc hiệu suất TCP/IP của bạn.

  • Tắt các tùy chọn bạn không cần làm giảm dung lượng bộ nhớ của kernel, điều này rất quan trọng trong môi trường low RAM. Khi bạn đang sử dụng hệ thống 256MB RAM như một bộ định tuyến, điều này giúp.

  • Tôi thấy tất cả các thiết bị "tty" trong/dev gây phiền nhiễu trên các hệ thống mà tôi thường chỉ đăng nhập qua serial hoặc ssh.

14
LawrenceC

Biên dịch kernel của riêng bạn cho phép bạn tham gia vào quá trình phát triển kernel, cho dù đó là những việc đơn giản như cung cấp ID thiết bị PCI/USB cho trình điều khiển hiện có có thể giúp thiết bị mới hơn hoạt động cho bạn, để tham gia sâu vào lõi. phát triển nhân.

Nó cũng cho phép bạn kiểm tra các hạt phát triển trên phần cứng của bạn và cung cấp phản hồi nếu bạn nhận thấy bất kỳ hồi quy nào. Điều này có thể đặc biệt hữu ích cho bạn và những người khác nếu bạn có một phần cứng không phổ biến. Nếu bạn đợi kernel phân phối, có thể mất một chút thời gian để sửa lỗi từ các báo cáo sự cố của bạn để lọc thành bản phát hành kernel phân phối mới.

Cá nhân tôi cũng thích biên dịch các hạt nhân của riêng mình để chỉ hỗ trợ cho phần cứng mà tôi có. Khi bạn chạy các hạt nhân distro và nhìn vào đầu ra của lsmod(8), bạn sẽ thấy rất nhiều mô-đun được tải cho phần cứng mà bạn không có. Điều này có thể gây ô nhiễm danh sách mô-đun,/Proc,/sys và nhật ký của bạn để khi bạn tìm kiếm thứ gì đó, nó có thể bị ẩn trong tiếng ồn; Bạn cũng không thể chắc chắn 100% rằng các mô-đun đó không góp phần vào vấn đề bạn đang cố gắng chẩn đoán.

7
camh

Tôi thứ hai câu trả lời của gabe. (Bình luận của tôi quá dài nên tôi đang đăng dưới dạng câu trả lời).

Trừ khi bạn có mục đích chuyên môn cao (ví dụ: máy nhúng, hồ sơ bảo mật nghiêm ngặt), tôi không thấy lợi ích thiết thực nào trong việc biên dịch kernel của riêng bạn ngoài việc xem nó được thực hiện như thế nào. Bằng cách xem xét một cách có phương pháp các tùy chọn, xem cách chúng tương tác với nhau để xây dựng hệ thống là một cách tuyệt vời để hiểu cách hệ thống của bạn hoạt động. Thật đáng kinh ngạc những gì bạn tìm ra khi bạn cố gắng loại bỏ các thành phần dường như không có bất kỳ mục đích nào cho các nhiệm vụ bạn đang cố gắng thực hiện.

Tuy nhiên, được cảnh báo - tại sao nhảy xuống hố thỏ chắc chắn là rất phấn khích, nó sẽ hút lại nhiều đêm và cuối tuần hơn bạn nghĩ có thể!

6
gvkv

Tại nơi làm việc, chúng tôi sử dụng hạt nhân cuộn bằng tay để áp dụng các bản vá ngoài cây như vserver và unionfs.

Ở nhà, tôi đang biên dịch các hạt nhân cuộn bằng tay để tìm ra cam kết nào đã giới thiệu một lỗi mà tôi đang gặp phải. Khi tôi đã hoàn thành điều đó, tôi có thể sẽ dính vào một hạt nhân cuộn bằng tay cho đến khi lỗi được khắc phục trong bản phân phối của tôi (Debian), tại thời điểm đó tôi sẽ trở lại hạt nhân của họ một lần nữa.

3
jmtd

Chủ đề này đã cũ và vẫn còn hiệu lực ngày hôm nay như khi câu hỏi được hỏi!

Câu trả lời là: Bạn biên dịch kernel linux theo lựa chọn của bạn theo nhu cầu và yêu cầu của bạn.

Nhiều kịch bản có giá trị:

  1. Bạn là một kỹ sư và yêu cầu bản dựng của bạn phải đáp ứng các yêu cầu/yêu cầu về hiệu suất và bảo mật cho hệ thống của bạn, bạn biên dịch lại để đáp ứng và/hoặc vượt qua các tiêu chí đã chỉ định.

  2. Bạn là người dùng bình thường và có một hệ thống cũ mà bạn muốn tiếp tục miễn là bạn có thể, bạn biên dịch lại để thêm/xóa các thành phần để giữ cho hệ thống cũ của bạn được tối ưu hóa.

  3. Bạn là người dùng bình thường với phần cứng nhanh nhất mới nhất và nó có quá nhiều bộ nhớ/RAM. Không cần biên dịch lại nhưng bạn vẫn có thể nếu bạn muốn tìm hiểu thêm một chút về hệ thống của mình.

  4. Bạn chỉ muốn giống như một người dùng Microsoft và/hoặc Mac hàng ngày, không biên dịch lại và chỉ đi với các bản cập nhật từ bản phân phối ngược dòng của bạn.

  5. Giữ các kịch bản sắp tới :-)

Không giống như người dùng Mac/Windows, những gì Linux cung cấp là sự lựa chọn. Sự lựa chọn để làm cho nó dễ dàng hoặc tối ưu hóa hệ thống theo yêu cầu của bạn.

2
user4565

Một trường hợp khác ngoài nhiều trường hợp được đề cập ở đây vì có các hạt nhân được biên dịch tùy chỉnh là thiết lập môi trường khởi động mạng chuyên dụng trong đó việc tải mô-đun là không khả thi và bạn phải chuyển các hạt nhân làm việc hoàn toàn cho các máy cụ thể cho các tác vụ cụ thể.

1
Caleb

Tôi ngạc nhiên khi không ai đề cập đến lý do này để biên dịch kernel tùy chỉnh:

bởi vì bạn muốn sử dụng một trình biên dịch C/c ++ khác. GCC là khá tốt để biên dịch kernel linux. Nhưng có rất nhiều trình biên dịch vượt trội ngoài kia! Tối ưu hóa của GCC chậm hơn một chút so với trình biên dịch C/C++ của Intel. Và Intel cung cấp các thư viện nguyên thủy hiệu năng và công cụ vtune, cả hai đều không thể thiếu trong việc tạo ra một nhân linux hiệu năng cao. Bạn chỉ có thể đi xa hơn với GCC và G ++. Thực tế không có vấn đề gì bạn làm kết quả sẽ bị giới hạn bởi trình biên dịch. Vì vậy, tôi sử dụng trình biên dịch hiệu năng và thư viện Intel Nó hơi lớn - tải xuống 1,5 GB, nhưng điều đó mang lại một chút ý tưởng về tất cả những gì có trong một trình biên dịch tốt.

Trình biên dịch C/C++ của Intel có sẵn miễn phí cho sử dụng phi thương mại. Nhưng nó dễ dàng hơn để google trang tải xuống trình biên dịch Intel c ++ phi giấy phép để tìm kiếm trang web của Intel. Tôi không thường sử dụng GCC/G ++ cho bất cứ điều gì. Và bạn không cần phải là một lập trình viên. Bạn chỉ cần đặt môi trường của mình và thay đổi hai dòng trong tệp tạo để trỏ đến trình biên dịch của Intel.

Sau đó, bạn có thể nhận được một số tốc độ nghiêm trọng!

1
SwanSword

Đối với hầu hết các sử dụng hạt nhân chung là tốt cho hầu hết mọi phần cứng. Ngoài ra, chúng thường chứa (ed) các bản vá dành riêng cho phân phối để biên dịch kernel của bạn có thể (có thể) gây ra sự cố.

Các cộng hưởng để biên dịch kernel của riêng bạn là:

  • Bạn đang sử dụng bản phân phối dựa trên nguồn nên không có kernel 'generic'
  • Bạn là nhà phát triển kernel và bạn phát triển kernel
  • Bạn phải tùy chỉnh kernel chẳng hạn cho thiết bị nhúng với ổ cứng rất hạn chế
  • Một số trình điều khiển không được biên dịch trong (trường hợp rất hiếm)
  • Bạn muốn vá kernel bạn biết bạn đang làm gì
  • Bạn muốn học cách biên dịch kernel

Nếu tôi không sử dụng bản phân phối dựa trên nguồn, tôi sẽ không biên dịch kernel.

1
Maciej Piechotka