จะเริ่มเปลี่ยนซอร์สโค้ด linux เพื่อสร้างระบบปฏิบัติการได้อย่างไร [ปิด]


15

ฉันได้ยินมาว่าเราสามารถปรับแต่ง Linux (พูด Ubuntu) ได้ตามที่เราต้องการโดยการเปลี่ยนซอร์สโค้ดและสามารถสร้างระบบปฏิบัติการใหม่ได้ทั้งหมด ฉันได้ดาวน์โหลดซอร์สโค้ดของเคอร์เนล linux จากเว็บไซต์ www.kernel.org แต่เมื่อเห็นแล้วฉันไม่สามารถเข้าใจอะไรได้เลยมีไดเรกทอรีหลายไฟล์อยู่ในไฟล์ (อย่างที่ฉันคิดว่าจะมีโปรแกรมขนาดใหญ่หนึ่งโปรแกรม) ฉันต้องการทำโครงการวิทยาลัยและฉันต้องการมีส่วนร่วมกับ Linux โดยทำการเปลี่ยนแปลงที่จำเป็น แต่หลังจากถามคำถามนี้ในเว็บไซต์บางแห่งพวกเขากล่าวว่าซอร์สโค้ด Linux มีขนาดใหญ่มาก คุณอาจลองมินิกซ์ ตอนนี้ฉันสับสนมาก

โปรดให้คำแนะนำพร้อมรายละเอียดเกี่ยวกับวิธีการเริ่มต้นการเดินทางครั้งนี้ (การเปลี่ยนซอร์สโค้ดเพื่อปรับแต่ง Linux) ด้วยขั้นตอนที่จำเป็นพร้อมกับหนังสือระดับเริ่มต้นบางเล่ม


เป้าหมายของคุณคืออะไร คุณต้องการมีส่วนร่วมอย่างไร?
Spidey

เพื่อให้ระบบปฏิบัติการที่กำหนดเองของตัวเองโดยการเปลี่ยน (Linux) รหัสแหล่งที่มาของ ... และเพื่อเรียนรู้วิธีการทำงานและระบบปฏิบัติการเพื่อความสนุกสนานยัง
dubex

เคอร์เนลชื่อ Linux ไม่ใช่ Gnu / Linux (Ubuntu, Debian, RedHat, Suse และdistrowatch.comเป็นต้น) อย่างไรก็ตามคนส่วนใหญ่ใช้คำว่า Linux หมายถึง GNU / Linux + X11 อย่างไรก็ตาม Linux เป็นเพียงหนึ่งในเมล็ดที่สามารถใช้กับ GNU และระบบปฏิบัติการอื่น ๆ หากคุณต้องการแก้ไข Ubuntu หรือคล้ายกันนั่นไม่เหมือนกับการปรับเปลี่ยนเคอร์เนลชื่อ Linux
ctrl-alt-delor

คำตอบ:


29

ยินดีต้อนรับสู่ unix.stackexchange.com!

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

เกี่ยวกับขอบเขตของโครงการ: การเขียนระบบปฏิบัติการไม่ใช่เรื่องง่าย! แม้แต่ระบบปฏิบัติการขนาดเล็กเช่นมินิกซ์ก็เป็นสิ่งที่ค่อนข้างซับซ้อน! เพื่อให้แนวคิดเกี่ยวกับ Linux คิดถึงโปรแกรม C ที่คุณเขียนมา หลักสูตรมหาวิทยาลัยโดยเฉลี่ยมีแนวโน้มที่จะมี C สองสามพันบรรทัด ฉันคิดว่าโครงการปีสุดท้ายของฉันมีประมาณ 30-35,000 บรรทัดของ C ++ เคอร์เนล Linux มีรหัส C ประมาณ 13,000,000 บรรทัด

เหตุใดจึงเป็นทั้งหมดในไฟล์แยกกัน โครงการขนาดใหญ่จะถูกเก็บไว้ในไฟล์แยกต่างหากสำหรับเหตุผลด้านลอจิสติกและการปฏิบัติ ลองพิจารณาโหลดไฟล์ 13,000,000 บรรทัดลงในเครื่องมือแก้ไข! ก่อนที่จะจัดการโครงการขนาดใหญ่เช่น Linux คุณควรฝึกฝนทักษะ C ของคุณอย่างแน่นอนจนถึงจุดที่คำถาม 'ทำไมไฟล์หลายไฟล์' ตอบตัวเอง คุณควรจะสามารถอ่านรหัส Cได้ด้วยไม่ใช่แค่เขียนมัน (ยากกว่าที่คิดไว้ในตอนแรก)

คุณควรมีความเชี่ยวชาญใน C แน่นอนเคอร์เนลดูแลโดยคนหลายพันคนและคุณจะถูกเรียกให้เข้าใจสำนวน C ส่วนตัวของแต่ละคน (ได้รับภายใต้มาตรฐานการเข้ารหัสเคอร์เนลที่เข้มงวด แต่ยัง - ทุกคนมี รูปแบบการแก้ปัญหาของตนเอง)

หลังจากที่คุณได้รับ C Fu ให้แน่ใจว่าคุณเข้าใจระบบปฏิบัติการ สิ่งนี้จะช่วยให้คุณเข้าใจรหัส Linux บางตัวนั้นไม่จำเป็น เคอร์เนลที่เหมาะสมนั้นค่อนข้างเล็ก! มันคืออะไร bloats:

  • ไดรเวอร์ฮาร์ดแวร์นับพันสำหรับอุปกรณ์ต่าง ๆ
  • เลเยอร์ที่เป็นนามธรรมสำหรับคลาสอุปกรณ์ต่างๆเพื่อทำให้ API และการเขียนไดรเวอร์ง่ายขึ้น เช่นเรามี VFS สำหรับระบบไฟล์เลเยอร์กิจกรรมสำหรับอุปกรณ์อินพุตและอื่น ๆ
  • จำนวนโค้ดและไฟล์ที่คอมไพล์ด้วยเงื่อนไขที่น่าตกใจสำหรับสถาปัตยกรรมต่างๆที่รัน Linux (ไม่ใช่เครื่อง Linux ทุกเครื่องที่เป็น Intel PC และบางอันก็แตกต่างจากที่คุณคาดไว้อย่างไม่น่าเชื่อ ) เคอร์เนลต้องจัดการกับความแตกต่างเหล่านี้และนั่นหมายถึงรหัสเพิ่มเติม

ปัญหาหนึ่งที่คุณจะพบได้ทันทีคือส่วนประกอบเหล่านี้ไม่สามารถถอดปลั๊กเปลี่ยนและเสียบกลับเข้าด้วยกันได้อีก มีความสัมพันธ์กันมากมาย กล่าวโดยสรุปการเปลี่ยนบิตของเคอร์เนลนั้นยุ่งยาก

เหตุผลที่คนแนะนำ Minix ให้คุณนั้นง่าย: มันเป็นระบบปฏิบัติการเต็มรูปแบบ แต่ไม่ได้รับภาระจากความต้องการของระบบที่ซับซ้อนเหมือน Linux รหัสมีขนาดเล็ก แต่ยังมีฟังก์ชั่นเต็มรูปแบบ ท้ายที่สุดแล้ว Linux รุ่นแรกได้รับแรงบันดาลใจจาก Minix

แน่นอนว่า Minix มีการสนับสนุนฮาร์ดแวร์น้อยลงในทุกวันนี้ แล้วอะไรล่ะ นั่นเป็นประโยชน์! คอมพิวเตอร์ยุคใหม่เสมือนจริงได้เป็นอย่างดี ใช้เพื่อประโยชน์ของคุณ: VM เพื่อเรียกใช้ Minix เบามากมันจะทำให้การพัฒนาเป็นไปอย่างไม่ราบรื่น

หากโครงการของคุณคือการสร้างระบบปฏิบัติการคุณสามารถทำได้แย่กว่าเริ่มต้นด้วยการศึกษา Minix คุณอาจต้องการซื้อและอ่านหนังสือ Minix ที่เขียนขึ้นพร้อมกับ ' ระบบปฏิบัติการสมัยใหม่ของ Andrew Tanenbaum '

นอกจากนี้คุณควรกำหนดเป้าหมายของคุณและกำหนดเงื่อนไขของคุณได้อย่างแม่นยำ หากคำจำกัดความของระบบปฏิบัติการของคุณเป็นของ Microsoft (ระบบปฏิบัติการที่มี GUI และชุดซอฟต์แวร์แบบเต็ม) คุณอาจอยู่ในโครงการที่ยาวมาก! ผู้คนหลายแสนคนทำงานกันมาตั้งแต่ทศวรรษ 1960 เพื่อนำพวกเราไปสู่จุดที่เราเป็นอยู่ตอนนี้

ในที่สุดจำการต่อสู้ของนักวิทยาศาสตร์คอมพิวเตอร์: ' ไม่ต้องพลิกโฉมพวงมาลัย! '(เราชอบทำข้อยกเว้นเมื่อเรียนรู้และเพื่อความสนุก :))


1
หากว่า [ลิงค์] (www.linuxfromscratch.org) เติมเต็มความฝันของฉัน ... ขอบคุณสำหรับการแสดงความสนใจคำถามของฉัน
dubex

LFS นั้นยอดเยี่ยมสำหรับการเรียนรู้วิธีการที่ userspace ของระบบ POSIX ทำงาน เท่าที่ฉันรู้ว่ามันเป็นลินุกซ์ที่เฉพาะเจาะจงดังนั้นจึงไม่ได้เกี่ยวข้องกับการปรับเปลี่ยนเคอร์เนลในทิศทางที่ผิดปกติ แต่นอกเหนือจากนี้เพราะเมื่อเคอร์เนลของคุณย้ายออกจาก POSIX พื้นที่ผู้ใช้จะเข้ากันไม่ได้และจะต้องมีการย้ายพอร์ตหรือนำไปใช้ใหม่
Alexios

ขออภัยที่เข้าใจผิด ... แต่ฉันไม่ได้หมายความว่าฉันจะสร้างเคอร์เนลของตัวเอง (เพราะฉันไม่ค่อยเก่ง :)) ฉันต้องการเปลี่ยนแปลงซอร์สโค้ดที่สามารถดูแตกต่างจากผู้อื่นและดูเหมือนว่าเป็นความคิดสร้างสรรค์ของฉันเอง ตัวอย่างเช่นฉันต้องการให้ภาพเคลื่อนไหวบางประเภทพร้อมเสียง (ที่ฉันทำ) บนหน้าจอเมื่อ linux (บอกว่า Ubuntu) กำลังบูทด้วยซอฟต์แวร์จดจำเสียงที่ติดตั้งอยู่ ขอขอบคุณอีกครั้ง
dubex

1
ในกรณีนี้คุณกำลังสร้างลีนุกซ์ของคุณเองไม่ใช่ระบบปฏิบัติการอื่น LFS เป็นเครื่องมือที่เหมาะสมสำหรับสิ่งนั้น โชคดี!
Alexios

1
@Alexios คำตอบที่ดีมากและเป็นคำอธิบายขอบคุณ
0xAF

7

ตรวจสอบโครงการLinux From Scratch ตามชื่อที่แนะนำมันมีรายละเอียดทั้งหมดที่จำเป็นในการสร้างการกระจาย Linux ของคุณ


4

ฉันคิดว่าสิ่งแรกที่คุณต้องกำหนดคือ "การเปลี่ยนแปลงที่คุณต้องการนำไปใช้กับระบบปฏิบัติการ" คืออะไร จนกว่าคุณจะตัดสินใจสิ่งนี้คุณจะไม่ไปไหนเลย ไม่มี "เส้นทางเดียว" ของการเรียนรู้

นอกจากนี้ฉันคิดว่าคุณควรกำหนดความหมายของระบบปฏิบัติการให้ดีขึ้น ส่วนใหญ่ (ส่วนสำคัญ) ของซอร์สโค้ด Ubuntu อยู่นอก Linux Linux เป็นเพียงเคอร์เนล (บางครั้งเรียกว่าระบบปฏิบัติการโดยเฉพาะในแวดวงวิชาการดังนั้นความสับสน) และดังนั้นจึงมีงาน"ง่าย"ของ:

  • การจัดการทรัพยากร
  • การสื่อสารกับฮาร์ดแวร์

การเปลี่ยนแปลงอื่น ๆ จะเกิดขึ้นในระดับที่แตกต่างกันไม่ว่าจะเป็นยูทิลิตี้ผู้ใช้หลัก (มักเรียกว่าutils ), GUI, แอพพื้นฐานของ distro เป็นต้น

อย่างไรก็ตามหากคุณยังคงเรียนรู้วิธีแฮ็คเคอร์เนลคุณควรเริ่มด้วยคำถามนี้คำถามที่โหวตมากที่สุดในเว็บไซต์นี้)


ขออภัยที่ไม่เฉพาะเจาะจงในการถามคำถาม ... แต่ในความเป็นจริงฉันไม่มีความรู้เกี่ยวกับรายละเอียดทั้งหมดนี้ ที่จริงแล้วฉันต้องการภาพเคลื่อนไหวบางชนิด (พร้อมเสียง) บนหน้าจอเมื่อ linux (พูดว่า Ubuntu) กำลังบูท ... โปรดแจ้งความคิดเกี่ยวกับการสำรวจทุกฟิลด์นี้และวิธีการเคลื่อนไหวเพิ่มเติมในฟิลด์เฉพาะ (พูด gui กับการสื่อสารกับฮาร์ดแวร์ ) ...
dubex

@dubex เริ่มต้นด้วยplymouthและดูที่ห้องสมุด Linux สำหรับเล่นเสียง SDL_mixer อาจเป็นเรื่องง่าย
sourcejedi

2

นี้อาจจะมีบิตข้างจุด แต่ถ้าคุณต้องการเรียนรู้เกี่ยวกับลินุกซ์เคอร์เนลและเริ่มที่จะพัฒนามันจริงๆคุณควรมีลักษณะเป็นเคอร์เนลมือใหม่ มันเป็นเว็บไซต์ที่ให้คุณเข้าใจกลไกเคอร์เนล (อย่างที่ Alexios ทำในแบบที่ยอดเยี่ยม) แต่ให้คุณเลือกงานเล็ก ๆ เพื่อจัดการ (เรียกได้ว่าเป็นภารโรงเคอร์เนล) มันเป็นวิธีที่ยอดเยี่ยมในการเรียนรู้และฉันขอแนะนำอย่างมาก!

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