เริ่มต้นใช้งาน Yocto Linux BSP ด้วย Polarfire SoC FPGA Icicle Kit

เมื่อเดือนที่แล้ว ฉันได้รับบอร์ดพัฒนา Microchip PolarFire SoC FPGA Icicle development kit ที่มี PolarFire SoC FPGA พร้อมด้วย ระบบย่อย RISC-V CPU แบบ Penta–core 64 บิต และ FPGA ที่มี 254K LE และบูตไปยังระบบปฏิบัติการ Linux ที่ติดตั้งไว้ล่วงหน้าบน OpenEmbedded

วันนี้ ฉันจะสาธิตวิธีเริ่มต้นใช้งาน Yocto BSP และใช้เกณฑ์มาตรฐาน EEMBC CoreMark และฉันจะตรวจสอบ FPGA ด้วย Libero SoC Design Suite ในบทความต่อไป

ระบบปฏิบัติการที่รองรับโดย PolarFire SoC FPGA

ความคิดเริ่มต้นของฉันคือจะทำการทดสอบบน RISC-V คอร์โดยใช้ Linux ตรวจสอบข้อมูลระบบบางอย่าง, เรียกใช้การทดสอบเกณฑ์มาตรฐาน (เช่น SBC-Bench) รวบรวมเคอร์เนล Linux และติดตั้งบริการต่างๆ เช่น LEMP stack (Linux, Nginx (ออกเสียงว่า Engine-X), MySQL, PHP) ซึ่งสามารถใช้กับโฮสติ้ง WordPress ได้ แต่แล้วฉันก็ตรวจสอบระบบปฏิบัติการที่รองรับ Microchip PolarFire SoC FPGA

ระบบปฏิบัติการ-Polarfire-SoC-FPGA

Microchip รองรับ Yocto Linux BSP และ Buildroot Linux BSP , และ การกระจาย Linux แบบฝังตัว ของบริษัทอื่น เช่น Siemens Embedded และ WindRiver มีรายงานว่า FreeBSD กำลังเปิดตัวเร็วๆ นี้ และอาจมีระบบปฏิบัติการแบบเรียลไทม์หลายระบบสำหรับเคอร์เนล RISC-V 64 บิตขนาดเล็กของ SoC

ซึ่งหมายความว่าไม่มีตัวจัดการแพ็คเกจและไม่มีระบบไฟล์รูทที่ใช้ Debian ยกเว้นเครื่องมือบางอย่างที่ฉันวางแผนจะใช้ ในทางทฤษฎีแล้ว ยังคงสามารถบรรลุสิ่งที่ตั้งใจจะทำได้ ฉันไม่ต้องใช้เวลามากถึง 100 ชั่วโมงในการบรรลุเป้าหมายนั้น… ดังนั้นฉันจึงลดความทะเยอทะยานลง และรายงานประสบการณ์ของฉันในการสร้างภาพ Yocto Image คอมไพล์ข้าม Hello world และคอมไพล์และรันการทดสอบเกณฑ์มาตรฐาน EEMBC นี่ไม่ใช่ครั้งแรกที่ฉันเล่นกับ Yocto Project แต่ฉันยังคงได้เรียนรู้บางสิ่งและหวังว่าคุณจะทำได้เช่นกัน

การสาธิตเว็บเซิร์ฟเวอร์และการวิเคราะห์แรงดัน/กระแส

ก่อนทำงานกับ Yocto BSP ฉันได้เชื่อมต่อบอร์ดพัฒนากับอีเทอร์เน็ตเพื่อกรอกคู่มือเริ่มต้นใช้งานของ Microchip ให้สมบูรณ์ และเรียกใช้เว็บเซิร์ฟเวอร์


เราสามารถเข้าถึงหน้าเว็บที่จะแสดงแรงดันและกระแสไฟของ VDDA (XCVR Tx/Rx Lanes Supply), VDD25 (PLL และ PNVM Supply), VDDA25 (XCVR PLL Supply) และ VDD (Core Supply) โดยไปที่ http:/ /<board_ip_address>

การวิเคราะห์-แรงดันไฟ-กระแสไฟ-Icicle-Kit

เมื่อเราเรียกใช้เกณฑ์มาตรฐาน EEMBC CoreMark แล้ว การเข้าถึงหน้าเว็บนี้ใหม่จะเป็นเรื่องที่น่าสนใจ

Yocto Linux BSP

มาสร้าง Linux โดยใช้ Yocto BSP ตามที่อธิบายใน Github สำหรับการอ้างอิง ฉันใช้โน๊ตบุ๊คที่ใช้ Ubuntu 20.04 และฉันต้องเปลี่ยนคำสั่งบางคำสั่ง

ขั้นแรก ให้ติดตั้งยูทิลิตี้ repo:


จากนั้นมีการพึ่งพาบางอย่าง:


เวลาในการเริ่มต้น repo:


ตอนนี้เราสามารถกำหนดค่า build ได้:


ในการเริ่ม build ให้รันคำสั่งต่อไปนี้:


ฉันจำได้ว่าประมาณ 10 ปีที่แล้ว ระบบ Yocto build อาจต้องใช้เวลามากในการสร้างภาพบนแล็ปท็อประดับล่างกว่า 24 ชั่วโมง และด้วยการตั้งค่าเริ่มต้น โน๊ตบุ๊คของฉันซึ่งใช้โปรเซสเซอร์ AMD Ryzen 7 2700U แบบ 8 คอร์ และติดตั้ง RAM ขนาด 16 GB ซึ่งทำให้ช้าลงอย่างรวดเร็วและเกือบใช้งานไม่ได้กับโหลด CPU  50+:

การใช้-Polarfire-Icicle-Yocto-BSP-build-CPU

ฉันปล่อยให้งาน build เริ่มต้น หลังจากที่ฉันเข้านอน แต่ฉันไม่ได้ตรวจสอบข้อกำหนดในการจัดเก็บข้อมูล และงาน build จะหยุดหลังจากนั้นประมาณสองชั่วโมง เนื่องจากฮาร์ดไดรฟ์ของฉันหมด ตามที่เราจะเห็นเมื่อการสร้างเสร็จสิ้น จำเป็นต้องมีพื้นที่เก็บข้อมูลฟรีประมาณ 100 GB

ข้อกำหนด-ระบบ-Libero-SoC

ในขณะที่เราอยู่ในหัวข้อความต้องการของระบบ ชุดออกแบบ Libero SoC จะต้องการพื้นที่เพิ่มเติมประมาณ 35 GB และสำหรับการพัฒนา PolarFire SoC ต้องมี RAM อย่างน้อย 16 GB ดังนั้น คุณจึงต้องการมีเวิร์กสเตชันอันทรงพลังเพื่อพัฒนาแอปพลิเคชันบนชุดพัฒนา PolarFire SoC FPGA Icicle ที่มี RAM มากมายและที่เก็บข้อมูลเพียงพอ

กลับไปที่การ Yocto build ของเรา อุดมคติคือการมีเซิร์ฟเวอร์ build โดยเฉพาะ แต่ถ้าคุณตั้งใจที่จะใช้คอมพิวเตอร์ของคุณพร้อมกับการ bulid คุณอาจต้องการแก้ไข [your_yocto_build_dir]/conf/local.conf



ก่อนเริ่ม build…

อีกทางเลือกหนึ่งคือการหยุด ด build ชั่วคราวด้วย Ctrl-Z ซึ่งทำงานในลักษณะเดียวกันกับ Ctrl-C แต่ใช้ SIGTSTP แทน SIGINT เพื่อหยุดกระบวนการชั่วคราว และไม่ยุติกระบวนการ


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

ฉันหยุดไปประมาณ 3 ชั่วโมง แล้วกลับมาทำงานต่อได้ด้วยคำสั่ง “ fg “ มันเหมือนกับโหมดไฮเบอร์เนต สำหรับโปรแกรมเทอร์มินัลและมันก็มีอยู่ตลอดไป แต่ฉันอาจลืมไปหรือไม่เคยใช้เลย การสร้างที่สมบูรณ์ใช้เวลาประมาณ 7 ถึง 8 ชั่วโมงในเครื่องของฉัน

นั่นคือพื้นที่ที่ Yocto BSP ใช้:


เราสามารถค้นหารูปภาพใน tmp-glibc/deploy/images/icicle-kit-es/folder:


รูปภาพที่ไม่มีการบีบอัดนั้นมีขนาด 5.5GB จึงสามารถใส่ลงในการ์ด SD ขนาด 8GB แต่ขอแนะนำให้ใช้การ์ดขนาด 16GB หรือ 32GB นี่คือคำสั่งที่ Microchip จัดเตรียมไว้ให้เพื่อแฟลชไปยังการ์ด SD:


แต่ถ้าคุณต้องการการตรวจสอบรูปภาพ ยูทิลิตี้อย่าง USBImager จะเป็นที่ต้องการมากกว่า นั่นคือสิ่งที่ฉันใช้ในการแฟลชภาพไปยังการ์ด SD ขนาด 32GB จากนั้นจึงเสียบเข้าไปในช่องเสียบการ์ด SD ของบอร์ดพัฒนาเพื่อลองใช้งาน

มาขัดจังหวะการบู๊ตเพื่อตรวจสอบว่าตรวจพบการ์ด SD:


ดีแล้ว ไปต่อ… และไม่สามารถเปลี่ยนเป็นเคอร์เนลได้ ในที่สุดฉันก็รีเฟรชรูปภาพโดยใช้ไบนารีที่ไม่บีบอัด และฉันสามารถเข้าสู่ระบบเทอร์มินัลได้:


rootfs ไม่ได้ปรับขนาดโดยอัตโนมัติ และดูเหมือนว่าจะมีปัญหากับตาราง GPT… ฉันไม่ค่อยแน่ใจว่าเกิดอะไรขึ้นที่นี่ แต่เนื่องจากรูปภาพที่สร้างขึ้นเองของเราใช้งานได้ และเรามีแฟลช eMMC ให้แฟลชไปที่ที่จัดเก็บข้อมูลภายในแทน

ปิดบอร์ด ถอดการ์ด SD ออก และเชื่อมต่อกับ ttyUSB0 ด้วยBootterm เพื่อเข้าถึงเทอร์มินัล HSS:


ก่อนที่จะรีสตาร์ทบอร์ดพัฒนา ให้ขัดจังหวะการบู๊ต และพิมพ์ “ usbdmsc” เพื่อแสดงหน่วยความจำแฟลช eMMC เป็นที่เก็บข้อมูล USB ขนาดใหญ่บนโน๊ตบุ๊ค Ubuntu ของเรา


เราต้องการสาย Micro USB อีกเส้นที่เชื่อมต่อกับพอร์ต J16 Micro USB เพื่อดูหน่วยความจำแฟลชใน Ubuntu

เริ่มต้นใช้งาน-คู่มือ-PolarFire-SoC-FPGA-Icicle-Kit

PolarFire-Icicle-eMMC-USB-flash-drive

เราสามารถยกเลิกการต่อเชื่อมพาร์ติชั่นการบู๊ตและรูทก่อนที่จะแฟลชอิมเมจเหมือนกับที่เราทำกับการ์ด SD ฉันลองใช้อิมเมจ gz ก่อน แต่ฉันมีปัญหาเดียวกันกับการ์ด SD ฉันไม่สามารถเมานต์พาร์ติชั่นรูทแม้กระทั่งบนพีซี ดังนั้นฉันจึงเลือกอิมเมจที่ไม่บีบอัด และทุกอย่างก็เป็นไปอย่างราบรื่น

Flash-eMMC-PolarFire-FPGA-SoC-Icicle

หลังจากเสร็จสิ้น เราสามารถถอดสายไมโคร USB ที่เชื่อมต่อกับ J16 และเข้าถึงอิมเมจ Linux ของเรา…

สวัสดีชาวโลก Cross-Compilation

เรามาลองคอมไพล์โปรแกรม Hello World กัน


สำหรับ RISC-V โดยใช้ Yocto toolchain ซึ่งเราจะเพิ่มในเส้นทางก่อน:


และใช้เครื่องมือ RISCV GCC เพื่อ build :


อ๊ะ มันไม่ทำงานตามที่คาดไว้ ดูเหมือนว่า toolchain จะติดตั้งไม่ถูกต้อง หรือฉันใช้ผิดอัน ฉันได้ลองใช้ CFLAGS แล้ว แต่ไม่ใช่… บางทีมันอาจจะใช้ได้เฉพาะใน framework ของ Yocto/Bitbake… ฉันมีประสบการณ์มากขึ้นกับ buildroot และโดยปกติ cross-compilation toolchain จะทำงานนอกกรอบ

เกณฑ์มาตรฐาน EEMBC CoreMark

ดังนั้นฉันจะสร้าง EEMBC CoreMark ในเครื่อง นั่นคือสร้างโดยตรงบนบอร์ด รูปภาพที่เราสร้างขึ้นมาพร้อมกับ git และ GNU GCC toolchain ดังนั้นจึงควรตรงไปตรงมา


Buid และรัน CoreMark ด้วยสองไฟล์ที่สร้างขึ้น

  • run1.log

  • run2.log


เนื่องจากแกน RISC-V ทำงานที่ 600 MHz บอร์ดได้รับคะแนน 1339.136257 หรือประมาณ 2.23 CoreMark/MHz  แต่ไมโครชิปรายงาน 3.25 CoreMark/MHzบนบอร์ด ลองอีกครั้งโดยใช้แฟล็กเดียวกับที่บริษัทใช้:


นี่คือเนื้อหาของ run1.log:


อย่างไรก็ตาม ไม่พบคะแนน CoreMark แต่เรายังคงมี Iterations/Sec ที่เปลี่ยนจาก 1341.651573 เป็น 1666 ดังนั้นจึงได้รับการปรับปรุง ง่ายที่จะดูว่าทำไมคะแนนไม่แสดง แต่ดูจากรหัส:


มาทำซ้ำกับ -DHAS_FLOAT=1 แทน…


คราวนี้ดูถูกต้อง:


แต่นั่นเป็นเพียง 2.59 CoreMark/Mhz ยังไม่ถึง 3.125 CoreMark/MHz อันที่จริง มันจับคู่ผลลัพธ์ของ Microchip โดยใช้ดัชนีที่ไม่ได้ลงนาม มีคนพยายามทำเช่นเดียวกันและเขาได้รับคำแนะนำให้เปลี่ยนรหัสใน posix/core_portme.h เพื่อใช้ดัชนีที่ลงชื่อ:


หลังจากรันการทดสอบประสิทธิภาพอีกครั้ง คะแนนจะยิ่งสูงขึ้น:


1789.159376 CoreMark สอดคล้องกับ 2.98 CoreMark/MHz โดยประมาณ มาทำการแฮ็คครั้งสุดท้ายโดยกำหนด HAS_FLOAT=0 ในบรรทัดคำสั่ง make ผลลัพธ์:


ลองใช้ผลลัพธ์ Iterations/Sec: 1875 เป็นค่า CoreMark 1.0 และในกรณีนี้ เราสามารถบรรลุ 3.125 CoreMark/MHz ได้ตรงตามที่ Microchip ทำ สำหรับการใช้ดัชนีที่ลงนาม เหตุใดการลงนามจึงเร็วกว่าการไม่ได้ลงนามอย่างมาก ฉันไม่แน่ใจ… และเราจำเป็นต้องดูการประกอบ และตรวจสอบจำนวนรอบสำหรับแต่ละคำสั่งเพื่อหาคำตอบ

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

เพียงเท่านี้สำหรับวันนี้ และในอีกไม่กี่สัปดาห์ข้างหน้า ฉันหวังว่าจะโพสต์บางอย่างเกี่ยวกับส่วน FPGA มีคนขอให้ฉันประเมิน virt-io บนบัส PCI-e แต่เนื่องจากข้อจำกัดด้านเวลา ฉันจึงไม่สามารถทำได้ ฉันยังถาม Microchip ที่ตอบว่าควรใช้งานได้ แต่พวกเขายังไม่ได้ทดสอบเลย…

หากคุณสนใจบอร์ดนี้ มีจำหน่ายจากตัวแทนจำหน่ายต่างๆ เช่น  Mouser ในราคาไม่ถึง $500 (17,000฿)

แปลจากบทความภาษาอังกฤษ : Getting Started with the Yocto Linux BSP for Polarfire SoC FPGA Icicle Kit

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
โฆษณา