دعم RTOS الشبيه بـ MitM في GDB

فكرت لفترة طويلة فيما إذا كان من الممكن إعادة نشر مقال عن حبري ، درست القواعد ، يبدو أنه الآن ليس ممنوعًا. إذا أخطأت ، فسأصححه :)


وبالتالي...


منذ بعض الوقت ، كتبت رمز البرنامج الثابت لملتقطي Epiphan لخط AV.io:


  • AV.io HD - طيارنا ، الذي تم تصحيح أخطاءه كثيرًا وتشكيل بنية
  • AV.io SDI - تحديد المواقف
  • AV.io 4K - الأجهزة الجديدة بالفعل والأساليب الجديدة ، نطلقها الآن على الفور تقريبًا
  • KVM2USB 3.0 - إعادة تفكير عميق في AV.io HD . في الواقع ، بفضل إمكانية التحديث في النموذج الأساسي ، مع عدم وجود تعديلات على الأجهزة تقريبًا ، تمكنوا من صنع منتج جديد بحتة.

كان Cypress FX3 متورطًا هناك ، وتم بناء SDK على رأس ThreadX. كمصحح JTAG ، يمكنك استخدام Olimex ARM-USB-OCD-H بالتزامن مع OpenOCD . لسوء الحظ ، لا يعرف OpenOCD شيئًا عن سلاسل الرسائل في RTOS ، وعلى الرغم من وجود الدعم الأساسي في التعليمات البرمجية ، خاصة بالنسبة لمعالجنا ، فقد استخدمنا نظام تكديس التسجيل الذي كان مختلفًا عما تم تنفيذه بالفعل. كان علي أن أفهم وأعدل . لا يمكن المبالغة في تقدير أرباح استخدام JTAG في التطوير ، على الأقل في حالة العمل الموزع .


لذا الوقت ينفد. الآن حان دور Xilinx's FPGA ومعالج برمجيات MicroBlaze ، حيث يمكنك تشغيل الإصدار 10x من FreeRTOS. لكن المشكلة هي نفسها تمامًا: لا يوجد دعم لمؤشرات الترابط في مصحح الأخطاء!


كلمات تتعلق بجهاز XSDK وأدوات التصحيح


يوفر Xilinx بيئة من المكونات المتكاملة بإحكام لتطوير البرامج على المعالجات باستخدام ARM Cortex-A53 و ARM Cortex-R5 و MicroBlaze core. يتميز MicroBlaze عن غيره - فهو معالج برامج يتم تنفيذه داخل FPGA. ويقتصر عدد النوى فقط على مقدار المساحة الحرة في الشريحة.


( CPU, FPGA, — Vivado) — XSDK ( 2020 Vitis), Eclipse. FPGA . , JTAG ( OpenOCD!) , . : , , .


, Eclipse, , — XSTC. . .


.


JTAG hw_server. TCP , — 3121, , , 3000 — GDB :


  • N+0 (3000) — ARM Cortex-A53
  • N+1 (3001) — ARM Cortex-R5
  • N+2 (3002) — MicroBlaze ( )

-, .


, . , . , ( !) — System Debugger GDB. MicroBlaze GDB — mb-gdb.


System Debugger . , Xilinx GDB — .


,


, RTOS OpenOCD, , , :


  1. RTOS TCB (Thread Control Block), , . . ( ) — Reverse Engineering! : , , .
  2. RTOS — . , , . , , — . .. . — .
  3. 1 — TCB ( — RTOS).

, GDB GDB , info threads info registers thread N bt.


, RTOS , , RTOS ( , SDK , ). , .


: . . p , , . , ThreadX Cypress FX3. , . — .


… GDB-client GDB-server , , , MitM ""? , , , , ?


, : . gdbproxy , .


— . C++ ( , , ), Asio, C++17 , , C++2a — , , , 100%, 90% !


,


, — . . Asio , . . .


: . TCB, . … GDB- . . … ! — . , , ( — ) : qSymbol::, : - ? — . — , . qSymbol:NAME, qSymbol:ADDR:NAME qSymbol::NAME , nullptr. - ( , — ) , .


. , , , , — … , !


.. , .


, : , . .


, . . (SMP , ) — . GDB ( ) — : . .


, GDB-client . , . : - , - SP (Stack Pointer) FP (Frame Pointer) . , .


: Set Current Thread ( OK EXX — XX — , ), . RTOS, , , . , — . — Current Execution? : — . , . ! . Set Current Thread Set Current Thread , xxxxxxxx , — ! , RTOS , Set Current Thread , Set Current Thread . : . .


, SP : TCB . SP , .


, . . Stop Reply Packets. , . , breakpoint, watchpoint Break ( , , 0x03 Stop Reply Packet). , , . Stop Reply Packet, . . Stop Reply Packets : vCont c — Continue s — Step ( ).


. , , .


, , . : . — . GDB. MicroBlaze GDB microblaze-tdep.h enum microblaze_regnum:


enum microblaze_regnum
{
  MICROBLAZE_R0_REGNUM,
  MICROBLAZE_R1_REGNUM, MICROBLAZE_SP_REGNUM = MICROBLAZE_R1_REGNUM,
  MICROBLAZE_R2_REGNUM,
  MICROBLAZE_R3_REGNUM, MICROBLAZE_RETVAL_REGNUM = MICROBLAZE_R3_REGNUM,
  MICROBLAZE_R4_REGNUM,
  MICROBLAZE_R5_REGNUM, MICROBLAZE_FIRST_ARGREG = MICROBLAZE_R5_REGNUM,
  MICROBLAZE_R6_REGNUM,
  MICROBLAZE_R7_REGNUM,
  MICROBLAZE_R8_REGNUM,
  MICROBLAZE_R9_REGNUM,
  MICROBLAZE_R10_REGNUM, MICROBLAZE_LAST_ARGREG = MICROBLAZE_R10_REGNUM,
  MICROBLAZE_R11_REGNUM,
  MICROBLAZE_R12_REGNUM,
  MICROBLAZE_R13_REGNUM,
  MICROBLAZE_R14_REGNUM,
  MICROBLAZE_R15_REGNUM,
  MICROBLAZE_R16_REGNUM,
  MICROBLAZE_R17_REGNUM,
  MICROBLAZE_R18_REGNUM,
  MICROBLAZE_R19_REGNUM,
  MICROBLAZE_R20_REGNUM,
  MICROBLAZE_R21_REGNUM,
  MICROBLAZE_R22_REGNUM,
  MICROBLAZE_R23_REGNUM,
  MICROBLAZE_R24_REGNUM,
  MICROBLAZE_R25_REGNUM,
  MICROBLAZE_R26_REGNUM,
  MICROBLAZE_R27_REGNUM,
  MICROBLAZE_R28_REGNUM,
  MICROBLAZE_R29_REGNUM,
  MICROBLAZE_R30_REGNUM,
  MICROBLAZE_R31_REGNUM,
  MICROBLAZE_PC_REGNUM,
  MICROBLAZE_MSR_REGNUM,
  MICROBLAZE_EAR_REGNUM,
  MICROBLAZE_ESR_REGNUM,
  MICROBLAZE_FSR_REGNUM,
  MICROBLAZE_BTR_REGNUM,
  MICROBLAZE_PVR0_REGNUM,
  MICROBLAZE_PVR1_REGNUM,
  MICROBLAZE_PVR2_REGNUM,
  MICROBLAZE_PVR3_REGNUM,
  MICROBLAZE_PVR4_REGNUM,
  MICROBLAZE_PVR5_REGNUM,
  MICROBLAZE_PVR6_REGNUM,
  MICROBLAZE_PVR7_REGNUM,
  MICROBLAZE_PVR8_REGNUM,
  MICROBLAZE_PVR9_REGNUM,
  MICROBLAZE_PVR10_REGNUM,
  MICROBLAZE_PVR11_REGNUM,
  MICROBLAZE_REDR_REGNUM,
  MICROBLAZE_RPID_REGNUM,
  MICROBLAZE_RZPR_REGNUM,
  MICROBLAZE_RTLBX_REGNUM,
  MICROBLAZE_RTLBSX_REGNUM,
  MICROBLAZE_RTLBLO_REGNUM,
  MICROBLAZE_RTLBHI_REGNUM,
  MICROBLAZE_SLR_REGNUM, MICROBLAZE_NUM_CORE_REGS = MICROBLAZE_SLR_REGNUM,
  MICROBLAZE_SHR_REGNUM,
  MICROBLAZE_NUM_REGS
};

, . - , , 00000000 xxxxxxxx, — , — : unavail. — . , qFeatures (TBD: !) , — .


, ?


: https://github.com/h4tr3d/gdbproxy/


, BSD MIT. OpenOCD (, : , , , ). .


: . , , RTOS, . . .


?


XSDK:


  1. — GDB , System Debugger
  2. GDB, 4002 ( gdbproxy, )
  3. gdbproxy, XSDK hw_server :
    ./gdbproxy --port 4002 --remote-host localhost --remote-port 3002 -- mb_freertos
  4. ...
  5. PROFIT!

في حالة استخدام جهاز التحكم عن بعد hw_server، بسبب المرونة الصغيرة لتكوين XSDK ، gdbproxyيجب تشغيله على نفس الجهاز مثل hw_server.


الموجودات


لا يوجد. مجرد خلاصة القول: يتم دعم الترابط على FreeRTOS و MicroBlaze.


All Articles