การควบคุมเวอร์ชันของแผนงานและซอร์สโค้ด


12

ฉันกำลังพัฒนาอุปกรณ์อิเล็กทรอนิกส์ซึ่งมีสองส่วนคือฮาร์ดแวร์ (Eagle schematics) และเฟิร์มแวร์ (ซอร์สโค้ด C ++) ฉันต้องการติดตามการเปลี่ยนแปลงทั้งในซอร์สโค้ดและแผนงาน แต่มีบางประเด็นที่ฉันไม่แน่ใจว่าจะจัดการงานของฉันอย่างไร:

  • สำหรับซอร์สโค้ดฉันจะใช้ Git แน่นอน แต่ schematics มีค่าเวอร์ชันเมื่อพวกเขาอยู่ในความเป็นจริงไฟล์ไบนารี (รุ่น Eagle ใหม่ใช้รูปแบบ XML บางอย่าง แต่มันไม่ได้มนุษย์อ่าน ... )?

  • เป็นความคิดที่ดีหรือไม่ที่จะนำซอร์สและแผนงานมาไว้ในที่เก็บ Git เดียว? มันจะสมเหตุสมผล แต่ในทางกลับกันบันทึกของฉันจะมีทั้งการเปลี่ยนแปลงซอฟต์แวร์และฮาร์ดแวร์ ซอฟต์แวร์ยังสามารถมีหลายสาขา แต่ฮาร์ดแวร์อาจไม่ ...

  • วิธีจัดการกับการแก้ไขฮาร์ดแวร์? แท็กพวกเขาหรือบันทึกไว้ในไดเรกทอรีที่แยกต่างหาก?

  • นอกจากนี้ยังอาจมีการพึ่งพาระหว่างการแก้ไขฮาร์ดแวร์และรุ่นเฟิร์มแวร์ วิธีการจัดการกับพวกเขา?

คุณช่วยแบ่งปันแนวปฏิบัติที่ดีที่สุดกับฉันได้ไหม


โซลูชันเชิงพาณิชย์จะใช้งานได้หรือไม่
ยูจีน Sh.

5
ฉันจะไม่สัมผัสระบบควบคุมเวอร์ชันเชิงพาณิชย์อีกต่อไป ประสบการณ์ของพวกเขาคือขั้นตอนการทำงานที่แย่มากซึ่งใช้งานยากกว่า svn หรือ git
pjc50

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

คำตอบ:


19

ส่วนใหญ่มันเป็นความชอบส่วนตัว

ฉันติดตามทุกสิ่งที่ฉันทำเพื่อโครงการใน Git โดยเฉพาะอย่างยิ่งตั้งแต่ Git จัดการไฟล์ประเภทส่วนใหญ่แม้แต่ไบนารีอย่างมีประสิทธิภาพเพียงพอ (แทนเรื่องไร้สาระของ Altium SVN ในตัว)

หนึ่งในเหตุผลหลักที่ฉันควรทำคือลูกค้าของฉันไม่ได้รู้สึกว่า Dropbox ปลอดภัยเพียงพอและฉันต้องการระบบสำรองที่ฉันสามารถเข้าถึงได้ทั่วโลกพร้อมกับบริบทการกำหนดเวอร์ชันในสิ่งที่ฉันทำ ดังนั้นฉันจึงตั้งค่าเซิร์ฟเวอร์ Git ส่วนตัวและระบบสำรองข้อมูลที่เข้ารหัสและใช้งานได้ดี บอร์ด, แผนงาน, รหัส, เอกสาร, รายงาน, การดัดแปลงด้วยตนเอง, ทุกอย่างถูกติดตาม

ปกติแล้วฉันจะสร้าง aa Repository สำหรับฮาร์ดแวร์หนึ่งสำหรับซอฟต์แวร์และหนึ่งสำหรับเฟิร์มแวร์ถ้ามันเป็นโครงการขนาดใหญ่อาจใช้เวลานาน แต่สำหรับโครงการบริการขนาดเล็กตัวอย่างหรือการทดลองเล็ก ๆ น้อย ๆ ฉันมักจะใส่ไว้ในที่เก็บเดียวตั้งแต่ผล ความโกลาหลจะไม่ใหญ่

ใน Git คุณสามารถใช้ที่เก็บย่อยเช่นกันเพื่อรวมเฟิร์มแวร์เข้ากับโครงการฮาร์ดแวร์หรือวิธีอื่น ๆ แม้ว่าพวกเขาจะเป็นที่เก็บข้อมูลที่ถูกจัดการแยกต่างหาก

สำหรับโครงการขนาดใหญ่ฉันมักใช้ระบบติดตามบั๊กเพื่อติดตามปัญหาและความละเอียดอีกครั้งสำหรับ HW และ SW ตั๊กแตนตำข้าวเป็นสิ่งที่ดีที่สามารถใช้งานได้ฟรี

สำหรับการแก้ไขฮาร์ดแวร์ที่ฉันสร้าง Gerbers หรืออะไรก็ตามที่คุณติดแท็กด้วย Git Hash สำหรับการแก้ไขนั้น Gerbers เหล่านั้นจะเป็นสิ่งที่แยก "รุ่นเก่า" ในโฟลเดอร์โดย R01, 02 เป็นต้นเนื่องจากคุณไม่ต้องการ สร้างใหม่ตลอดเวลา แต่เป็นไฟล์ที่เกิดขึ้นดังนั้นไม่ควรเป็นเวอร์ชั่นใน Git เอง (เพราะซอฟต์แวร์การออกแบบของคุณควรถูกกำหนดด้วยการสร้างเนื้อหาการผลิตหรืออื่น ๆ ... )

หากมีบางสิ่งที่น่าสนใจใน R01 ที่ไม่ได้เกิดขึ้นใน R02 (หรือวิธีอื่น ๆ ) คุณมีแฮชของ Git Hash สองตัวซึ่งคุณสามารถเปรียบเทียบไฟล์ต้นฉบับได้ไม่ต้องกังวล

หมายเหตุสุดท้ายตัวอย่างหนึ่งแนวคิดของโครงการจะมีที่เก็บฮาร์ดแวร์ซึ่งโฮสต์ไฟล์ "BoardPinout.h" ด้วย ไฟล์นี้ถูกรวมเป็นไฟล์เวอร์ชันระยะไกลในที่เก็บเฟิร์มแวร์ซึ่งมีไฟล์คำจำกัดความอินเทอร์เฟซไม่กี่ไฟล์ที่รวมอยู่ในที่เก็บซอฟต์แวร์จากระยะไกล

ความหมายทุกครั้งที่ฉันเปลี่ยนสัญญาณไม่กี่ตัวโดยไม่ต้องแก้ไขฟังก์ชั่นในวงกว้างโครงการ HW "อัพเดท" BoardPinout ซึ่งสามารถอัปเดตและใช้งานได้ในเฟิร์มแวร์และอื่น ๆ


1
เป็นเรื่องที่สมเหตุสมผลหรือไม่ที่จะนำฮาร์ดแวร์และเฟิร์มแวร์มาใช้ใน repos ต่างๆ มันจะเป็นปัญหาได้อย่างไรที่จะมีพวกเขาในที่เดียว? ฉันคาดหวังว่ามันจะเป็นปัญหาถ้าคุณต้องการติดตามการเปลี่ยนแปลงในส่วนประกอบที่อยู่ด้วยกัน (เช่นการเปลี่ยน IO pin จะต้องสะท้อนให้เห็นในการกำหนดเฟิร์มแวร์ที่แตกต่างกันและการตรวจสอบเวอร์ชั่นที่ไม่สามารถทำได้
leftaroundabout

@leftaroundabout ก่อนอื่นให้ขยาย repo FW ที่เปลี่ยนแปลงอย่างรวดเร็วของคุณด้วยกลุ่ม CAD ที่มีการออกแบบที่ซับซ้อนไม่ได้เป็นอย่างที่คุณต้องการ แต่คุณอาจต้องการอ่านบิตเกี่ยวกับ repos ย่อยและการเชื่อมโยงระหว่างพวกเขา ไม่ยากเลยที่จะทำกับ Git และแก้ไขปัญหานั้นโดยไม่ทำให้เกิดความสนิทสนมระหว่างการออกแบบ
Asmyldof

1
"ลูกค้าของฉันไม่รู้สึกว่า Dropbox ปลอดภัยเพียงพอ" สำหรับไฟล์เวอร์ชันพวกเขาถูกต้อง 100% เป็นอันตรายอย่างยิ่งหากผู้ใช้หลายคนสามารถแก้ไขไฟล์ในเวลาเดียวกันและอื่น ๆ อีกมากมายดังนั้นหากคุณมีหลายไฟล์ที่ประกอบด้วยทรัพยากรเดียว ฉันเห็นไบนารี "ชุดของไฟล์" เสียหายเช่นนี้ (ฐานข้อมูลไฟล์ทางภูมิศาสตร์ของไฟล์ ESRI หากคุณสงสัย)
jpmc26

1
@ jpmc26 นั่นเป็นความเห็นที่เร่งรีบทุกอย่างที่เกี่ยวกับเวอร์ชันเริ่มต้นในด้านความปลอดภัย ด้วยเทมเพลต GitIgnore ที่ชาญฉลาดเพียงไม่กี่รุ่นในขณะนี้จะห่อหุ้มทุกสิ่งได้อย่างง่ายดายโดยไม่ต้องยุ่งยากด้วยข้อดีที่นำ จริง ๆ แล้วฉันเห็นด้วยกับคุณใน Dropbox ที่ใช้ร่วมกัน ที่เว็บไซต์ของลูกค้าหนึ่งรายจะก่อให้เกิดปัญหาไม่รู้จบ ไฟล์ที่อยู่ระหว่างการพัฒนาวางไข่สำเนาที่ขัดแย้งกันไม่รู้จบในคอมพิวเตอร์ถูกปิดระหว่างส่วนของ dev เป็นหนึ่งในไฟล์ที่น่ารำคาญที่สุด
Asmyldof

@leftaroundabout: ขึ้นอยู่กับความสัมพันธ์ระหว่างฮาร์ดแวร์และเฟิร์มแวร์ ลองเปรียบเทียบกับโครงการซอฟต์แวร์ทั่วไป คุณจะส่งไฟล์ gif และ jpg ไปกับเว็บไซต์ของคุณหรือไม่? ในกรณีนี้ทั้งไบนารีและแหล่งที่มาเปลี่ยนแปลงกันแม้ว่าภาพจะไม่เปลี่ยนบ่อย แต่ .. คุณจะยอมรับซอร์สโค้ด Apache หรือ Nginx กับโครงการของคุณหรือไม่ ในกรณีนั้นคุณจะต้องส่งซอร์สโค้ดของเคอร์เนล Linux หรือไม่ ในกรณีนี้ Apache หรือ Nginx และเคอร์เนล Linux คล้ายกับฮาร์ดแวร์มากขึ้น แต่จะเปลี่ยนจากรหัสที่คุณเขียนซึ่งทำงานบนพวกเขาโดย
อิสระ

5

1) ไฟล์ schematic / board versioning ที่มีมูลค่าแน่นอน แม้ว่าคุณจะไม่สามารถติดตามความแตกต่างได้อย่างง่ายดาย แต่คุณก็มีวิธีที่สะอาดในการเปลี่ยนกลับเป็นฮาร์ดแวร์เฉพาะหากคุณต้องทำงานกับการแก้ไขอุปกรณ์เก่า

2) เรามีโครงสร้างต่อไปนี้ใน SVN ของเรา
/ tag
/ branch
/ trunk / hardware
/ trunk / software / firmware

หากสามารถใช้ได้กับโฟลเดอร์ย่อยเพิ่มเติมเช่นบางที / เฟิร์มแวร์และ / ConfigTool สำหรับซอฟต์แวร์และ / mainboard และ / daughterboard หรืออะไรทำนองนั้นสำหรับฮาร์ดแวร์

2) แท็กถูกสร้างจากโฟลเดอร์ย่อยที่ไม่ได้มาจากลำต้นทั้งหมดเช่น Tag / Mainboard-v1.2.345 ฮาร์ดแวร์ (เช่น PCB) มักมีการแก้ไข SVN ในการพิมพ์หน้าจอไหมหรือทองแดงเพื่อให้มีการอ้างอิงโดยตรง

4) การพึ่งพาระหว่างฮาร์ดแวร์และเฟิร์มแวร์มีความซับซ้อน IMO ไม่เหมาะสมที่จะจัดการกับมันในระดับพื้นที่เก็บข้อมูลยกเว้นการแสดงความคิดเห็นที่เป็นประโยชน์ในการกระทำ
พิจารณาการเข้ารหัสการเปลี่ยนแปลงฮาร์ดแวร์โดยใช้หมุด I / O สำรอง สิ่งที่ต้องการใช้ 4 พินเพื่อเข้ารหัสฮาร์ดแวร์รุ่นต่างๆ 16 แบบ นอกจากนี้เรายังใช้อินพุต ADC เดียวที่มีค่าความต้านทานต่างกันเพื่อเข้ารหัสเวอร์ชัน วิธีนี้ซอฟต์แวร์สามารถ "รู้" เกี่ยวกับฮาร์ดแวร์ที่ทำงานและเปลี่ยน / ปิด / เปิดใช้งานคุณลักษณะเฉพาะ


ฉันเห็นด้วย. ฉันยังเห็นแนวปฏิบัติที่ดีในการสร้าง "กลุ่มผลิตภัณฑ์" - แผนงาน, BOM, gerbers, ล็อตทั้งหมด - เนื่องในโอกาสที่ทุกรุ่นจะได้รับการผลิต คุณเรียกสิ่งเหล่านี้ว่า A, B, C ฯลฯ แล้วเก็บถาวรไว้ที่ไหนสักแห่งที่ทีมสามารถอ้างถึงได้ นอกจากนี้อย่าลืมวิธีการติดตาม wire mods ที่คุณทำบนบอร์ดต้นแบบ
pjc50

@ pjc50: จริงๆแล้วเราทำ "build" บันเดิลรีลีสเช่นกัน แต่อยู่นอกการควบคุมของแหล่งที่มา (แต่ด้วยการอ้างอิงการแก้ไข) โดยพื้นฐานแล้วมันจะเป็นสำเนาที่แน่นอนของทุกสิ่งที่ผู้ผลิตได้รับ หากคุณทำการพัฒนาฮาร์ดแวร์อย่างมืออาชีพด้วยการผลิตจำนวนมากเป็นสิ่งสำคัญมากที่จะต้องมีข้อมูลทั้งหมดให้พร้อมในกรณีที่มีบางอย่างผิดปกติ หากคุณจำไม่ได้ว่าคุณส่งบอร์ดเฮ้าส์ "เอกสารสำคัญฉบับนี้" ที่อาจระบุความหนาทองแดง PCB แบบกำหนดเองที่คุณอาจมีปัญหา
Rev1.0
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.