ฉันจะได้ประโยชน์อะไรจากการรวบรวมเคอร์เนล Linux ด้วยตัวเอง? มีประสิทธิภาพที่คุณสามารถสร้างโดยการปรับแต่งฮาร์ดแวร์ของคุณหรือไม่?
ฉันจะได้ประโยชน์อะไรจากการรวบรวมเคอร์เนล Linux ด้วยตัวเอง? มีประสิทธิภาพที่คุณสามารถสร้างโดยการปรับแต่งฮาร์ดแวร์ของคุณหรือไม่?
คำตอบ:
ในใจของฉันประโยชน์เดียวที่คุณได้รับจากการคอมไพล์เคอร์เนล linux ของคุณคือ:
คุณเรียนรู้วิธีการรวบรวมเคอร์เนล linux ของคุณเอง
ไม่ใช่สิ่งที่คุณต้องทำเพื่อความเร็ว / หน่วยความจำ / xxx มากกว่านี้ มันเป็นสิ่งที่มีค่าที่ต้องทำถ้านั่นคือช่วงที่คุณรู้สึกว่าคุณกำลังอยู่ในช่วงพัฒนา หากคุณต้องการมีความเข้าใจที่ลึกซึ้งยิ่งขึ้นเกี่ยวกับสิ่งที่ "โอเพ่นซอร์ส" ทั้งหมดเกี่ยวกับสิ่งที่และส่วนต่าง ๆ ของเคอร์เนลคุณควรจะทำ หากคุณเพียงแค่ต้องการเพิ่มความเร็วในการบู๊ตของคุณภายใน 3 วินาทีถ้างั้น ... อะไรคือประเด็น ... ไปซื้อ ssd หากคุณอยากรู้ถ้าคุณต้องการเรียนรู้การรวบรวมเคอร์เนลของคุณเองเป็นความคิดที่ดีและคุณอาจจะได้รับประโยชน์มากมาย
ด้วยเหตุผลดังกล่าวมีเหตุผลบางประการที่เหมาะสมที่จะคอมไพล์เคอร์เนลของคุณเอง (อย่างที่หลายคนได้ชี้ให้เห็นในคำตอบอื่น ๆ ) โดยทั่วไปสิ่งเหล่านี้เกิดขึ้นจากความต้องการเฉพาะที่คุณมีสำหรับผลลัพธ์เฉพาะเช่น:
ปัญหาอยู่ที่การคิดว่ามีประโยชน์ที่แท้จริงในการรวบรวมเคอร์เนลของคุณเองเมื่อทุกอย่างทำงานได้อย่างที่ควรจะเป็นและฉันไม่คิดว่าจะมี แม้ว่าคุณจะสามารถใช้เวลาหลายชั่วโมงในการปิดการใช้งานสิ่งที่คุณไม่ต้องการและปรับแต่งสิ่งต่าง ๆ ที่ปรับเปลี่ยนได้ แต่ความจริงก็คือเคอร์เนล linux ได้รับการปรับจูนอย่างดีแล้วสำหรับสถานการณ์ผู้ใช้ส่วนใหญ่
ผู้ใช้ส่วนใหญ่ไม่จำเป็นต้องคอมไพล์เคอร์เนลของตัวเองการแจกจ่ายของพวกเขาได้ทำเพื่อพวกเขาแล้ว โดยปกติแล้วการแจกแจงจะรวมชุดของแพตช์เพื่อรวมกับบางส่วนของวิธีการทำงานของการแจกจ่าย, backport ของไดรเวอร์อุปกรณ์และการแก้ไขจากเวอร์ชั่นใหม่ แต่เคอร์เนลหรือฟีเจอร์รุ่นที่ยังไม่เผยแพร่ซึ่งเป็นผู้บุกเบิกกับผู้ใช้
เมื่อคุณรวบรวมเคอร์เนลของคุณเองคุณมีตัวเลือกสองทางคุณสามารถรวบรวมเคอร์เนล Linus Torvalds อย่างเป็นทางการซึ่งจะไม่รวมแพตช์หรือการปรับแต่งใด ๆ ที่เพิ่มโดยการกระจายของคุณ (ซึ่งอาจดีหรือไม่ดี) หรือ ใช้เครื่องมือสร้างแจกจ่ายของคุณเพื่อสร้างเคอร์เนลของคุณเอง
เหตุผลที่คุณอาจต้องการสร้างเคอร์เนลของคุณรวมถึง:
นักพัฒนาหลายคนใช้เพื่อสร้างเคอร์เนลเวอร์ชันที่กำหนดเองสำหรับระบบฝังตัวหรือกล่องเซ็ตท็อปที่พวกเขาต้องการไดรเวอร์อุปกรณ์พิเศษหรือพวกเขาต้องการที่จะลบการทำงานที่พวกเขาไม่ต้องการ
bisect
ไอเอ็นจีเพื่อค้นหาว่ามีการนำข้อผิดพลาดออกไปยัง
การคอมไพล์เคอร์เนลด้วยตัวคุณเองจะช่วยให้คุณรวมเฉพาะส่วนต่าง ๆ ที่เกี่ยวข้องกับคอมพิวเตอร์ของคุณเท่านั้นซึ่งจะทำให้มันเล็กลงและเร็วขึ้นโดยเฉพาะอย่างยิ่งในเวลาบูต เมล็ดทั่วไปต้องมีการรองรับฮาร์ดแวร์ให้มากที่สุดเท่าที่จะทำได้ ในเวลาบูตพวกเขาตรวจพบว่าฮาร์ดแวร์ใดที่ติดอยู่กับคอมพิวเตอร์ของคุณและโหลดโมดูลที่เหมาะสม แต่ต้องใช้เวลาในการทำสิ่งนั้นและพวกเขาจำเป็นต้องโหลดโมดูลแบบไดนามิกแทนที่จะมีการอบโค้ดลงในเคอร์เนลโดยตรง ไม่มีเหตุผลที่จะให้เคอร์เนลของคุณรองรับ 400 ซีพียูที่แตกต่างกันเมื่อมีเพียงหนึ่งในคอมพิวเตอร์ของคุณหรือเพื่อสนับสนุนเมาส์บลูทู ธ ถ้าคุณไม่มีมันเป็นพื้นที่ว่างเปล่าทั้งหมดที่คุณสามารถเพิ่มได้ฟรี
ฉันไม่อยากเชื่อเลยว่าคำตอบที่ยอมรับได้เริ่มต้นขึ้นแล้วโดยบอกว่า "ไม่ใช่สิ่งที่คุณต้องทำเพื่อความเร็ว / หน่วยความจำ / xxx มากกว่านี้"
นี่เป็นเท็จโดยสิ้นเชิง ฉันสร้าง Kernels ของฉันเองเป็นประจำเพื่อลบโค้ดที่ไม่จำเป็นรวมถึงการเพิ่มประสิทธิภาพของรหัสซึ่งส่วนใหญ่เกี่ยวข้องกับฮาร์ดแวร์ ตัวอย่างเช่นฉันเรียกใช้ฮาร์ดแวร์รุ่นเก่าบางรุ่นและสามารถเพิ่มประสิทธิภาพการทำงานด้วยการเปิดใช้งานไดรเวอร์เคอร์เนลที่ไม่ค่อยเปิดใช้งานเช่นการสนับสนุนชิปเซ็ต HPT36x สำหรับ MoBos รุ่นเก่าที่มีบิวด์อินนี้
อีกตัวอย่างหนึ่งคือ BIG SMP ภายใต้ Slackware คือค่าเริ่มต้นและใน Dell 2800 จะใช้การพิมพ์แบบเท้าขนาดใหญ่เพื่อเรียกใช้สิ่งต่าง ๆ เช่น GFSD (ไม่ใช่โมดูลเคอร์เนล) ที่ยังใช้ CPU ticks สำหรับสิ่งที่ฉัน ไม่ต้องการ เช่นเดียวกันสำหรับ NFSD และ catch-all อื่น ๆ ที่ทำให้ทุกคนพอใจซึ่งเป็นเรื่องที่ดีถ้าคุณแค่พยายามเอาลีนุกซ์มาใส่ในกล่องและวิ่ง แต่ถ้าคุณสนใจ "ความเร็ว / หน่วยความจำ / xxx อะไรก็ตาม" สิ่งเหล่านี้สำคัญ .
กล่องผลิตของฉันทั้งหมดเป็นเมล็ดที่กำหนดเอง ถ้าฉันใช้ฮาร์ดแวร์ทั่วไปเช่นฮาร์ดแวร์ Dell series (2800, 2850, 2900, ฯลฯ ... ) มันเป็นเรื่องง่ายที่จะคัดลอกไฟล์. config ของเคอร์เนลไปยังแต่ละกล่องและรวบรวมเคอร์เนลและติดตั้ง
นี่คือบางสถานการณ์ที่การรวบรวมเคอร์เนลของคุณจะเป็นประโยชน์กับคุณ:
เคอร์เนลที่ปิดใช้งานการโหลดโมดูลมีความปลอดภัยมากขึ้น สิ่งนี้จะทำให้คุณต้องเลือกโมดูลที่คุณรู้ว่าคุณต้องการและรวมไว้เป็นส่วนหนึ่งของเคอร์เนลซึ่งต่างจากการรวบรวมเป็นโมดูล
การปิดใช้งานการสนับสนุน / dev / kmem หรือทำให้พิการด้วยตัวเลือกคอมไพเลอร์ที่เหมาะสมเป็นสิ่งที่ดีสำหรับความปลอดภัย ฉันคิดว่า distros ส่วนใหญ่ทำสิ่งนี้โดยปริยาย
ฉันไม่ต้องการใช้ initrd เมื่อเป็นไปได้ การปรับแต่งเคอร์เนลของคุณให้เป็นฮาร์ดแวร์ที่บู๊ตจากการกำจัด initrd
บางครั้งรุ่นเคอร์เนลในภายหลังจะมีคุณสมบัติที่คุณต้องการ ฉันจำได้เมื่อฉันเริ่มใช้ Debian ครั้งแรกมันใช้ 2.4 เมล็ด แต่ฉันต้องการ 2.6 เคอร์เนลสำหรับการสนับสนุน udev
การปิดใช้งานโปรโตคอลเครือข่าย / ตัวเลือกที่คุณไม่ต้องการสามารถเพิ่มความเร็ว TCP / IP ได้
การปิดใช้งานตัวเลือกที่คุณไม่จำเป็นต้องลดขนาดหน่วยความจำของเคอร์เนลซึ่งมีความสำคัญในสภาพแวดล้อม RAM ต่ำ เมื่อคุณใช้ระบบ RAM 256MB เป็นเราเตอร์สิ่งนี้จะช่วย
ฉันค้นหาอุปกรณ์ "tty" ทั้งหมดใน / dev สร้างความรำคาญให้กับระบบที่ฉันมักจะเข้าสู่ระบบผ่านทางอนุกรมหรือ ssh เท่านั้น
การคอมไพล์เคอร์เนลของคุณเองช่วยให้คุณมีส่วนร่วมในกระบวนการพัฒนาเคอร์เนลไม่ว่าจะเป็นเรื่องง่าย ๆ เช่นการจัดหา ID อุปกรณ์ PCI / USB สำหรับไดรเวอร์ที่มีอยู่ซึ่งอาจทำให้อุปกรณ์รุ่นใหม่ทำงานเพื่อคุณ การพัฒนาเคอร์เนล
นอกจากนี้ยังช่วยให้คุณสามารถทดสอบเมล็ดพัฒนาบนฮาร์ดแวร์ของคุณและให้ข้อเสนอแนะถ้าคุณสังเกตเห็นการถดถอยใด ๆ สิ่งนี้จะเป็นประโยชน์อย่างยิ่งต่อคุณและผู้อื่นหากคุณมีฮาร์ดแวร์ที่ไม่ธรรมดา หากคุณรอเคอร์เนล distro อาจใช้เวลาสักครู่ในการแก้ไขจากรายงานปัญหาของคุณเพื่อกรองลงในรีลีสเคอร์เนล distro ใหม่
ฉันเองก็ชอบที่จะรวบรวมเมล็ดของตัวเองเพื่อรวมการสนับสนุนสำหรับฮาร์ดแวร์เท่านั้นที่ฉันมี เมื่อคุณเรียกใช้ distro kernels และดูผลลัพธ์ของlsmod(8)
คุณจะเห็นโมดูลที่โหลดมากมายสำหรับฮาร์ดแวร์ที่คุณไม่มี การทำเช่นนี้อาจทำให้รายการโมดูล / proc / sys และบันทึกของคุณสกปรกเช่นเมื่อคุณกำลังค้นหาบางอย่างมันอาจถูกซ่อนอยู่ท่ามกลางเสียงรบกวน คุณไม่สามารถมั่นใจได้ 100% ว่าโมดูลเหล่านั้นไม่ได้มีส่วนทำให้เกิดปัญหาที่คุณพยายามวินิจฉัย
ฉันคำตอบของ gabe. วินาที (ความคิดเห็นของฉันยาวเกินไปดังนั้นฉันโพสต์เป็นคำตอบ)
เว้นแต่คุณจะมีจุดประสงค์พิเศษสูง (เช่นเครื่องฝังตัวการทำโปรไฟล์ความปลอดภัยที่เข้มงวด) ฉันไม่เห็นประโยชน์ในทางปฏิบัติในการรวบรวมเคอร์เนลของคุณเองนอกเหนือจากเพื่อดูว่ามันเสร็จสิ้นแล้ว โดยการตรวจสอบตัวเลือกอย่างเป็นระบบดูว่าพวกเขามีปฏิสัมพันธ์กันอย่างไรเพื่อสร้างระบบเป็นวิธีที่ดีในการทำความเข้าใจว่าระบบของคุณทำงานอย่างไร เป็นสิ่งที่น่าอัศจรรย์ที่คุณค้นพบเมื่อคุณพยายามลบส่วนประกอบที่ไม่ปรากฏว่ามีจุดประสงค์สำหรับงานที่คุณพยายามทำให้สำเร็จ
ได้รับการเตือนอย่างไร - ทำไมการกระโดดลงหลุมกระต่ายนั้นทำให้ดีอกดีใจไม่ต้องสงสัยมันจะดูดคืนและวันหยุดสุดสัปดาห์มากกว่าที่คุณคิดว่าเป็นไปได้!
ที่ทำงานเราใช้เมล็ดที่รีดด้วยมือเพื่อใช้แพทช์ที่ไม่ได้อยู่ในต้นไม้เช่น vserver และ unionfs
ที่บ้านฉันกำลังรวบรวมเมล็ดที่รีดด้วยมือเพื่อหาข้อตกลงที่แนะนำข้อผิดพลาดที่ฉันพบ เมื่อฉันทำเสร็จแล้วฉันอาจจะติดเคอร์เนลที่รีดด้วยมือจนกว่าข้อผิดพลาดจะได้รับการแก้ไขในการแจกแจงของฉัน (Debian) ที่จุดนี้ฉันจะกลับไปใช้เมล็ดของพวกเขาอีกครั้ง
กระทู้นี้มีอายุเก่าและยังคงใช้ได้วันนี้เหมือนเดิมเมื่อมีคำถามถาม!
คำตอบคือ: คุณรวบรวมเคอร์เนล linux ที่คุณเลือกตามความต้องการและความต้องการของคุณ
หลายสถานการณ์ถูกต้อง:
คุณเป็นวิศวกรและต้องการโครงสร้างของคุณเพื่อให้ได้ประสิทธิภาพและข้อกำหนดด้านความปลอดภัย / ความต้องการสำหรับระบบของคุณคุณต้องคอมไพล์ใหม่เพื่อตอบสนองและ / หรือเกินเกณฑ์ที่ระบุ
คุณเป็นผู้ใช้ปกติและมีระบบเก่าที่คุณต้องการจะดำเนินต่อไปตราบเท่าที่คุณสามารถคุณคอมไพล์ใหม่เพื่อเพิ่ม / ลบส่วนประกอบเพื่อให้ระบบเก่าของคุณได้รับการปรับให้เหมาะสม
คุณเป็นผู้ใช้ปกติที่มีฮาร์ดแวร์ที่เร็วที่สุดและมีหน่วยความจำ / RAM เพียงพอ ไม่จำเป็นต้องคอมไพล์ซ้ำ แต่คุณยังสามารถทำได้หากคุณสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับระบบของคุณอีกเล็กน้อย
คุณเพียงแค่ต้องการเป็นผู้ใช้ Microsoft และ / หรือ Mac ทุกวันอย่าคอมไพล์ใหม่และไปกับการอัปเดตจาก upstream distro ของคุณ
ให้สถานการณ์ต่อไป :-)
สิ่งที่แตกต่างจากผู้ใช้ Mac / Windows คือทางเลือกของ Linux ทางเลือกที่จะใช้ง่ายหรือปรับแต่งระบบให้เหมาะกับความต้องการของคุณ
สำหรับการใช้งานทั่วไปของเมล็ดข้าวทั่วไปนั้นดีสำหรับฮาร์ดแวร์ทุกชนิด นอกจากนี้พวกเขามักจะมีแพทช์เฉพาะการกระจาย (ed) เพื่อรวบรวมเคอร์เนลของคุณเองอาจ (อาจ) ทำให้เกิดปัญหา
reson เพื่อคอมไพล์เคอร์เนลของคุณเองคือ:
หากฉันไม่ได้ใช้ distro ที่อ้างอิงกับแหล่งข้อมูลฉันจะไม่รวบรวมเคอร์เนลเลย
อีกกรณีหนึ่งนอกเหนือจากที่กล่าวถึงในที่นี้สำหรับการรวบรวมเมล็ดแบบกำหนดเองคือการตั้งค่าสภาพแวดล้อมการบูตเครือข่ายพิเศษที่การโหลดโมดูลไม่เป็นไปได้และคุณต้องส่งเมล็ดที่ทำงานได้อย่างสมบูรณ์ไปยังเครื่องเฉพาะสำหรับงานเฉพาะ
ฉันประหลาดใจที่ไม่มีใครพูดถึงเหตุผลนี้ในการรวบรวมเคอร์เนลที่กำหนดเอง:
เพราะคุณต้องการใช้คอมไพเลอร์ C / c ++ ที่แตกต่างกัน GCC ค่อนข้างดีสำหรับการรวบรวมเคอร์เนล linux แต่มีคอมไพเลอร์ที่เหนือกว่าอย่างมากมาย! การเพิ่มประสิทธิภาพของ GCC นั้นค่อนข้างอยู่เบื้องหลังคอมไพเลอร์ C / C ++ ของ Intel และ Intel เป็นผู้จัดหาไลบรารี่พื้นฐานด้านประสิทธิภาพและเครื่องมือ vtune ซึ่งทั้งคู่ขาดไม่ได้ในการผลิตเคอร์เนลลินุกซ์ประสิทธิภาพสูง คุณสามารถเข้าถึงได้ด้วย GCC และ G ++ เท่านั้น ในทางปฏิบัติไม่ว่าคุณจะทำอะไรผลลัพธ์จะถูก จำกัด โดยคอมไพเลอร์ ดังนั้นฉันจึงใช้คอมไพเลอร์และห้องสมุดประสิทธิภาพของ Intel มันเป็นการดาวน์โหลดที่ใหญ่มาก - 1.5GB แต่นั่นก็ให้ความคิดเล็กน้อยเกี่ยวกับสิ่งที่อยู่ในคอมไพเลอร์ที่ดี
คอมไพเลอร์ C / C ++ ของ Intel มีให้บริการฟรีสำหรับการใช้ที่ไม่ใช่เชิงพาณิชย์ แต่มันง่ายกว่าที่จะ google หน้าดาวน์โหลดคอมไพเลอร์ Intel c ++ ใบอนุญาตที่ไม่ใช่เชิงพาณิชย์เพื่อค้นหาเว็บไซต์ของ Intel ฉันมักจะไม่ใช้ GCC / G ++ เพื่ออะไร และคุณไม่จำเป็นต้องเป็นโปรแกรมเมอร์ คุณเพียงแค่ตั้งค่าสภาพแวดล้อมของคุณและเปลี่ยนสองบรรทัดในไฟล์ make เพื่อชี้ไปที่คอมไพเลอร์ของ Intel
จากนั้นคุณจะได้รับความเร็วที่ร้ายแรง!
ถ้าคุณต้องการติดตั้งลีนุกซ์บนฮาร์ดแวร์ที่เฉพาะเจาะจงพูดแปลก ๆ มากกว่าDSคุณจะต้องคอมไพล์เคอร์เนลของคุณเอง
What are the pros and cons of compiling your own kernel?
Cons = ไม่ใช่เรื่องง่ายหลาย ๆ สถานการณ์ไม่มีการเพิ่มมูลค่า ข้อดี = ความปลอดภัยประสิทธิภาพถ้าคุณรู้ว่าคุณกำลังทำอะไรอุปกรณ์ NAS เช่นใช้ linux เพื่อทำให้ชิ้นส่วนของฮาร์ดแวร์ทำงานได้และมีความสามารถด้านเครือข่ายและกราฟิก