ตัวโหลดบูตคืออะไรและฉันจะพัฒนาได้อย่างไร


53

ฉันได้พบกับโปรเจคหลายตัวที่ใช้คอนโทรลเลอร์ไมโครคอนโทรลเลอร์ AVR กับ bootloader (เช่น Arduino) แต่ฉันไม่เข้าใจแนวคิดที่ดีนัก

ฉันจะสร้าง bootloader (สำหรับไมโครคอนโทรลเลอร์ใด ๆ ) ได้อย่างไร

หลังจากเขียน bootloader ของฉันแล้วมันถูกโปรแกรมไปยังไมโครคอนโทรลเลอร์ (เช่นโปรแกรม. hex ใด ๆ ที่เผาไหม้บนแฟลชรอมของ AVR หรือวิธีอื่น ๆ )?


10
คุณติดแท็กมันด้วยแท็กbootloaderคุณอ่านมันหรือไม่ ถ้าเป็นเช่นนั้นคุณได้อ่านArduino Bootloader , Arduino Bootloader Follow On , Arduino Bootloader , เครื่องมือหรือวิธีการที่ดีในการทำความเข้าใจโครงสร้างของ bootloaderและArduino Bootloader Detailsคำถามหรือไม่? ที่อยู่ทั้งหมดของคำถามเริ่มต้นของคุณ ฉันตัดมันให้เป็นสิ่งใหม่
Kevin Vermeer

บทความเกี่ยวกับวิธีการออกแบบ BootLoader: beningo.com/wp-content/uploads/images/Papers/ …
yahya tawil

2
@KevinVermeer ฉันคิดว่าคำถามของเขาตรงไปตรงมามากกว่านี้
richieqianle

คำตอบ:


103

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

ตรงกันข้ามกับวิธีปกติในการทำให้โปรแกรมเข้าสู่ไมโครคอนโทรลเลอร์ซึ่งผ่านฮาร์ดแวร์พิเศษที่สร้างขึ้นในไมโครเพื่อจุดประสงค์นั้น บน PIC นี่เป็นอินเตอร์เฟสที่คล้าย SPI ถ้าฉันจำได้ถูกต้อง AVRs ใช้ Jtag หรืออย่างน้อยก็บางคนทำ ไม่ว่าจะด้วยวิธีใดก็ต้องใช้ฮาร์ดแวร์ภายนอกบางตัวที่ดึงหมุดการตั้งโปรแกรมออกมาเพื่อเขียนข้อมูลลงในหน่วยความจำของโปรแกรม ไฟล์ HEX ที่อธิบายเนื้อหาหน่วยความจำของโปรแกรมนั้นมาจากคอมพิวเตอร์ที่มีวัตถุประสงค์ทั่วไปดังนั้นฮาร์ดแวร์นี้จะเชื่อมต่อกับคอมพิวเตอร์ในด้านหนึ่งและหมุดโปรแกรมพิเศษของไมโครที่อีกด้านหนึ่ง บริษัท ของฉันสร้างโปรแกรมเมอร์ PICให้เป็นงานอดิเรกดังนั้นฉันค่อนข้างคุ้นเคยกับกระบวนการนี้กับ PIC

จุดสำคัญของการเขียนโปรแกรมภายนอกผ่านฮาร์ดแวร์พิเศษคือมันทำงานได้โดยไม่คำนึงถึงเนื้อหาที่มีอยู่ของหน่วยความจำโปรแกรม ไมโครคอนโทรลเลอร์เริ่มต้นด้วยหน่วยความจำของโปรแกรมที่ถูกลบหรืออยู่ในสถานะที่ไม่รู้จักดังนั้นการเขียนโปรแกรมภายนอกจึงเป็นวิธีเดียวที่จะทำให้โปรแกรมแรกเข้าสู่ไมโคร

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

หากโวลุ่มของคุณต่ำกว่าหรือที่สำคัญกว่านั้นคุณคาดหวังว่าจะมีการพัฒนาเฟิร์มแวร์และแก้ไขข้อผิดพลาดอย่างต่อเนื่องคุณไม่ต้องการซื้อชิปที่ตั้งโปรแกรมไว้ล่วงหน้า ในกรณีนี้ชิปเปล่าจะถูกติดตั้งบนบอร์ดและเฟิร์มแวร์จะต้องทำการโหลดเข้าสู่ชิปซึ่งเป็นส่วนหนึ่งของกระบวนการผลิต ในกรณีดังกล่าวจะต้องมีการตั้งโปรแกรมบรรทัดฮาร์ดแวร์อย่างใด สิ่งนี้สามารถผ่านตัวเชื่อมต่อที่ชัดเจนหรือ pogo pin pads หากคุณยินดีที่จะสร้างฟิกซ์เจอร์ทดสอบการผลิต บ่อยครั้งที่ผลิตภัณฑ์ดังกล่าวต้องได้รับการทดสอบและอาจสอบเทียบแล้วดังนั้นค่าใช้จ่ายเพิ่มเติมในการเขียนโปรแกรมไปยังโปรเซสเซอร์จึงมักจะน้อยที่สุด บางครั้งเมื่อมีการใช้โปรเซสเซอร์ขนาดเล็กเฟิร์มแวร์ทดสอบการผลิตพิเศษจะถูกโหลดลงในโปรเซสเซอร์เป็นครั้งแรก สิ่งนี้ใช้เพื่ออำนวยความสะดวกในการทดสอบและสอบเทียบเครื่อง จากนั้นจะทำการโหลดเฟิร์มแวร์จริงหลังจากฮาร์ดแวร์รู้ว่าดี ในกรณีนี้มีข้อควรพิจารณาในการออกแบบวงจรบางอย่างเพื่อให้สามารถเข้าถึงบรรทัดการเขียนโปรแกรมได้อย่างเพียงพอเพื่อให้กระบวนการเขียนโปรแกรมทำงานได้ แต่ยังไม่สะดวกในวงจรมากเกินไป สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับเรื่องนี้โปรดดูของฉันในวงจรการเขียนโปรแกรมเขียนขึ้น

จนถึงตอนนี้ดีมากและไม่จำเป็นต้องใช้ bootloader อย่างไรก็ตามพิจารณาผลิตภัณฑ์ที่มีเฟิร์มแวร์ที่ค่อนข้างซับซ้อนซึ่งคุณต้องการอัปเกรดฟิลด์หรืออนุญาตให้ลูกค้าปลายทางอัปเกรดได้ คุณไม่สามารถคาดหวังให้ลูกค้าปลายทางมีแกดเจ็ตโปรแกรมเมอร์หรือรู้วิธีการใช้งานอย่างถูกต้องแม้ว่าคุณจะให้ไว้ จริงๆแล้วหนึ่งในลูกค้าของฉันทำสิ่งนี้ หากคุณซื้อตัวเลือกการปรับแต่งฟิลด์พิเศษของพวกเขาคุณจะได้รับหนึ่งในโปรแกรมเมอร์ของฉันกับผลิตภัณฑ์

อย่างไรก็ตามในกรณีส่วนใหญ่คุณเพียงต้องการให้ลูกค้าเรียกใช้โปรแกรมบนพีซีและมีการอัปเดตเฟิร์มแวร์อย่างน่าอัศจรรย์ นี่คือที่ bootloader เข้ามาโดยเฉพาะอย่างยิ่งหากผลิตภัณฑ์ของคุณมีพอร์ตการสื่อสารที่สามารถเชื่อมต่อกับพีซีเช่น USB, RS-232 หรืออีเธอร์เน็ต ลูกค้าใช้งานโปรแกรม PC ซึ่งพูดคุยกับ bootloader ในไมโครแล้ว สิ่งนี้จะส่งไบนารีใหม่ไปยัง bootloader ซึ่งจะเขียนไปยังหน่วยความจำของโปรแกรมจากนั้นทำให้รหัสใหม่ถูกเรียกใช้

ฟังดูง่าย แต่ก็ไม่ใช่อย่างน้อยถ้าคุณต้องการให้กระบวนการนี้มีความสมบูรณ์ จะเกิดอะไรขึ้นถ้ามีข้อผิดพลาดในการสื่อสารเกิดขึ้นและเฟิร์มแวร์ใหม่นั้นเสียหายเมื่อถึงที่ bootloader? จะเกิดอะไรขึ้นถ้ากระแสไฟถูกขัดจังหวะในระหว่างกระบวนการบู๊ต เกิดอะไรขึ้นถ้า bootloader มีข้อผิดพลาดและเล่นลูกเต๋าชนิดหนึ่งในตัวเอง?

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

โดยทั่วไปแล้ว bootloader อย่างง่าย ๆ ตามที่อธิบายไว้ข้างต้นจะไม่ได้รับการยอมรับเนื่องจากไม่มีความล้มเหลวที่ปลอดภัย หากไม่ได้รับรูปภาพแอพใหม่เหมือนเดิมคุณต้องการให้อุปกรณ์ดำเนินการต่อเพื่อเรียกใช้ภาพเก่าไม่ให้ตายจนกว่าจะอัปโหลดสำเร็จ ด้วยเหตุผลนี้โดยปกติจะมีสองโมดูลพิเศษในเฟิร์มแวร์ผู้อัปโหลดและ bootloader ผู้อัปโหลดเป็นส่วนหนึ่งของแอพหลัก ในฐานะที่เป็นส่วนหนึ่งของการสื่อสารกับโฮสต์เป็นประจำคุณสามารถอัปโหลดรูปภาพแอปใหม่ได้ สิ่งนี้ต้องการหน่วยความจำแยกต่างหากจากอิมเมจหลักเช่น EEPROM ภายนอกหรือใช้ตัวประมวลผลที่ใหญ่กว่าดังนั้นครึ่งหนึ่งของพื้นที่หน่วยความจำของโปรแกรมสามารถจัดสรรเพื่อจัดเก็บอิมเมจแอพใหม่ได้ ผู้อัปโหลดเพิ่งเขียนภาพแอพใหม่ที่ได้รับที่ไหนสักแห่ง แต่ไม่ได้เรียกใช้ เมื่อโปรเซสเซอร์ถูกรีเซ็ตซึ่งอาจเกิดขึ้นกับคำสั่งจากโฮสต์หลังจากอัปโหลด bootloader ทำงาน ตอนนี้เป็นโปรแกรมแบบครบวงจรที่ไม่ต้องการความสามารถในการสื่อสารภายนอก มันเปรียบเทียบเวอร์ชันแอปปัจจุบันและที่อัปโหลดตรวจสอบ checksums ของพวกเขาและคัดลอกรูปภาพใหม่ไปยังพื้นที่แอปหากเวอร์ชันต่างกันและตรวจสอบภาพเช็คซัมใหม่ หากภาพใหม่เสียหายเพียงแค่เรียกใช้แอพเก่าเหมือนเดิม

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

  1. bootloader พื้นฐาน อุปกรณ์นี้มีสายอนุกรมและจะเชื่อมต่อกับโฮสต์และเปิดตามต้องการ bootloader วิ่งจากรีเซ็ตและส่งคำขอตอบกลับการอัพโหลดไปยังโฮสต์ หากโปรแกรมอัพโหลดทำงานมันจะตอบสนองและส่งภาพแอพใหม่ หากไม่ตอบสนองภายใน 500 มิลลิวินาที bootloader จะยอมแพ้และเรียกใช้แอพที่มีอยู่ ในการอัปเดตเฟิร์มแวร์คุณต้องเปิดแอพ updater บนโฮสต์ก่อนจากนั้นจึงเชื่อมต่อและเปิดอุปกรณ์

  2. โปรแกรมอัพโหลดหน่วยความจำ ที่นี่เราใช้ขนาดต่อไปของ PIC ที่มีหน่วยความจำโปรแกรมมากเป็นสองเท่า หน่วยความจำของโปรแกรมแบ่งออกเป็นแอพหลัก 49% อิมเมจแอปใหม่ 49% และ bootloader 2% bootloader จะเรียกใช้จากการรีเซ็ตและคัดลอกอิมเมจแอพใหม่ไปยังอิมเมจแอพปัจจุบันภายใต้เงื่อนไขที่ถูกต้อง

  3. รูปภาพ EEPROM ภายนอก เช่น # 2 ยกเว้นว่าใช้ EEPROM ภายนอกเพื่อจัดเก็บภาพแอปใหม่ ในกรณีนี้โปรเซสเซอร์ที่มีหน่วยความจำมากขึ้นก็จะมีขนาดใหญ่ขึ้นเช่นกันและในตระกูลย่อยอื่นที่ไม่มีอุปกรณ์ต่อพ่วงที่เราต้องการ

  4. TCP bootloader นี่คือสิ่งที่ซับซ้อนที่สุดของพวกเขาทั้งหมด ใช้ PIC 18F ขนาดใหญ่ หน่วยความจำ 1/4 สุดท้ายของ bootloader ซึ่งมีสำเนาของเครือข่าย TCP ที่สมบูรณ์ bootloader รันจากการรีเซ็ตและพยายามเชื่อมต่อกับเซิร์ฟเวอร์อัพโหลดพิเศษที่พอร์ตที่รู้จักที่อยู่ IP ที่กำหนดค่าไว้ก่อนหน้านี้ นี่คือการติดตั้งขนาดใหญ่ที่มีเครื่องเซิร์ฟเวอร์เฉพาะสำหรับระบบทั้งหมด อุปกรณ์ขนาดเล็กแต่ละชิ้นจะเช็คอินกับเซิร์ฟเวอร์อัปโหลดหลังจากรีเซ็ตและจะได้รับสำเนาแอปใหม่ตามความเหมาะสม bootloader จะเขียนทับแอพที่มีอยู่ด้วยสำเนาใหม่ แต่จะรันเฉพาะเมื่อเช็คซัมถูกตรวจสอบ มิฉะนั้นจะกลับไปที่เซิร์ฟเวอร์อัพโหลดแล้วลองอีกครั้ง

    เนื่องจาก bootloader นั้นเป็นโค้ดที่ซับซ้อนซึ่งมีเครือข่าย TCP เต็มสแต็กจึงต้องมีการอัพเกรดฟิลด์ด้วย วิธีที่เราทำก็คือให้เซิร์ฟเวอร์อัพโหลดฟีดเป็นแอพพิเศษที่มีวัตถุประสงค์เพียงเพื่อเขียนทับ bootloader เมื่อมันถูกดำเนินการจากนั้นรีเซ็ตเครื่องเพื่อให้ bootloader ใหม่ทำงานซึ่งจะทำให้เซิร์ฟเวอร์อัพโหลดส่ง รูปภาพแอปหลักล่าสุด ในทางเทคนิคไฟดับในช่วงไม่กี่มิลลิวินาทีใช้แอพพิเศษเพื่อคัดลอกอิมเมจใหม่เหนือ bootloader จะเป็นความล้มเหลวที่ไม่สามารถกู้คืนได้ ในทางปฏิบัติสิ่งนี้ไม่เคยเกิดขึ้น เราก็โอเคกับโอกาสที่ไม่น่าเป็นไปได้เพราะอุปกรณ์เหล่านี้เป็นส่วนหนึ่งของการติดตั้งขนาดใหญ่ซึ่งมีคนที่จะทำการบำรุงรักษาในระบบอยู่แล้วซึ่งหมายถึงการเปลี่ยนอุปกรณ์ฝังตัวเป็นครั้งคราวด้วยเหตุผลอื่น ๆ

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


1
AVRs ทั้งหมดยกเว้นตระกูล Xmega (ซึ่งมีอินเตอร์เฟสแบบ 2 สายใหม่) ใช้อินเตอร์เฟส SPI ในขณะที่รีเซ็ต อันที่ใหญ่กว่าก็มี JTAG บางอันมีการเขียนโปรแกรมแบบขนานและอันที่เล็กกว่าอาจต้องการแรงดันไฟฟ้าสูงหากการรีเซ็ตได้รับการกำหนดค่าใหม่เป็น I / O MCU บางตัวเช่น Parallax Propeller และ Motorola / Freescale 68HC08 ตระกูลไม่มีฮาร์ดแวร์การเขียนโปรแกรมขั้นต่ำ แต่ bootloaders ใน ROM
Yann Vernier

มันเปรียบเทียบเวอร์ชันแอปปัจจุบันและที่อัปโหลดตรวจสอบ checksums ของพวกเขาและคัดลอกรูปภาพใหม่ไปยังพื้นที่แอปหากเวอร์ชันต่างกันและตรวจสอบภาพเช็คซัมใหม่ ใช่ แต่ถ้าพลังงานถูกขัดจังหวะในระหว่างการดำเนินการนี้จะมีภาพที่เสียหายใน "พื้นที่แอพ" ฉันคิดว่ามันอาจจะดีกว่าถ้ามี bootloader-failafe-app ที่เขียนแอพใหม่ใน mcu flash และถ้าการตรวจสอบถูกต้อง ดังนั้นในช่วงเริ่มต้นจะตรวจสอบไม่ว่าจะเป็นโอเคที่จะบูต app ใหม่ถ้ามันไม่ได้มันยังคงดำเนินการเอง (app failsafe)
Ervadac

@Erv: หากไฟฟ้าขัดข้องในระหว่างการคัดลอกเวอร์ชันใหม่ไปยังปัจจุบันการตรวจสอบเวอร์ชั่นปัจจุบันจะล้มเหลวเมื่อไฟฟ้ากลับมาและ bootloader ทำงานอีกครั้ง ฉันมักจะใส่คำ checksum ที่ส่วนท้ายสุดของภาพเพื่อให้การเขียนบางส่วนมีโอกาสที่ดีมากในการตรวจสอบความล้มเหลว
Olin Lathrop

สวัสดี ฉันขอแนะนำให้คุณ bootloader type 5 - แทน TCP stack คุณสามารถใช้ UDP จากนั้นใช้ TFTP เพื่อดาวน์โหลดอัปเดตหรือโปรโตคอลดั้งเดิม
i486

22

แนวคิดของ bootloader คืออะไร?

ลองนึกภาพสถานการณ์นี้: คุณมีพื้นที่เก็บข้อมูลที่พอเหมาะบนไมโครคอนโทรลเลอร์ของคุณ - เพียงพอที่จะเก็บโปรแกรมหรือแอปพลิเคชันมากกว่า 2-3 รายการที่เป็นอิสระจากกัน สมมติว่าเมื่อคุณบูตอุปกรณ์ของคุณคุณอาจต้องการที่จะเลือกที่จะทำงาน ดังนั้นคุณจะต้องสนับสนุนอะไร คุณจะต้องมีโปรแกรมเริ่มต้นซึ่งอนุญาตให้คุณเลือกระหว่างโปรแกรมอื่นในเวลาบูต

มันทำงานอย่างไร?

bootloader คือโปรแกรมนั้น - เป็นสิ่งแรกที่ต้องรันและสามารถโหลดแอปพลิเคชั่นอื่น ๆ ไปยังสถานที่เฉพาะในหน่วยความจำ (ไม่ว่าจะเป็น FLASH หรือระเหยง่ายเช่น RAM) จากนั้นก็ข้ามไปยังโปรแกรมที่ต้องการ .

วิธีการทำ bootloader avr (หรือสำหรับไมโครคอนโทรลเลอร์ใด ๆ )?

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

มันถูกโปรแกรมไปยังไมโครคอนโทรลเลอร์ (เช่นโปรแกรม. hex ใด ๆ ที่ไฟแฟลชรอมของ avr หรือวิธีอื่น ๆ ) ได้อย่างไร?

หากเป็นชิปที่ว่างเปล่าอย่างสมบูรณ์โดยไม่มี bootloader ที่มีอยู่ที่สามารถอัปเดตตัวเองได้คุณจะต้องเบิร์นเป็น FLASH เหมือนที่คุณอธิบายโดยใช้เทคนิคใดก็ตามที่จำเป็นเพื่อให้บรรลุผลสำเร็จ (ICSP ในกรณีของ AVR)

นี่คือไม่ครอบคลุมถึงสิ่งที่ "bootloaders" คืออะไร ขึ้นอยู่กับสิ่งที่คุณต้องการจากหนึ่งหรือระบบที่พวกเขาออกแบบมาสำหรับคุณสามารถออกแบบหนึ่งเพื่ออัปโหลดสิ่งไปยังตำแหน่งที่ระบุใน RAM แทน FLASH และเริ่มดำเนินการในตำแหน่งหน่วยความจำใด ๆ หรือบางทีคุณอาจต้องการระบบที่สามารถเลือกระบบปฏิบัติการที่จะโหลดเมื่อพีซีของคุณบูท (ดูตัวอย่างด้วง ) Bootloaders สำหรับไมโครคอนโทรลเลอร์ 8 บิตนั้นง่ายมาก

หมายเหตุเกี่ยวกับ Arduino: bootloader นี้เพียงจัดการ AFAIK โปรแกรมหนึ่งก็ยังจะใช้เวลามากกว่าพอร์ตอนุกรมเพื่อจัดการการอัปโหลดเฟิร์มและสิ่งอื่น


ปีงบประมาณ, คำตอบถูกเขียนขึ้นเพื่อจัดการกับหัวข้อย่อยเดิมที่ได้รับการแก้ไขแล้ว
Jon L

3

แนวคิดของโหลดเดอร์ "บูต" คล้ายกับแนวคิดของ "ปั๊มรองพื้น" ปั๊ม กล่าวอีกนัยหนึ่งคุณต้องมี "บางสิ่ง" ที่โหลดโปรแกรมไปยังที่อยู่ที่ระบุจากนั้นจึงเริ่มดำเนินการโปรแกรมตามที่อยู่ที่ให้ไว้ สิ่งนั้นเป็นบูตโหลดเดอร์ ในกรณีที่ง่ายที่สุดบูตโหลดเดอร์ "ปรากฏ" ที่ที่อยู่เริ่มต้นของ CPU ที่กำหนด (เป็นศูนย์มีโอกาสมากที่สุด) โหลดโปรแกรมลงในส่วนหน่วยความจำที่ต้องการถ่ายโอนการควบคุมไปยังและ "หายไป" รูปลักษณ์และการหายตัวไปถูกควบคุมโดยฮาร์ดแวร์ "ภายนอก" การติดตั้งที่เป็นไปได้อย่างหนึ่งคือการใช้ ROM ที่เปิดใช้งานผ่านการรีเซ็ต "ฮาร์ดแวร์" และปิดการใช้งานด้วยการรีเซ็ต "ซอฟต์แวร์" โหลดเดอร์ใน ROM สามารถทำได้ง่ายหรือซับซ้อนตามต้องการ และจำเป็นต้องเขียนในรูปแบบไบนารีที่ CPU นั้นเข้าใจ หากไม่ต้องการพื้นที่ที่อยู่ที่ใช้โดย ROM จะไม่จำเป็นต้องปิดใช้งาน ROM เห็นได้ชัดว่าสามารถใช้ EEPROM, ePROM, แฟลช PROM ฯลฯ แทน ROM

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