เป็นไปได้ไหมที่จะเปลี่ยนเคอร์เนลในระบบ UNIX / Linux?


16

ฉันอยากรู้ว่ามันเป็นไปได้ไหมที่จะเปลี่ยนเมล็ดตัวอย่างเช่นแทนที่เคอร์เนล Linux ของ Fedora ไปเป็น FreeBSD

ตอนนี้มีDebian GNU / kFreeBSDอยู่แล้ว เป็นไปได้ไหมที่ฉันจะปรับแต่ง distro Linux เพื่อให้มีเคอร์เนล BSD?


3
MacOSX เป็นเคอร์เนลที่ใช้ POSD ได้อย่างสมบูรณ์ตาม POSIX และแตกต่างจาก Linux ซึ่งอ้างว่าไม่ใช่ระบบ Unix OSX IS เป็นระบบ Unix (ได้รับการรับรองโดย The Open Group ซึ่งเป็นเจ้าของเครื่องหมายการค้า Unix) คุณไม่สามารถใช้ลินุกซ์ปพลิเคชันบน Mac และคุณไม่สามารถใช้ Mac ปพลิเคชันบน Linux แม้ว่าการทำงานทั้งบนซีพียู Intel (ดีในทางเทคนิค AMD64)
— slebetman

คำตอบ:


21

ไม่เคอร์เนลแต่ละตัวใช้คุณสมบัติของตัวเองในแบบของตัวเอง มีความเข้ากันได้กับ POSIX จำนวนมาก แต่เมื่อคุณได้รับสิ่งที่จำเป็นต้องใช้ในการคอมไพล์ด้วยกลไกเคอร์เนล หลายโครงการมีซอร์สโค้ดที่ได้รับการคอมไพล์เท่านั้นถ้าคุณบอกอย่างชัดเจนว่าคุณกำลังรวบรวมสำหรับ FreeBSD หรือ Linux นั่นคือสิ่งที่ kFreeBSD เป็นหลัก เครื่องมือสนับสนุนเคอร์เนล FreeBSD แต่พวกเขาจะต้องรวบรวมมัน

ตัวอย่างเช่นหากคุณพยายามใช้epoll_createสิ่ง FreeBSD จะไม่ทำงานตามที่คาดไว้

แน่นอนคุณสามารถรวบรวมเครื่องมือจากระบบ LFS สไตล์ BSD แต่นั่นอาจจะใช้ตลอดไป ไม่ง่ายเหมือนการรวบรวมเคอร์เนลใหม่


1
ฉันต้องการฟังมุมมองของคุณในเคอร์เนล MOOLมีระบบปฏิบัติการที่ปรับใช้มันแล้ว BOSS linux
— Sri Harsha Chilakapati

มันจะน่าสนใจที่จะเห็นว่ามีอะไรเกิดขึ้น แต่ฉันไม่ได้มองมันมากพอที่จะพูดอะไรที่ชาญฉลาดเกี่ยวกับมัน
— Bratchley

1
ดังนั้นสิ่งที่คุณพูดคือถ้าฉันต้องการสร้างระบบ BSD ของผู้ใช้ GNU ฉันต้องคอมไพล์ซอฟต์แวร์ GNU ทั้งหมดใหม่สำหรับเคอร์เนล BSD ฉันถูกไหม?
— เปลี่ยน

1
อะไรก็ตามที่ใช้ Linux-isms ซึ่งจะเป็นทุกอย่าง อาจจะง่ายกว่าที่จะเริ่มต้นด้วย kFreeBSD และไปจากที่นั่น
— Bratchley

16

FreeBSD ไม่ใช้เคอร์เนล Linux - ตามชื่อแนะนำมันใช้เคอร์เนล BSD

เป็นไปได้ที่จะแทนที่เคอร์เนล Linux ด้วยเคอร์เนล Linux ที่แตกต่างกัน (อย่างใดอย่างหนึ่งที่คุณสร้างขึ้นเองหรือที่คุณแยกออกมาจากการกระจาย) โปรดทราบว่าโปรแกรมพื้นที่ผู้ใช้ในการแจกจ่ายของคุณอาจขึ้นอยู่กับคุณสมบัติของเคอร์เนลที่จะรวบรวมและอาจทำงานได้ไม่ถูกต้องหากคุณใช้งานบนเคอร์เนลที่สร้างโดยไม่มีคุณสมบัติเหล่านั้น ตัวอย่างเช่นการกระจายตาม systemd จะต้องมีกลุ่ม cg ในเคอร์เนล

สำหรับตัวอย่างที่คุณพูดถึงใช่การแจกจ่าย GNU สามารถสร้างได้สำหรับเคอร์เนล Linux หรือสำหรับเคอร์เนล BSD ในหลายกรณีมีความแตกต่างเวลารวบรวม (เช่น#ifdef) ระหว่างโปรแกรมที่รวบรวมสำหรับทั้งสองแม้ว่าเมล็ดจะโฆษณา ABI เดียวกัน อย่างน้อยที่สุดไลบรารีระดับต่ำเช่น C Runtime Library ต้องรองรับเคอร์เนล ABIs ที่แตกต่างกัน


Boost กล่าวถึงการเปลี่ยนแปลง C Runtime Library
— Joshua

2

เคอร์เนลเป็นส่วนที่เป็นอิสระและจะถูกแทนที่เป็นประจำในระหว่างการอัปเดตระบบปฏิบัติการ ไดรเวอร์ที่เป็นกรรมสิทธิ์บางตัว (NVIDIA, ฯลฯ ) มีสคริปต์การติดตั้งที่แพตช์ไดรเวอร์ลงในซอร์สเคอร์เนลสร้างเคอร์เนลนั้นและแทนที่เคอร์เนลปัจจุบันด้วย ดังนั้นหากคุณพัฒนาเคอร์เนลเวอร์ชันของคุณเองที่สามารถทำงานได้ตามที่ต้องการทั้งหมดไม่น่าจะเป็นปัญหาใหญ่สำหรับการวางระบบไว้และปล่อยให้ระบบปฏิบัติการอื่น ๆ อย่างไรก็ตามส่วนใหญ่มักจะ "เคอร์เนลใหม่" มาจากรุ่นอย่างเป็นทางการล่าสุด

เคอร์เนล Solaris ได้รับการโอนย้ายด้วยวิธีนี้ในระดับหนึ่งส่งผลให้ OpenSolaris ใช้สภาพแวดล้อม Gnome

ถึงกระนั้นการใส่เคอร์เนลที่แตกต่างอย่างสิ้นเชิงก็คือความพยายามที่สำคัญเนื่องจากต้องเชื่อมต่อส่วนต่อประสาน นี่น่าจะต้องใช้การเขียนโปรแกรม C จำนวนมากและไม่ได้เป็นเพียงสคริปต์การสร้าง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.