เครื่องมือหรือวิธีการที่ดีในการทำความเข้าใจโครงสร้างของ bootloader?


9

ฉันเพิ่งค้นพบสาเหตุของข้อผิดพลาดที่น่ารังเกียจที่ฉันทำงานกับ Atmel AT91SAM9G20 SBC ที่ใช้U-bootซึ่งเป็น bootloader โอเพนซอร์ซ หลักของปัญหาคือ U-boot คาดหวังว่าฮาร์ดแวร์จะได้รับการกำหนดค่าแตกต่างจากที่ฉันสร้างขึ้นดังนั้นอุปกรณ์ลงทะเบียนบางตัวจึงถูกตั้งค่าผิดพลาด

ตอนนี้ฉันพบปัญหาแล้วฉันต้องบิด U-boot เพื่อกำหนดค่าการลงทะเบียนอย่างถูกต้อง ฉันสามารถทำสิ่งนี้สุ่มสี่สุ่มห้าได้โดยการเพิ่มโค้ดสองสามบรรทัดในตอนท้ายของโปรแกรม

สิ่งนี้นำมาสู่คำถามของฉัน: ฉันจะทราบได้อย่างไรว่า U-boot ทำงานได้อย่างมีประสิทธิภาพมากกว่าการเริ่มต้นที่ main () และอ่านเส้นทางโค้ดที่เป็นไปได้ทั้งหมดในไฟล์ทั้งหมดหรือไม่ ฉันลอง grepping ในไฟล์และดูรหัสใกล้ตัวระบุที่เกี่ยวข้อง สิ่งนี้พิสูจน์แล้วว่าไม่มีประสิทธิภาพ ดูเหมือนว่ารหัสส่วนใหญ่เป็นไดรเวอร์สำหรับระบบย่อยที่ฉันไม่สนใจ ฉันเข้าใจจริง ๆ แล้วว่า bootloader ทำงานได้ค่อนข้างดีในตอนนี้ แต่ฉันหวังว่าจะมีวิธีที่ดีกว่าวิธีที่ไร้เดียงสาของฉัน


คุณได้ลองถามรายชื่อผู้รับจดหมายของนักพัฒนา uboot แล้วหรือยัง?
sybreon

คำตอบ:


6

มีเครื่องมือ / กลยุทธ์หลายอย่างที่อาจช่วยได้:

  • เครื่องมือที่ดีกว่าสำหรับการทำความเข้าใจซอร์สโค้ด:

    • cscopeเป็นเครื่องมือสำหรับการสำรวจรหัส C เหมือน grep แต่เข้าใจไวยากรณ์
    • เครื่องกำเนิดกราฟการโทรเพื่อวาดภาพของโครงสร้างการเรียกฟังก์ชั่น
    • เฟนริสดูน่าสนใจแม้ว่าฉันจะไม่ได้ลอง
  • การวิเคราะห์รันไทม์

    • ผ่านส่วนที่น่าสนใจด้วยดีบักเกอร์และวิเคราะห์สิ่งที่เกิดขึ้น
    • ใช้คุณสมบัติการใช้เครื่องมือวัดของ gcc เพื่อเรียกสิ่งที่ดีในการเข้า / ออกของทุกฟังก์ชั่น เช่น. http://ndevilla.free.fr/etrace/
  • เขียน mini bootloader ของคุณเอง

    • ฉันมักจะพบว่าวิธีที่ดีที่สุดในการเข้าใจบางสิ่งบางอย่างคือการสร้างมันขึ้นมาใหม่ด้วยตัวเอง

น่าเสียดายที่ไม่มีสูตรเวทย์มนตร์ที่เหมาะกับทุกสิ่ง


การวิเคราะห์ @Runtime - ไม่สามารถใช้งานได้กับระบบฝังตัวแยกต่างหากโดยเฉพาะอย่างยิ่งเมื่อไม่มี OS ที่ใช้งานอยู่ในเวลาเดียวกันตัวอย่างเช่น bootloader ซึ่งเป็นสิ่งนี้
Connor Wolf

คุณยังสามารถผ่านขั้นตอนนี้ได้ด้วยดีบักเกอร์ตามที่ Joby แนะนำ มันอาจจะมีประโยชน์หรือไม่ก็ได้ขึ้นอยู่กับความซับซ้อน
Nick T

Cscope เป็นสิ่งที่ฉันจินตนาการ ฉันหวังว่าจะมีบางสิ่งที่แวววาวขึ้นไปอีกเล็กน้อย ขอบคุณ
pingswept

2

คุณกำหนดค่าเพื่อสร้างสำหรับ AT91 อย่างไร

ทรีโค้ดดูเหมือนว่าจะได้รับการออกแบบเพื่อให้สิ่งใดสถาปัตยกรรมที่เฉพาะเจาะจงอยู่ในทรี 'arch / (cpu class) / (cpu type) / ... ' ฉันพบรหัส AT91 ภายใต้ arch / arm / cpu / arm926ejs / at91 ... อะไรคือตัวแปรเฉพาะที่คุณต้องการแก้ไขไม่ได้อยู่ที่นั่นหรือ มีไม่มากนักในการค้นหาในไดเรกทอรีนั้นโดยเฉพาะอย่างยิ่งเนื่องจากไฟล์เกือบครึ่งเป็นไฟล์เฉพาะ AT91 แต่ละชุด

ขออภัยถ้ามันชัดเจน ... แต่คุณไม่ได้พูดถึงการตรวจสอบนี้

ฉันยังไม่ได้ดูทรีของ uBoot แต่โพสต์ของคุณทำให้ฉันกลัว โครงการย้อนกลับของฉันเกี่ยวข้องกับการใช้ uBoot และ Linux ใน PCB iMX233 ที่กำหนดเอง ฉันสนใจที่จะรับฟังความคิดเห็นแบบนี้ว่าสถาปัตยกรรม uBoot และสิ่งที่เฉพาะเจาะจงแตกต่างกันเพียงใดและแยกจากกันอย่างไร


ใช่ฉันใช้เวลาคุณภาพกับ arch / arm / cpu / arm926ejs / at91 / * แต่ขอบคุณสำหรับคำแนะนำ ปรากฎว่ารหัสที่ฉันกำลังมองหาอยู่ใน ROM boot ของโปรเซสเซอร์ซึ่ง Atmel เท่านั้นที่สามารถเข้าถึงได้ รายละเอียดเลือดอยู่ที่นี่: at91.com/forum/viewtopic.php/f,19732/start,0/st,0/sk,t/sd,a
pingswept

1
โดยรวมแล้วฉันประทับใจ U-boot มากทีเดียว สำหรับบอร์ดและซีพียูจำนวนมากที่รองรับก็มีการจัดการที่ดี เอกสารประกอบกระจัดกระจาย แต่ดูเหมือนจะเป็นเรื่องปกติสำหรับหลักสูตรสำหรับ bootloaders
pingswept

@pingswept: เฮ้ลินุกซ์บน 4 ชั้น ดี บางทีฉันควรดูในชิปนั้นแทน iMX233 ฉันรู้สึกแย่ครั้งหนึ่งที่ได้รับชิป ARM + SDRAM สองชิปของฉันใน 4 เลเยอร์และวางไว้เพื่อทำงานในโครงการอื่น ฉันเป็นผู้ใช้ Altium ด้วย
darron

9G20 และ iMX233 ค่อนข้างใกล้เคียง ฉันเลือก 9G20 เพราะ Ethernet MAC สร้างขึ้นในตัวและชิปราคาถูกกว่าเล็กน้อยในปริมาณที่น้อย แต่ iMX233 เป็นนักวิ่งที่ใกล้ขึ้น
ส่งเสียง

ลองดูที่ Chumby Hacker Board - อาจเป็นจุดเริ่มต้นที่ดีถ้าคุณตัดสินใจที่จะสร้างระบบรอบ ๆ iMX233 ไฟล์ Altium อยู่ในหน้า wiki นี้: wiki.chumby.com/mediawiki/index.php/Chumby_hacker_board_beta
pingswept
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.