Kernel Hacking Environment


22

ฉันทำงานในระบบปฏิบัติการฝังตัวเช่น uCOS, ThreadX ขณะที่ฉันเขียนรหัสแอพใน Linux ตอนนี้ฉันวางแผนที่จะเริ่มเรียนรู้ Linux Kernel ฉันมีคำถามสองสามข้อเกี่ยวกับสิ่งแวดล้อม

  1. อันไหนดีที่สุด distro ซึ่งมีเครื่องมือที่ใช้งานง่ายสำหรับการพัฒนาเคอร์เนล (จนถึงตอนนี้ฉันใช้ RHEL และ Fedora ในขณะที่ฉันพอใจกับสิ่งเหล่านี้มันก็ดูเหมือนว่า Ubuntu จะมีสคริปต์ที่สร้างขึ้นเพื่อการรวบรวมเคอร์เนลอย่างง่ายเช่นmake_kpkg)

  2. คุณสามารถอธิบายการตั้งค่าที่ดีที่สุดสำหรับการดีบักเคอร์เนลได้หรือไม่? ในขณะที่การดีบัก OS อื่นที่ฝังตัวฉันได้ใช้พอร์ตอนุกรมเพื่อถ่ายโอนข้อมูลความคืบหน้า JTAG และอื่น ๆ การตั้งค่าเคอร์เนล Linux ชนิดใดที่ใช้? (เครื่องทดสอบที่ใช้พอร์ตอนุกรมของฉันจะเพียงพอสำหรับความต้องการของฉันหรือไม่ถ้าใช่จะกำหนดค่าเคอร์เนลเพื่อถ่ายโอนข้อมูลไปยังพอร์ตอนุกรมได้อย่างไร) ฉันวางแผนที่จะเปลี่ยนเส้นทางข้อความเคอร์เนลไปยังคอนโซลซีเรียลซึ่งจะอ่านในแล็ปท็อปของฉัน

  3. เครื่องมือใดที่ดีที่สุดสำหรับการดีบักและติดตามรหัสเคอร์เนล ดังกล่าวก่อนหน้านี้ serial console เป็นวิธีเดียวหรือไม่ หรือมีอินเตอร์เฟสชนิด IDE / JTAG สำหรับพีซีอยู่หรือไม่


3
สำหรับ # 1, ไลนัสเองก็ใช้ Fedora ดังนั้นมันอาจจะพูดอะไรบางอย่าง ฉันไม่มีความรู้เพียงพอในหัวข้อนี้ที่จะให้คำตอบจริงๆ แต่ฉันสนใจในสิ่งที่คนอื่นพูด
jonescb

1
make_kpkg มาจาก Debian ซึ่ง Ubuntu ขึ้นอยู่กับ fav distro ของฉัน;)
บัญชีที่ถูกลบ

คำตอบ:


14

รสนิยมส่วนตัวของฉันสำหรับการพัฒนาเคอร์เนล Linux คือ Debian ตอนนี้สำหรับคะแนนของคุณ:

  1. อย่างที่คุณคิดว่า Ubuntu จะไม่นำสิ่งใหม่มาสู่เคอร์เนลเพื่อช่วยในการพัฒนา afaik นอกเหนือจากสิ่งที่มีอยู่ใน Debian แล้ว สำหรับเช่น make_kpkg เป็นคุณสมบัติ Debian ไม่ใช่ Ubuntu นี่คือลิงค์บางส่วนเพื่อให้คุณเริ่มต้นกับงานพัฒนาเคอร์เนล Linux ทั่วไปใน Debian:

  2. วิธีที่ง่ายที่สุดในการทำการดีบักเคอร์เนลคือการใช้ QEMU และ GDB ลิงก์บางอย่างเพื่อให้คุณเริ่มต้น:

    แม้ว่าคุณควรทราบว่าวิธีนี้ไม่สามารถใช้งานได้ในบางสถานการณ์เช่นการแก้ไขปัญหาฮาร์ดแวร์ที่เฉพาะเจาะจงและคุณควรใช้การดีบักแบบอนุกรมจริงและฮาร์ดแวร์จริง สำหรับสิ่งนี้คุณสามารถใช้KGDB (ใช้งานได้กับอีเธอร์เน็ตด้วย) KDBก็เป็นทางเลือกที่ดีเช่นกัน โอ้และโดยวิธีการทั้ง KGDB และ KDB ได้ถูกรวมเข้ากับเคอร์เนล Linux เพิ่มเติมเกี่ยวกับทั้งสองที่นี่ วิธีการเย็นอีกซึ่งทำงานอย่างน่าพิศวงในเรื่องที่เกี่ยวข้องที่ไม่ใช่ฮาร์ดแวร์ที่ใช้โหมดผู้ใช้ Linux Kernel การรันเคอร์เนลในโหมดผู้ใช้เป็นกระบวนการอื่น ๆ ที่ช่วยให้คุณสามารถดีบักได้เหมือนกับโปรแกรมอื่น ๆ ( ตัวอย่าง ) ข้อมูลเพิ่มเติมเกี่ยวกับโหมดผู้ใช้ Linuxที่นี่ UML เป็นส่วนหนึ่งของ Linux Kernel 2.6.0 ตั้งแต่จึงจะสามารถสร้างใด ๆ เคอร์เนลรุ่นอย่างเป็นทางการดังกล่าวข้างต้นที่เข้าสู่โหมด UML โดยทำตามขั้นตอนเหล่านี้

  3. ดูรายการที่ 2 น่าเสียดายที่ไม่มีวิธีที่ดีที่สุดในที่นี้เนื่องจากเครื่องมือ / วิธีการแต่ละอันมีทั้งข้อดีและข้อเสีย


ขอบคุณ! สำหรับการตอบกลับอย่างละเอียด BTW ฉัน intrested ในระบบย่อยและชีวภาพในเคอร์เนล การตั้งค่าแบบไหนดีที่สุดสำหรับฉัน
rajaganesh87

UML และ QEMU อาจเป็นวิธีที่จะไปเนื่องจากคุณสามารถเล่นกับระบบไฟล์ได้โดยไม่มีค่าใช้จ่าย
Shinnok

ลิงก์ที่ดีมากเพียงสิ่งเดียว สิ่งที่ฉันชอบก็คือเดเบียนเหมือนกัน แต่การพัฒนาเคอร์เนลสามารถสร้างได้ด้วย distro ใด ๆ บางทีความหย่อนอาจเป็นวิธีที่ดีที่สุดหากคุณพิถีพิถันเพราะใช้เคอร์เนลวานิลลา แต่การกำหนดค่าไม่ใช่สิ่งที่ไม่ดีคุณจะได้พบกับสิ่งที่ดีที่สุด
D4RIO

พบลิงค์ที่มีประโยชน์น้อยกว่า: [ลิงก์ 1] ( ibm.com/developerworks/linux/tutorials/l-kernelhack1/index.html ) [ลิงก์ 2] ( ibm.com/developerworks/linux/tutorials/l-kernelhack2/index html )
rajaganesh87

6

หากคุณกำลังพัฒนาสำหรับแพลตฟอร์มแบบฝังที่ไม่ได้ใช้ฮาร์ดแวร์ i386 คุณจะต้องคอมไพล์ข้าม Emdebianโครงการให้ toolchains การพัฒนาสำหรับสถาปัตยกรรมจำนวนมาก (ARM, m68k, MIPS และอื่น ๆ ) บนเครื่องพีซี (i386 หรือ amd64) ซึ่งหมายความว่าภายใต้ Debian คุณสามารถเพิ่มที่เก็บและติดตั้ง toolchain สำหรับเป้าหมายที่คุณเลือก


3

มีโพรบ JTAG อยู่ แต่สิ่งเหล่านี้ค่อนข้างแพง (และ บริษัท ที่สร้างพวกเขามีสัญญาแบบพิเศษ) วิธีที่ดีที่สุดในการดีบักโค้ดเคอร์เนลคือเริ่มใน kvm หรือ qemu ด้วย gdbserver ภายในอีมูเลชัน


ยิ่งไปกว่านั้นใช้ User Mode Linux Linux เป็นกระบวนการ userland ปกติ
vonbrand

0

โดยพื้นฐานแล้วการแจกจ่ายแบบฉีดควรทำงานได้ดีในเรื่องนี้ ใช้สิ่งที่รู้สึกสะดวกสบายมากขึ้น

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