Có thể thay đổi kernel trong hệ thống UNIX / Linux không?


16

Tôi muốn biết liệu có thể thay đổi hạt nhân hay không, ví dụ, thay thế nhân Linux của Fedora thành nhân của FreeBSD.

Bây giờ, đã có Debian GNU / kFreeBSD . Tôi có thể tùy chỉnh bản phân phối Linux để chứa kernel BSD không?


3
MacOSX là một hạt nhân dựa trên BSD hoàn toàn dựa trên POSIX. Và không giống như Linux, người tuyên bố không phải là một hệ thống Unix, OSX IS là một hệ thống Unix (được chứng nhận bởi Nhóm mở sở hữu thương hiệu Unix). Bạn không thể chạy các ứng dụng Linux trên Mac và bạn không thể chạy các ứng dụng Mac trên Linux mặc dù cả hai đều chạy trên CPU Intel (tốt, về mặt kỹ thuật AMD64)
slebetman

Câu trả lời:


21

Không, mỗi hạt nhân thực hiện các tính năng riêng theo cách riêng của mình. Có một lượng lớn khả năng tương thích POSIX nhưng một khi bạn thoát khỏi điều đó thì các tệp thực thi cần phải được biên dịch với các cơ chế kernel đã có. Nhiều dự án chứa mã nguồn chỉ được biên dịch nếu bạn nói rõ ràng rằng bạn đang biên dịch cho FreeBSD hoặc Linux. Đó chính là những gì kFreeBSD là. Các công cụ hỗ trợ kernel FreeBSD nhưng chúng phải được biên dịch cho nó.

Ví dụ: nếu bạn cố gắng sử dụng epoll_createtrên FreeBSD, mọi thứ sẽ không hoạt động như mong đợi.

Tất nhiên, bạn có thể biên dịch chéo các công cụ từ kiểu LFS của hệ thống BSD nhưng điều đó có thể sẽ mất mãi mãi. Không đơn giản như chỉ cần biên dịch một kernel mới.


1
Tôi muốn nghe quan điểm của bạn về kernel MOOL , đã có một HĐH điều chỉnh nó, BOSS linux.
Sri Harsha Chilakapati 7/12/2016

Sẽ rất thú vị khi xem những gì đến từ nó nhưng tôi chưa nhìn vào nó đủ để nói bất cứ điều gì thông minh về nó.
Bratchley 7/12/2016

1
Vì vậy, những gì bạn nói là, nếu tôi muốn tạo một hệ thống BSD dựa trên người dùng GNU, tôi phải biên dịch lại tất cả phần mềm GNU cho nhân BSD. Tôi có đúng không?
Chuyển

1
Bất cứ điều gì sử dụng Linux-isms sẽ là khá nhiều thứ. Có thể dễ dàng hơn để bắt đầu với kFreeBSD và đi từ đó.
Bratchley

16

FreeBSD không sử dụng nhân Linux - như tên gọi của nó, nó sử dụng nhân BSD.

Có thể thay thế một nhân Linux bằng một nhân Linux khác (một trong số đó bạn tự xây dựng hoặc một nhân bạn đã trích xuất từ ​​một bản phân phối). Xin lưu ý rằng các chương trình không gian người dùng trong bản phân phối của bạn có thể phụ thuộc vào các tính năng hạt nhân cụ thể được biên dịch và có thể không hoạt động đúng nếu bạn chạy chúng trên kernel được xây dựng mà không có các tính năng đó. Ví dụ, một bản phân phối dựa trên systemd sẽ yêu cầu các nhóm trong kernel.

Đối với ví dụ bạn đề cập, có một bản phân phối GNU có thể được xây dựng cho nhân Linux hoặc cho nhân BSD. Trong nhiều trường hợp, có sự khác biệt về thời gian biên dịch (ví dụ #ifdef) giữa các chương trình được biên dịch cho cả hai, ngay cả khi các hạt nhân quảng cáo cùng một ABI. Tối thiểu, các thư viện cấp thấp như Thư viện C Runtime phải chứa các ABI hạt nhân khác nhau.


Boost để đề cập đến việc thay đổi thư viện C Runtime.
Joshua

2

Kernel là phần độc lập và được thay thế thường xuyên trong quá trình cập nhật hệ điều hành. Một số trình điều khiển độc quyền (NVIDIA, v.v.) có các tập lệnh cài đặt vá trình điều khiển vào nguồn kernel, xây dựng kernel đó và thay thế kernel hiện tại bằng kernel. Do đó, nếu bạn phát triển phiên bản kernel của riêng mình có thể thực hiện tất cả các chức năng cần thiết, thì đó không phải là vấn đề lớn để đưa nó vào và để lại phần còn lại của hệ điều hành. Tuy nhiên, hầu hết các "nhân mới" như vậy thường được lấy từ phiên bản chính thức gần đây.

Hạt nhân Solaris đã được chuyển theo cách này ở một mức độ nào đó, dẫn đến OpenSolaris chạy môi trường Gnome.

Tuy nhiên, việc đặt kernel hoàn toàn khác là nỗ lực đáng kể, vì các giao diện phải được bắc cầu. Điều này có thể yêu cầu nhiều lập trình C và không chỉ là về tập lệnh xây dựng.

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.