بناء تطبيق Bare-Metal على Intel Cyclone V للمبتدئين المطلقين

لا يعد إعداد نظام Linux على لوحة التطوير مثل SocKit باستخدام ARM Cortex A9 ثنائي النواة علم الصواريخ. تدعم الجهة المصنعة للوحة الصورة الجاهزة للاستخدام ، المناسبة للتثبيت على بطاقة SD أو أي وسائط أخرى. ولكن ماذا لو كنت تود أن تلمس المعدن العاري ، وتقترب من سرعة كسر الشفرة التي لا تقيدها نواة التشغيل؟ حسنًا ، هذا ممكن ، لكن ليس سهلاً وواضحًا. في هذا المقال القصير ، سوف أعطيك تعليمات خطوة بخطوة ، حول كيفية إنشاء وتشغيل أول تطبيق معدني على Cyclone V SoC ، والذي يستخدم ARM Cortex A9 للنظام الفرعي HPS من SoC.

تحتاج إلى الحصول على لوحة التطوير مع Intel (Altera) Cyclone V SoC. لقد استخدمت لوحة SoCKit:



لقد قمت بكل الأشياء الموضحة في هذه المقالة في ديبيان جيسي. يمكنك استخدام نظام Linux أو Windows مع التغييرات المقابلة.

وتحتاج DS-5 IDE. ولسوء الحظ ، لا يسمح لك الإصدار المجاني بتجميع رمز مكشوف. تحتاج النسخة الكاملة.

1. التحضير

على الرغم من أن لديك الإصدار الكامل من DS-5 ، إلا أنك تحتاج إلى تثبيت الإصدار DS-5 Altera المجاني. يجب تثبيت كلا الإصدارين في وضع sudo ، في دلائل مختلفة ، على سبيل المثال: / home / user / intelFPGA لـ DS-5 Altera Edition و / home / user / DS-5 للإصدار الكامل من DS-5. يجب عليك إدخال المسارات باليد أثناء عملية التثبيت.

2. IDE الجري

2.1. أولاً ، قم بتشغيل البرنامج النصي /home/user/intelFPGA/16.1/embedded/embedded_command_shell.sh ، ثم قم بتغيير الدليل إلى / home / user / DS-5 / bin وتشغيل IDE:

$ ./eclipse & 


البرنامج النصي تعيين متغيرات البيئة. لتعيين المتغيرات عند بدء تشغيل النظام ، يجب إضافة السطر التالي إلى الملف / home / user / ملف التعريف :

 QUARTUS_ROOTDIR=/home/user/intelFPGA/16.1/qprogrammer export PATH=$PATH:/usr/local/gcc-arm-none-eabi-5_4-2016q3/bin/:/home/user/intelFPGA/16.1/embedded/host_tools/mentor/gnu/arm/baremetal/bin/ 


إذا لزم الأمر ، أضف سطرًا مشابهًا لمتغيرات otter المطلوبة ، مثل QSYS_ROOTDIR.

أيضا ، تحتاج إلى تثبيت وتشغيل Quartus Prime. دعنا نأخذ في الاعتبار أن دليل تثبيت Quartus هو /home/user/intelFPGA/16.1/quartus/ .

تشغيل Quartus Prime ، الموجود في /home/user/intelFPGA/16.1/quartus/bin/quartus ، وهي أداة مساعدة مبرمج JTAG ، موجودة في / home/user/intelFPGA/16.1/qprogrammer/bin/quartus_pgmw .

3. توصيل SoCkit

3.1. قم بتوصيل لوحة SoCkit بكمبيوتر. قم بتوصيل كبلات microUSB بمنافذ اللوحة ، المسمى "USB Blaster (JTAG)" و "USB to UART".

3.2. قم بتشغيل اللوحة وأدخل:

 $ ls /dev/bus/usb/001 001 002 003 


الرقم الأخير (003) هو واجهة JTAG. تعيين أذونات للكتابة:

  $ sudo chmod 666 /dev/bus/usb/001/003 


عليك أن تفعل ذلك في كل مرة تقوم فيها بتشغيل اللوحة.

3.3. إعدادات محطة TTY

يمكنك استخدام هذا الأمر:
 screen /dev/ttyUSB0 115200 


4. بناء التحميل المسبق (u-boot-spl)

4.1. قم بتنزيل الملف sockit_ghrd_16.0.tar.gz وقم بفك ضغطه . على سبيل المثال ، قم بفكها إلى / home / user / ghrd-16 / sockit_ghrd .

4.2. قم بتشغيل Quartus Prime وافتح الملف /home/user/ghrd-16/sockit_ghrd/soc_system.qpf.

4.3. تشغيل Qsys (أدوات / Qsys). افتح الملف / home/user/ghrd-16/sockit_ghrd/soc_system.qsys. هل توليد / توليد HDL وإنهاء Qsys.

4.4. تشغيل مجمع في Quartus برايم.

4.5. تشغيل bsp-editor: /home/user/intelFPGA/16.1/embedded/host_tools/altera/preloadergen/bsp-editor . إنشاء مشروع جديد: ملف / جديد HPS BSP. في الحقل " دليل إعداد Preloader " الكتابة " / home / user / ghrd-16 / sockit_ghrd / hps_isw_handoff / soc_system_hps_0. "

4.6. إعداد Preloader. انتقل إلى علامة التبويب خيارات متقدمة. أغلق Watchdog_enable . إذا كنت ترغب في رؤية رسائل تصحيح الأخطاء من خلال JTAG ، فيمكنك تشغيل Semihosting . بعد هذا اضغط إنشاء وإنهاء.

4.7. من الممكن تغيير رسالة بدء التشغيل. على سبيل المثال ، في برنامج الملف / spl_bsp / uboot-socfpga / board / altera / socfpga / socfpga_cyclone5.c ، قم بتغيير السلسلة " BOARD: Altera SOCFPGA Cyclone V Board " على متن آخر:
 /* * Print Board information */ int checkboard(void) { #ifdef CONFIG_SOCFPGA_VIRTUAL_TARGET puts("BOARD : Altera VTDEV5XS1 Virtual Board\n"); #else //puts("BOARD : Altera SOCFPGA Cyclone V Board\n"); puts("ARM preloader build by 32-bit.me\n"); #endif return 0; } 


4.8. يجب ضبط متغير البيئة SOCEDS_DEST_ROOT على / home / user / intelFPGA / 16.1 / embedded :
 export SOCEDS_DEST_ROOT=/home/user/intelFPGA/16.1/embedded 

اذهب الآن إلى الدليل
 /home/user/ghrd-16/sockit_ghrd/software/spl_bsp 
والقيام بها. Make يمكن أن تفشل مع وجود خطأ "make: mkpimage: لم يتم العثور على الأمر" ، ولكن يجب أن تقوم بإنشاء ملف u-boot-spl في المسار / المنزل / المستخدم / ghrd-16 / sockit_ghrd / software / spl_bsp / uboot-socfpga / spl / ش التمهيد .

4.9. اختبار التحميل المسبق

4.9.1. لا تحتاج إلى صورة FPGA (التي تحتوي على ملحق ".sof") لتشغيل برنامج التحميل المسبق. قم بتشغيل DS-5 ، وافتح "تكوينات تشغيل / تصحيح".

4.9.2. في الحقل ، يجب ضبط الاتصال على CV SoCKit 1-1 . إذا لم يكن الأمر كذلك ، فاضغط على الزر "استعراض" واضبط هذا الخيار. إذا ظهر خطأ ، فافعل 3.1-3.2.

4.9.3. قم بتعيين الملف u-boot-spl في علامة التبويب "الملفات" ، في حقل "التطبيق على المضيف للتنزيل": / home / user / ghrd-16 / sockit_ghrd / software / spl_bsp / uboot-socfpga / spl / u-boot-spl . اضبط العلامة "تحميل الرموز". تبقى حقل "الملفات" فارغًا.

4.9.4. قم بإيقاف تشغيل البرنامج النصي لتصحيح الأخطاء في علامة التبويب تصحيح الأخطاء.

4.9.5. تشغيل الأداة المساعدة الطرفية (على سبيل المثال ، الشاشة ) واضغط على الزر "تصحيح". يتم تحميل برنامج التحميل المسبق في الذاكرة ويكون مصحح الأخطاء جاهزًا للتشغيل. اضغط على زر "متابعة" (أو F8) وانظر الرسالة:

 U-Boot SPL 2013.01.01 (Jun 24 2017 - 19:49:33) ARM preloader build by 32-bit.me CLOCK: EOSC1 clock 25000 KHz CLOCK: EOSC2 clock 25000 KHz CLOCK: F2S_SDR_REF clock 0 KHz CLOCK: F2S_PER_REF clock 0 KHz CLOCK: MPU clock 925 MHz CLOCK: DDR clock 400 MHz CLOCK: UART clock 100000 KHz CLOCK: MMC clock 50000 KHz CLOCK: QSPI clock 370000 KHz RESET: COLD SDRAM: Initializing MMR registers SDRAM: Calibrating PHY SEQ.C: Preparing to start memory calibration SEQ.C: CALIBRATION PASSED SDRAM: 1024 MiB ALTERA DWMMC: 0 Card did not respond to voltage select! spl: mmc init failed: err - -17 ### ERROR ### Please RESET the board ### 


وهذا يعني أن برنامج التحميل المسبق قد بدأ بنجاح.

4.9.6. بعد تصحيح أخطاء الجلسة ، اضغط على "قطع الاتصال عن الهدف" و "إزالة الاتصال".

5. اكتب Hello World لوضع العارية.

5.1. قم بتنزيل المشروع ArrowSocKit_BareMetal_GNU.zip. عيّن متغيرات البيئة كما في 2.1. ، قم بتشغيل DS-5 ، قم باستيراد المشروع من الأرشيف ( ملف / استيراد / مشروع موجود في مساحة العمل ، حدد ملف أرشيفي ). يظهر المشروع الذي تم فك حزمه في الدليل / home / user / DS-5-Workspace / BareMetalBoot-GNU.

5.2. يمكنك محاولة بناء المشروع باستخدام ، ولكن لا يمكن بناءه بعد. لبناء المشروع ، قم بما يلي.

5.3. انسخ الدليل / home/user/ intelFPGA / 16.1 / embedded / ip / altera / hps / altera_hps / hwlib إلى / home / user / DS-5-Workspace / . فيما يلي مجلدات src وتضمينها ، وفي كل منها توجد أدلة soc_cv_av و soc_a10 . يمكنك إزالة الدلائل المسماة soc_a10 . ثم انسخ الملفات libcs3.a و libcs3arm.a و libcs3unhosted.a من /home/user/intelFPGA/16.1/embedded/host_tools/mentor/gnu/arm/baremetal/arm-altera-eabi/lib. إلى دليل المشروع (/ home / user / DS-5-Workspace / BareMetalBoot-GNU). انسخ ملف arm-names.inc من / home/user/ intelFPGA / 16.1 / embedded / host_tools / mentor / gnu / arm / baremetal / arm-altera-eabi / lib / cortex-a9 / إلى / home / user / DS- 5 مساحة العمل / BareMetalBoot-GNU / .

5.4. في Makefile تغيير "CROSS_COMPILE: = arm-none-eabi-" إلى "CROSS_COMPILE: = arm-altera-eabi-". قم أيضًا بتغيير المسار إلى hlib : HWLIBS_ROOT: = / home / user / DS-5-Workspace / hwlib

5.5. الآن تشغيل make . وقراءة جميع رسائل الخطأ. إذا تعذر على make العثور على بعض الرموز ، فيجب أن تجدها في الدلائل hwlib / src / soc_cv_av و hwlib / include / soc_cv_av ، وعمل نسخة في hwlib / src و hwlib / include في المقابل. بعد أن تجد كل الكسور ، يصبح الخطأ "mkimage: not found" مع الخطأ ، ولكن هذا ليس مهمًا ، لأننا نحتاج إلى ملف test.axf فقط.

5.6. تشغيل تطبيق

5.6.1. لتشغيل أحد التطبيقات ، من الضروري تحميل صورة FPGA (ملف .sof) ، والتي تم إنشاؤها عندما أنشأنا برنامج التحميل المسبق. تشغيل المبرمج كما فعلنا في 2.1. يجب أن يكون هناك نص "CV SoCit [1-1]" على يمين أسفل "إعداد الأجهزة". إذا لم يكن هناك ، فيجب عليك تعيين إذن الكتابة لمنفذ JTAG (انظر أعلاه) والنقر فوق الزر "إعداد البرامج الثابتة".

5.6.2. انقر فوق "الكشف التلقائي" وحدد خيارًا اعتباطيًا من القائمة. تشاهد تكوين جهازين: الأول هو ما حددته (على سبيل المثال ، 5CSEBA6) والثاني هو SOCVHPS. أزل الجهاز الأول: حدده واضغط على حذف. اضغط على "إضافة ملف" وافتح ملف الصورة (/home/user/ghrd-16/sockit_ghrd/output_files/soc_system.sof). ظهر جهاز جديد على يمين SOCVHPS. حركه بالماوس إلى المقام الأول في السلسلة. بعد ذلك ، اضغط على "ابدأ" وحمِّل الصورة.

5.6.3. في DS-5 افتح "تكوين التصحيح" في علامة التبويب "الملفات". قم بتعيين الملف u-boot-spl على السطر "التطبيق على المضيف للتنزيل". أزل علامة في "تحميل الرموز". قم بتعيين الملف "test.axf" في السطر "الملفات". في علامة التبويب "مصحح الأخطاء" تحقق من "تشغيل البرنامج النصي لمصحح تهيئة التهيئة الهدف" وقم بتعيين ملف البرنامج النصي "debug-unhosted.ds" ، الموجود في دليل المشروع th. في الملف ، قم بتحرير المسار إلى أداة التحميل المسبق:
# Load the SPL preloader into memory.
#
loadfile "/home/user/ghrd-16/sockit_ghrd/software/spl_bsp/uboot-socfpga/spl/u-boot-spl" 0x0


قم بتشغيل شاشة محطة TTY واضغط على Debug. بعد ذلك سيبدأ برنامج التحميل المسبق ، وسيتم تحميل التطبيق ، وسيتم تعيين مصحح الأخطاء في نقطة بداية البرنامج. اضغط على زر "متابعة". في نافذة من المحطة الطرفية ، سترى مخرج برنامج التحميل المسبق ، كما هو موضح أعلاه ، ثم ما يلي:

 Disabled interrupts because preloader enabled ECC interrupts. Global Timer value at startup = 0x000000005A10B609 CPU frequency is 925000000 hertz. DDR frequency is 400000000 hertz. MPU peripheral frequency is 231250000 hertz. MB ZERO remapped to SDRAM. L3 interconnect remapped as inaccessible and SDRAM. Interrupt controller system API initialized. MMU initialized and enabled. L1 and L2 cache system initialized and enabled. GIC interrupts enabled. PIT started. PIT interrupt registered and enabled. GPIOs initialized. UART0 initialized. L3 interconnect remapped as accessible and SDRAM. Bridges initialized. Boot completed. Boot milestones: New buffer !ESTONE : GT TICKCOUNT : INCREMENTAL : CUMULATIVE initial GT : 0x000000005A10B609 : 0.000us : 0.000us frequency capture : 0x000000005A119D58 : 256.065us : 256.065us initial remapping : 0x000000005A11C936 : 48.562us : 304.627us interrupt sys init : 0x000000005A139FED : 521.094us : 825.721us mmu init : 0x000000005A62D774 : 22449.985us : 23275.706us cache init : 0x000000005A65CF96 : 841.488us : 24117.194us interrupts enabled : 0x000000005A65D0D7 : 1.388us : 24118.582us pit start : 0x000000005A65DD2E : 13.661us : 24132.242us pit enabled : 0x000000005A65DF67 : 2.461us : 24134.703us gpio init : 0x000000005A65FC12 : 31.736us : 24166.439us uart0 init : 0x000000005A66084D : 13.539us : 24179.978us fpga config : 0x0000000000000000 : 79769704095969360.000us : 79769704095993552.000us last remapping : 0x000000005A660981 : 6558428.303us : 24181.310us bridge init : 0x000000005A6611B6 : 9.085us : 24190.396us complete : 0x000000005A661222 : 0.467us : 24190.863us Hello world, 32bit-me! 


تهانينا! لقد قمت للتو بتشغيل أول تطبيق معدني لك على نظام Cortex-A9.

Source: https://habr.com/ru/post/ar463717/


All Articles