ระดับความสามารถในการแฮกของราสเบอร์รี่ปี่


35

ฉันทำงานกับระบบฝังตัว (ส่วนใหญ่เป็นไมโครคอนโทรลเลอร์) เป็นเวลาประมาณ 3 ปี ฉันต้องการทราบจำนวน RPi ของโอเพ่นซอร์สจริงหรือไม่? ฉันรู้ว่า arduino ให้รายละเอียดทั้งหมดเกี่ยวกับฮาร์ดแวร์ / ซอฟต์แวร์เป็นต้น แต่ RPi ล่ะ นี่เป็นสิ่งสำคัญเนื่องจากทีมของฉันและฉันต้องการทำสิ่งต่อไปนี้กับราสเบอร์รี่ pi [โครงการนี้ตั้งใจจะใช้ RPi เหมือนกับ arduino => ไม่มีระบบปฏิบัติการ]:

  1. เขียนใหม่ bootloader หลัก (ROM) เพื่อบูตจากแฟลชมากกว่า SD card ภายนอก
  2. มี bootloader ตัวที่สองในบอร์ดแฟลชซึ่งเปิดใช้งานพอร์ต usb ของ pi แล้วฟังมัน ต้องยอมรับรหัสไบนารี่ (ที่จะได้รับจากพีซีของฉัน) และบันทึกในแฟลช ในภายหลังเริ่มดำเนินการมัน
  3. พัฒนาไดรเวอร์อุปกรณ์ของเราเองเพื่อจัดการโปรโตคอลการสื่อสาร
  4. พัฒนาผู้อัปโหลดและสภาพแวดล้อมการดีบักของเราเองสำหรับ PI พร้อมกับการติดตั้ง C สำหรับ ARM แบบกำหนดเอง (จำเป็นสำหรับการควบคุม GPIO ฯลฯ )
  5. ใช้ระบบปฏิบัติการของเราเองสำหรับระบบฝังตัวถ้าเป็นไปได้

เป็นไปได้กับราสเบอร์รี่ Pi หรือไม่? หากไม่:
-> ห้าเป้าหมายของฉันไม่สามารถทำได้ด้วย raspberry pi ฉันต้องทำการเปลี่ยนแปลงอะไรกับโครงการของฉันหากฉันต้องทำงานกับ PI
-> บอร์ดอื่น ๆ ที่มีในตลาดที่จะให้ฉันบรรลุสิ่งที่ฉันต้องการ?

คำตอบ:


76

พื้นหลังบางส่วน

สิ่งที่สำคัญที่สุดที่คุณควรรู้คือการที่ RaspberryPi เป็นสัตว์แปลกที่ARM CPUเป็น CPU ไม่สำคัญ - VideoCore GPUมันเป็นเพียงร่วมกับหน่วยประมวลผล เมื่อ RaspberryPi เริ่มทำงานจะมีการอ่าน GPU blob จากการ์ด SD ไปยังแคช L2 และดำเนินการ รหัสนี้แล้วนำขึ้นทุกอุปกรณ์ต่อพ่วงที่สำคัญ (RAM, นาฬิกา ฯลฯ ) ARM CPUและเริ่มต้น จากนั้น bootloader ขั้นที่ 2 หรือระบบปฏิบัติการบางตัวสามารถทำงานARM CPUได้

GPU blob ไม่ได้เป็นเพียง bootloader จริงๆแล้วมันเป็นระบบปฏิบัติการ (Video Core OS) ด้วยตัวเอง องค์ประกอบที่สำคัญบางอย่างของระบบไม่สามารถเข้าถึงได้โดยตรงโดย ARM CPU และต้องสื่อสารกับGPU(โดยใช้mailboxระบบการส่งข้อความ) เพื่อใช้งาน มีเอกสารบางส่วนเกี่ยวกับสิ่งนี้ที่มีอยู่ ตอนนี้Video Core OS( VCOS) ถูกขยายเวลาโดยพนักงานของ Broadcom เพื่อเปิดใช้งานคุณสมบัติที่ต้องการโดยLinuxเคอร์เนลRISC OSหรือบางครั้งแม้แต่ระบบปฏิบัติการอดิเรกบางอย่าง ไม่มีเอกสารที่ดีคือเกี่ยวกับเรื่องนี้ แต่คุณจะต้องขุดในRaspberryPi forum,githubและสถานที่อื่น ๆ เพื่อค้นหาข้อมูลเกี่ยวกับเรื่องนี้ แต่มันอยู่ตรงนั้น .. และมีบางคนที่เขียนรหัสโลหะเปลือยของตัวเองหรือแม้แต่ระบบปฏิบัติการบน RaspberryPi เพื่อช่วยเหลือคุณ และแน่นอนว่ามีรหัสโอเพ่นซอร์สมากมายเช่นเคอร์เนล Linux ของ RasbperryPi

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

ปัญหาอีกประการหนึ่งคือUSBกองซ้อนโดย Synopsys เป็นกรรมสิทธิ์และอีกครั้งไม่มีเอกสารประกอบและดูเหมือนว่าแม้เอกสารจะยากที่จะใช้งานได้อย่างน่าเชื่อถือ แต่อีกครั้งรหัสสามารถใช้ได้ (Linux kernel, u-boot, CSUD ) การใช้ความสามารถด้านกราฟิกขั้นสูงVideo Coreอาจเป็นเรื่องยาก - มีซอร์สโค้ดโอเพนซอร์สสำหรับไลบรารีกราฟิก แต่มีไว้สำหรับARMด้านข้างเท่านั้น

ที่ถูกกล่าวว่ามันเป็นไปได้ที่จะทำให้RISC OSพอร์ตจากข้อมูลที่มีอยู่ (ยังไม่ชัดเจนสำหรับฉันถ้าพวกเขาใช้ข้อมูลที่สาธารณชนเข้าถึงได้เท่านั้น) บางคนกำลังเขียนใหม่ (เป็นอิสระจาก Broadcom) เคอร์เนล Linux สำหรับการฉีดมี เป็นFreeBSDพอร์ต 'U-boot` และอื่น ๆ ดังนั้นจึงเป็นไปได้ในการเขียนระบบปฏิบัติการของคุณเอง มันไม่ง่ายอย่างที่คิด

เป้าหมายของคุณ

หมายเลข 1

เท่าที่ฉันรู้ไม่มีทางที่ SoC สามารถเริ่มต้นในอีกทางหนึ่งได้มากกว่าที่อธิบายไว้ ดังนั้นขั้นตอนแรก bootloader SD cardจะต้องมีใน และต้องเป็นGPUเลขฐานสองไม่ใช่ARMเลขฐานสองซึ่งเป็นปัญหาอื่น และไม่มีแฟลชออนบอร์ดใน RaspberryPi ซึ่งเป็นปัญหาเช่นกัน

หมายเลข 2

ปัญหาหลักคือไม่มี on-board flashบน RaspberryPi คุณสามารถเพิ่มหนึ่งและมันสามารถเปิดใช้งานใน bootloader ของคุณ (ซึ่งจะต้องเป็น bootloader ขั้นที่ 2 แล้ว) อย่างไรก็ตามการเขียนไดรเวอร์ USB อาจเป็นปัญหาได้

หมายเลข 3, 4, 5

นี่ไม่น่าจะมีปัญหาอะไรมาก ส่วนใหญ่เป็นอุปกรณ์ต่อพ่วง (อย่างน้อยผู้ที่สามารถเข้าถึงARM) มีเอกสารที่นี่ Bootloader ที่มีอยู่ช่วยให้คุณสามารถกำหนดค่า SoC ได้ง่ายขึ้น คุณสามารถดูรหัสและเอกสารได้ที่นี่และที่นี่

ทางเลือก

ฉันไม่ทราบว่าบอร์ดอื่นใดดีเท่ากับ RaspberryPi ดังนั้นจึงเป็นการยากที่จะแนะนำอะไรบางอย่าง แต่คุณอาจดูโครงการที่เป็นผู้ใหญ่เช่น OMAP Beagleboard / Beaglebone / Pandaboardหรือคุณสามารถติดตามการพัฒนาบอร์ดใหม่เช่น Allwinner CubieboardหรือPCduino ทุกอย่างขึ้นอยู่กับสิ่งที่คุณต้องการบรรลุ


3
ฉันต้องการที่ +100 คำตอบนี้ ทำได้ดี.
orithena

@maligree ฮ่า ๆ ไม่ต้องกังวล - มันเสร็จเรียบร้อยแล้ว! :)
xxmbabanexx

1
+1 สำหรับ Beablebone เพราะเป็น opensource 100% และคุณมีความสามารถในการ "respin" ฮาร์ดแวร์และสร้างแผงวงจรของคุณเอง
portforwardpodcast

5

ในการอัพเดตคำตอบที่ยอดเยี่ยมของ Krzysztof Broadcom ได้เผยแพร่รหัสบางส่วนซึ่งได้รับใบอนุญาต 3-Clause BSD เพื่อช่วยในการสร้างไดร์เวอร์ GPU แบบโอเพ่นซอร์ส "การ RPI-เปิดเฟิร์ม" ความพยายามที่จะเปลี่ยนเฟิร์มแวหยดราสเบอร์รี่ Pi VPU เริ่มต้นในปี 2016: https://github.com/christinaa/rpi-open-firmware ดูเพิ่มเติมได้ที่https://news.ycombinator.com/item?id=11703842

มีบอร์ดทางเลือกมากมายที่อธิบายสั้น ๆ และเชื่อมโยงจากRaspberryPi - Debian Wikiรวมถึง ODROID-C1, Cubieboard, Banana Pi, OLinuxIno Wifi ของ Olimex และ OlinuxIno Mini, EOMA68 และ Beaglebone ดำ


โดยส่วนตัวแล้วฉันคิดว่าทางเลือกไม่ดีเท่าไรบอร์ด ODROID จำนวนมากบังคับใช้การตรวจสอบลายเซ็นบน bootloader และหยุดคุณไม่ให้รันโค้ดของคุณเอง ตระกูล TI OMAP3 อยู่ในโหมดปลอดภัยก่อนที่จะโทรหารหัสของคุณและ จำกัด สิ่งที่คุณสามารถทำได้ด้วย VPU บน RPi นั้นค่อนข้างดีจริง ๆ ฉันคิดว่ามันเป็นสิ่งที่ให้ความได้เปรียบเหนือกระดานอื่น ๆ และตอนนี้เรามีเครื่องมือที่ดีสำหรับมันสิ่งต่าง ๆ ดูดี
Kristina Brooks

1

จริงๆแล้วมีหลายอย่างที่คุณสามารถทำได้กับ U-boot bootloader กับ Raspberry Pi คุณปล่อยให้ GPU โหลด SoC ของโปรเซสเซอร์ร่วม ARM ของคุณด้วยอิมเมจ U-boot เป็น "OS"

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

มีบทความอีกบทความหนึ่งที่มีคำแนะนำมากมายสำหรับการสร้างอิมเมจ U-boot


1
นี่เป็นคำตอบที่อาจเป็นประโยชน์ในการเริ่มต้น แต่หลังจากการเชื่อมโยงสองสามปีหยุดทำงานและไม่มีการบอกใบ้ถึงเนื้อหาของพวกเขา พิจารณาอย่างน้อยก็บอกสาขา U-boot ว่าคุณใช้คอมไพเลอร์ใด
Dmitry Grigoryev

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